Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何安装Python配方文件(.py)?_Python_Installation_Python 3.x_Recipe - Fatal编程技术网

如何安装Python配方文件(.py)?

如何安装Python配方文件(.py)?,python,installation,python-3.x,recipe,Python,Installation,Python 3.x,Recipe,我是Python新手。我目前在Py3k(Win)上 安装.py文件时遇到问题。基本上,我想使用页面底部提供的食谱。因此,我想将它们放在.py中,并将它们导入到我的任何源代码中 因此,我将所有配方复制到recipes.py文件中,并将它们复制到C:\Python3k\Lib\site packages 现在,import工作正常,但是当我试图从中调用任何函数(例如,take)时,我得到了一个全局名称“islice”未定义…所以我想,我应该在recipes.py中添加一个itertools导入 我还

我是Python新手。我目前在Py3k(Win)上

安装
.py
文件时遇到问题。基本上,我想使用页面底部提供的食谱。因此,我想将它们放在
.py
中,并将它们导入到我的任何源代码中

因此,我将所有配方复制到
recipes.py
文件中,并将它们复制到
C:\Python3k\Lib\site packages

现在,
import
工作正常,但是当我试图从中调用任何函数(例如,
take
)时,我得到了一个
全局名称“islice”未定义
…所以我想,我应该在
recipes.py中添加一个
itertools
导入

我还是会犯同样的错误吗?是否需要将所有实例更改为
itertools.
?我怎样才能使进口的产品全球化?这是新的Py3k变化吗?我遗漏了什么吗


提前感谢:)

有两个密切相关的问题

首先,在recipes.py中,您需要访问所有的itertools

至少,这意味着你需要

import itertools
在顶端。但是在这种情况下,您需要将所有的itertools函数限定为
itertools.
,正如您所说的。(您也可以使用
导入itertools,然后使用
导入它。

第二,你可以这样做

from itertools import islice, count, chain
但是您需要将所有需要的函数都放在列表中

最后,建议最少但可能最简单的方法是

from itertools import *
这是危险的,因为它污染了您的命名空间,从
itertools
,这被认为是不好的和不受控制的,但在这种情况下可能并不可怕

其次,在使用
recipes.py
的所有代码中都存在类似的问题;您需要限定或显式导入所有内容。所以,也

import recipes
recipes.take(...)


您是否在
recipes.py
?@jcubic中使用了itertools import*
中的
全局名称“itertools”未为
recipes.py
?:-\古怪的你应该问,如何安装python模块(我肯定有很多信息)。@alxx,这与安装模块无关@jcubic。请坚持平面设计。+1但老实说,我甚至不会提到来自foo import*
。看看jcubic对这个问题的评论,以证明我们并非都是成年人。我知道blah import的
*
是不受欢迎的,但这只是为了解决project euler和其他问题……所以这对我来说并不重要,反正在这种情况下……)<代码>来自itertools导入*
是此处的适当导入语句。如果添加了未来的配方,它们可能会使用需要添加到显式导入中的新itertools函数。配方定义预计将从itertools命名空间中运行。您不必担心污染模块名称空间,因为这正是您想要用于recipes模块的名称空间。(像这样的情况,您正在“扩展”另一个模块,是通配符导入的主要用例之一。)
from recipes import take
take(...)