Python 错误“ImportError:未命名模块”

新手上路,请多包涵

Python 安装在本地目录中。

我的目录树如下所示:

 (local directory)/site-packages/toolkit/interface.py

我的代码在这里:

 (local directory)/site-packages/toolkit/examples/mountain.py

为了运行这个例子,我写了 python mountain.py ,在我的代码中:

 from toolkit.interface import interface

我得到了错误:

 Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

我已经检查 sys.path 并且我有目录 /site-packages 。另外,我在工具包文件夹中有文件 __init__.py.bin 向 Python 表明这是一个包。我在示例目录中还有一个 __init__.py.bin

我不知道为什么 Python 在 sys.path 中找不到文件。有任何想法吗?会不会是权限问题?我需要一些执行权限吗?

原文由 Eduardo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 697
2 个回答

根据您对 orip 帖子的评论,我想这就是发生的事情:

  1. 您在 Windows 上编辑了 __init__.py
  2. Windows 编辑器添加了一些非打印的内容,可能是回车(Windows 中的行尾是 CR/LF;在 unix 中只有 LF),或者可能是 CTRL-Z(Windows 文件结尾)。
  3. 您使用 WinSCP 将文件复制到您的 unix 机器上。
  4. WinSCP 想:“这有一些不是基本文本的东西;我会放一个 .bin 扩展名来表示二进制数据。”
  5. 缺少的 __init__.py (现在称为 __init__.py.bin )意味着 python 不将工具包理解为一个包。
  6. 您在适当的目录中创建 __init__.py 并且一切正常…?

原文由 John Fouhy 发布,翻译遵循 CC BY-SA 2.5 许可协议

当我在 LPTHW 中做这个练习时,我遇到了非常相似的事情;我永远无法让 Python 识别出我在调用的目录中有文件。但我最终能够让它发挥作用。我所做的和我推荐的是尝试这个:

(注意:从你最初的帖子来看,我假设你使用的是基于 *NIX 的机器并从命令行运行,所以这个建议是为此量身定做的。因为我运行的是 Ubuntu,所以我就是这样做的)

  1. 将目录 (cd) 更改为文件所在目录 上方 的目录。在这种情况下,您尝试运行 mountain.py 文件,并尝试调用 toolkit.interface.py 模块,它们位于单独的目录中。在这种情况下,您将转到包含这两个文件路径的目录(或者换句话说,这两个文件的路径共享的最近目录)。在这种情况下是 toolkit 目录。

  2. 当您位于 toolkit 目录中时,在命令行中输入以下代码行:

export PYTHONPATH=.

这会将您的 PYTHONPATH 设置为“.”,这基本上意味着您的 PYTHONPATH 现在将在您当前所在的目录中查找任何被调用的文件(更重要的是,在您所在目录 的子目录分支 中。所以它不仅会查看您的当前目录,还会查看您当前目录中 所有目录)。

  1. 在上述步骤中设置 PYTHONPATH 后,从当前目录( toolkit 目录)运行模块。 Python 现在应该找到并加载您指定的模块。

原文由 Specterace 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题