【问题标题】:import statement fails for one module一个模块的导入语句失败
【发布时间】:2009-04-28 20:25:09
【问题描述】:

好的,我发现了问题,这是一个环境问题,我在 sys.path 上有相同的模块(减去 options.py),而是从那里导入。感谢大家的帮助。

我有一系列导入语句,其中最后一个不起作用。知道为什么吗? options.py 与其他所有内容位于同一目录中。

from snipplets.main import MainHandler
from snipplets.createnew import CreateNewHandler
from snipplets.db import DbSnipplet
from snipplets.highlight import HighLighter
from snipplets.options import Options

ImportError: 没有名为选项的模块

snipplets 目录中我的 __init__.py 文件是空白的。

【问题讨论】:

  • 发布 options.py。您没有提供足够的信息让我们提供帮助。
  • dev 和 master 分支冲突?
  • 您需要提供更多上下文。我下载了代码,但上面的所有导入对我来说都很完美。
  • 我可能会尝试重新启动我的电脑,如果可以解决它,我会打它,HARD。

标签: python


【解决方案1】:

我怀疑您的其他导入之一使用赋值语句重新定义了snipplets。或者您的其他模块之一更改了sys.path


编辑

“所以流程是这样的:将snipplets包添加到路径导入......”

没有。

不要修改sys.path——那样就会有问题。修改site.path 会导致路径上存在或不存在什么以及它们的顺序不明确。

最简单、最可靠、最明显、最可控的做法如下。选择一个。

  • 定义PYTHONPATH(一次,在您的程序外部)。一个简单的环境变量,几乎与站点包上的安装相同。

  • 在 site-packages 中安装您的包。

【讨论】:

  • 所以流程是这样的:将snipplets包添加到路径导入snipplets模块我尝试将选项导入高于其他所有内容,但没有改变。
  • 我计划在分发时将它添加到站点包中,但它仍在开发中。为什么修改 sys.path 会不好?
【解决方案2】:

您的master branch 没有options.py。会不会是你的 dev 和 master 分支冲突了?

if this is your actual code 那么你在第 21 行有 option 变量。

【讨论】:

  • 不,我目前只是在使用dev分支,master还没有更新。
  • 不错,命名很糟糕,但这不是问题。
  • 我已经尝试了您的代码并且导入没有问题。我仍然坚信这是两个分支的冲突。
  • 你是从 dev 分支运行的吗?我在我的机器上尝试了一个新版本,仍然有同样的问题。也许它只在我的机器上。
【解决方案3】:

以下是否有效?

import snipplets.options.Options

如果是这样,您的其他 snipplets 文件之一可能设置了一个名为 options 的全局变量。

【讨论】:

    【解决方案4】:

    你在窗户上吗?您可能想尝试在__init__.py 文件中定义__all__ 列表,如here 所示。除非您要导入 *,否则它不应该有所作为,但我已经看到模块不会导入,除非它们在那里定义。

    其次,您可以尝试设置virtualenv。使用大量站点范围的 python 包可能会导致这些事情。

    最后,确保选项的权限设置正确。我花了几个小时试图弄清楚这些事情,却发现这是我没有权限导入它的问题。

    【讨论】:

    • 我在linux上,所以你的第一点不适用。我来看看virtualenv
    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多