我试图遵循PEP 328,其目录结构如下:
pkg/
__init__.py
components/
core.py
__init__.py
tests/
core_test.py
__init__.py
在core_test.py中,我有以下import语句
from ..components.core import GameLoopEvents
然而,当我运行时,我得到以下错误:
tests$ python core_test.py
Traceback (most recent call last):
File "core_test.py", line 3, in <module>
from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package
四处搜索,我发现“相对路径即使使用__init__.py也无法工作”和“从相对路径导入模块”,但它们都没有帮助。
这里有什么我遗漏的吗?
问题在于您的测试方法,
您尝试了python core_test.py
那么你会得到这个错误ValueError:尝试在非包中进行相对导入
原因:您正在从非包源测试您的包。
所以从包源测试模块。
如果这是您的项目结构,
pkg/
__init__.py
components/
core.py
__init__.py
tests/
core_test.py
__init__.py
cd软件包
python -m tests.core_test # dont use .py
或从外部pkg/
python -m pkg.tests.core_test
仅有一个的如果要从同一目录中的文件夹导入。每后退一步,再加一步。
hi/
hello.py
how.py
在how.py中
from .hi import hello
如果您想从hello.py导入how
from .. import how
问题在于您的测试方法,
您尝试了python core_test.py
那么你会得到这个错误ValueError:尝试在非包中进行相对导入
原因:您正在从非包源测试您的包。
所以从包源测试模块。
如果这是您的项目结构,
pkg/
__init__.py
components/
core.py
__init__.py
tests/
core_test.py
__init__.py
cd软件包
python -m tests.core_test # dont use .py
或从外部pkg/
python -m pkg.tests.core_test
仅有一个的如果要从同一目录中的文件夹导入。每后退一步,再加一步。
hi/
hello.py
how.py
在how.py中
from .hi import hello
如果您想从hello.py导入how
from .. import how