我知道不建议使用相对导入,例如引自PEP8:
非常不鼓励进行包裹内进口的相对进口。 始终对所有导入使用绝对包路径。即便如此 PEP 328在Python 2.5中完全实现,其显式风格 积极劝阻相对进口;绝对进口更多 便携式,通常更具可读性。
如果我正在开发一个包(有几个模块)怎么办?在开发过程中,绝对导入无法安装/部署软件包。这是否意味着我必须定期安装/部署当前的WIP模块以进行测试?
以下是Cld提供的示例。给定一个Python项目/包:
myproject/
package1/
__init__.py
somemodule.py
package2/
__init__.py
somemodule.py
somescript.py
main.py
在main.py
中,绝对导入效果非常好:
import package1
import package2.somescript
import package2.somemodule
但是,对于模块,例如package2中的somescript.py
,以下绝对导入:
import package2.somemodule
import package1
会引发ImportError:
Traceback (most recent call last):
File "package2/somescript.py", line 1, in <module>
import package2.somemodule
ImportError: No module named package2.somemodule
答案 0 :(得分:2)
您在哪里主要&#39;文件是。
如果你有:
myproject/
package1/
__init__.py
somemodule.py
package2/
__init__.py
somemodule.py
somescript.py
main.py
somescript.py:
import package2.somemodule
import package1
main.py
import package1
import package2.somescript
import package2.somemodule
如果您执行: python package2 / somescript.py ,则会收到错误
Traceback (most recent call last):
File "package2/somescript.py", line 1, in <module>
import package2.somemodule
ImportError: No module named package2.somemodule
但是如果你执行 python main.py ,你就没有问题。
答案 1 :(得分:1)
一种常见的做法是 pip install -e /path_to_your_pkg/
,它会在 Python 站点包目录中创建包的符号链接(而不是像在标准安装中那样复制它),这样做将启用:
一个已知问题是,如果您遵循 PEP 517 并将 setup.py
替换为 setup.cfg
和 pyproject.toml
,则 pip install -e
不起作用。您需要如下转储 setup.py
来解决此兼容性问题(2021 年 1 月仍然存在问题):
import setuptools
setuptools.setup()