Python 包导入问题



我一直在为Python包导入而苦苦挣扎。我在网上搜索,但找不到合适的答案。

我有以下目录结构:

.
./__init__.py
./packages/
./packages/__init__.py
./packages/package
./packages/package/__init__.py
./packages/package/module.py

module.py 源仅包含一行:

import package

如果我转到"包"目录,我可以导入包:

>>> import python
>>>

如果我转到"."目录,我想按如下方式导入模块(或包):

>>> import packages.package.module as module

但是我收到错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "vendor/package/module.py", line 1, in <module>
    import package
ImportError: No module named package

我需要在__init__.py文件中放入什么,以便我可以执行上述导入?更多,我需要在 ./__init__.py 文件中放入什么,以便我能够从 ../目录?

如果可能的话,我想在不更改 sys.path 变量的情况下解决这个问题。

为了使 module.py 中的import package成功,python包package必须是可发现的。这意味着它必须在 PYTHONPATH .默认情况下,此路径包括 site-packages(将 python 包与 easy_installpip 一起放置的目录)。此外,PYTHONPATH 还包括当前工作目录。

如果你在 . 中,那么.被放置在 PYTHONPATH 的开头。此目录不包含名为 package 的 python 包,因此import package失败。

您可以在启动 python 解释器之前移动到 ./packages,也可以安装您的软件包。要执行后者,您需要一个 setup.py

从 运行程序时。 所有导入都必须相对于该目录。对于您的 module.py 文件,这意味着您必须这样做

import packages.package

而不是

import package

这是因为 python 将使用 . 作为您在程序中执行的所有导入的基础。如果没有很多魔法,就不可能从父目录中导入某些内容,因此您必须执行绝对导入,如上所示。

相关内容

  • 没有找到相关文章

最新更新