Import 如何从父包和同级包导入python模块
这个(或类似的)问题以前被问过很多次,但在我的案例中没有一个解决方案是有效的。 我的项目结构如下:Import 如何从父包和同级包导入python模块,import,python-2.7,Import,Python 2.7,这个(或类似的)问题以前被问过很多次,但在我的案例中没有一个解决方案是有效的。 我的项目结构如下: | project_2 main.py __init__.py systems.py | config __init__.py options.py | database __init__.py database.py
| project_2
main.py
__init__.py
systems.py
| config
__init__.py
options.py
| database
__init__.py
database.py
entity.py
| tests
__init__.py
test_systems.py
test_options.py
test_database.py
test_entity.py
显然,我需要导入测试包下测试模块中的所有模块。我尝试了使用点语法的相对导入:
from ..systems import System
from ..config import options
from ..database.entity import Entity
返回ValueError:尝试在非包中进行相对导入。我已经尝试过使用包结构,其中所有内容(包括系统)都在自己的包中。它以相同的消息失败
真正让我困扰的是,这本应该是有效的,但事实并非如此。我真的希望避免将包附加到$PYTHONPATH,或者使用一些疯狂的方法,例如从文件路径加载带有imp的模块
我了解到部分问题可能是systems.py在主包中,但这并不能解释为什么其余的相对导入也不起作用
另外,我实际上是从PEP 328中重新创建了这个示例,只是为了测试它,但它不起作用 当一个python文件执行相对导入,但该文件未通过另一个模块中的导入(例如,从命令行)作为模块加载时,就会出现这种情况。鉴于这种结构:
.
├── main.py
└── test
├── __init__.py
├── a.py
└── b.py
main.py:
from test.a import A
print A
a、 py:
b、 py:
现在试试:
python main.py
结果是
b
和
python test/a.py
你会得到:
Traceback (most recent call last):
File "test/a.py", line 1, in <module>
from .b import B
ValueError: Attempted relative import in non-package
当python文件执行相对导入,但该文件未通过另一个模块中的导入(例如,从命令行)作为模块加载时,就会出现这种情况。鉴于这种结构:
.
├── main.py
└── test
├── __init__.py
├── a.py
└── b.py
main.py:
from test.a import A
print A
a、 py:
b、 py:
现在试试:
python main.py
结果是
b
和
python test/a.py
你会得到:
Traceback (most recent call last):
File "test/a.py", line 1, in <module>
from .b import B
ValueError: Attempted relative import in non-package
如果您只需将
添加到python路径,如果您从项目2
文件夹运行脚本,则相对路径(如配置选项
)将起作用。不幸的是,这需要在每台机器上更新PYTHONPATH
在Python 2.7.14上测试,如果您只需将
添加到Python路径,如果您从project_2
文件夹运行脚本,则相对路径(如config.options
将起作用。不幸的是,这需要在每台机器上更新PYTHONPATH
在Python 2.7.14上测试