【问题标题】:How to install a Python Recipe File (.py)?如何安装 Python 配方文件 (.py)?
【发布时间】:2010-09-25 08:53:17
【问题描述】:

我是 Python 新手。我目前正在使用 Py3k (Win)。

我在安装.py 文件时遇到问题。基本上,我想使用this 页面底部提供的食谱。所以我想把它们放在我的源代码中的.pyimport 中。

所以我将所有食谱复制到recipes.py 文件中,并将它们复制到C:\Python3k\Lib\site-packages

现在,import 工作正常,但是当我尝试从中调用任何函数(例如 take)时,我得到了一个 global name 'islice' is not defined...所以我想,我应该添加一个 itertools导入到recipes.py

我仍然遇到同样的错误?我是否需要将所有实例更改为itertools.<funcname>?我怎样才能使进口成为全球性的?这是一个新的 Py3k 变化吗?我有什么遗漏吗?

提前致谢,:)

【问题讨论】:

  • 你在recipes.py中使用了from itertools import *吗?
  • @jcubic, global name 'itertools' is not defined for recipes.py? :-\奇数!
  • 你应该问,如何安装python模块(我确定有很多信息)。
  • @alxx,这与安装模块无关。 @jcubic。请坚持图形设计。

标签: python installation python-3.x recipe


【解决方案1】:

有两个密切相关的问题。

首先, recipes.py,你需要访问所有的itertools。

至少,这意味着你需要

import itertools

在顶部。但在这种情况下,您需要将所有 itertools 函数限定为 itertools.<funcname>,正如您所说。 (您也可以使用import itertools as it,然后使用it.<funcname>。)

其次,你可以这样做

from itertools import islice, count, chain

但您需要将所有需要的函数都放在列表中。

最后,最不推荐但可能最简单的方法是这样做

from itertools import *

这很危险,因为它会用来自itertools一切 污染您的命名空间,这被认为是不好的和不受控制的,但在这种情况下可能并不可怕。

第二,您在所有使用的代码中都有类似的问题recipes.py;您需要限定或明确导入所有内容。所以,要么

import recipes
recipes.take(...)

from recipes import take
take(...)

【讨论】:

  • +1 但老实说我什至不会提到from foo import *。查看 jcubic 对这个问题的评论,以证明我们不是所有成年人。
  • 我知道from blah import * 不受欢迎,但这只是为了解决项目 euler 之类的问题......所以对我来说并不重要,无论如何...... :)
  • from itertools import * 是这里合适的导入语句。如果添加未来的配方,他们可能会使用新的 itertools 函数,这些函数需要添加到显式导入中。配方定义期望在 itertools 命名空间内运行。您无需担心会污染模块名称空间,因为这正是您想要 用于 recipes 模块的名称空间。 (像这样的情况,你“扩展”另一个模块,是通配符导入的主要用例之一。)
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2014-09-08
  • 2022-06-13
  • 1970-01-01
相关资源
最近更新 更多