我有一个如下所示的Python库(包含包):
|-- python_lib/
|-- plotting.py
|-- verification.py
|-- io.py
|
|-- ensemble/
| -- plotting.py
| -- verification.py
但是,我遇到了模棱两可的模块导入问题。在ensemble.plotting.py
中,我想从顶层导入verification.py
模块(python_lib
):
但是,我得到一个导入错误,因为它试图从Ensement目录而不是库的顶层导入verification.py
模块。在
我认为“abslute imports”功能可以解决这个问题:
from ..verification import obs
但我得到一个错误:
ValueError: Attempted relative import beyond toplevel package
如何将python_lib/verification.py
作为从python_lib/ensemble/*.py
的导入而不尝试导入本地包版本?在
我使用的是python2.7版本。在
所有目录都应该包含文件
__init__.py
,否则它们将不会被识别为包。您的目录
python_lib
必须是已知路径。您在一篇评论中说您的PYTHONPATH
包含一个python_lib
的路径,所以这看起来不错。如果您以},并且您必须手动告诉Python您的脚本属于该包。
python_lib/ensemble/verification.py
作为主入口点,那么目录python_lib/ensemble
会隐藏您的目录{像这样:
完成后,这将起作用:
^{pr2}$创建包和模块时必须遵循一些规则。在
__init__.py
文件。每个python包都应该有这个文件很好的文档是可用的Module-search-path
通常在构建项目时,通常会创建一个lib包并根据不同的类别添加子目录,然后将主目录添加到PYTHONPATH变量中。这使得该模块可用于其他程序。在
这是一个老套的解决方案,可以工作,但通常是不鼓励的。在
当必须忽略冲突时,可以就地修改python路径。像这样:
我刚刚测试了这个模式,它似乎可以工作(python3.6.0)
相关问题 更多 >
编程相关推荐