我一直在努力使用Python包导入。我搜索了网络,但未能找到合适的答案。
我有以下目录结构:
.
./__init__.py
./packages/
./packages/__init__.py
./packages/package
./packages/package/__init__.py
./packages/package/module.py
module.py源只包含一行:
import package
如果我转到“packages”目录,我可以导入包:
>>> 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变量的情况下解决此问题。
答案 0 :(得分:2)
为了使module.py中的import package
成功,必须可以发现python包package
。这意味着它必须位于PYTHONPATH
。默认情况下,此路径包含site-packages
(使用easy_install
或pip
放置python包的目录)。此外,PYTHONPATH还包括当前的工作目录。
如果您在.
,那么.
将被放置在您的PYTHONPATH的开头。这个目录不包含一个名为package
的python包,因此import package
失败。
您可以在启动python解释程序之前移至./packages
,也可以安装程序包。要做后者,你需要一个setup.py
答案 1 :(得分:1)
从中运行程序时。所有导入必须相对于该目录。对于你的module.py文件,这意味着你必须做
import packages.package
而不是
import package
这是因为python会使用。作为您在程序中执行的所有导入的基础。如果没有太大的魔力,就无法从父目录导入内容,因此您必须进行绝对导入,如上所示。