修复'即使有__init__.py,也出现了非包中的相对导入尝试”错误的方法
P粉566048790
P粉566048790 2023-08-21 15:15:11
0
2
490
<p>我正在尝试遵循PEP 328,使用以下目录结构:</p> <pre class="brush:php;toolbar:false;">pkg/ __init__.py components/ core.py __init__.py tests/ core_test.py __init__.py</pre> <p>在<code>core_test.py</code>中,我有以下导入语句</p> <pre class="brush:php;toolbar:false;">from ..components.core import GameLoopEvents</pre> <p>然而,当我运行时,我得到以下错误:</p> <pre class="brush:php;toolbar:false;">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</pre> <p>我在搜索中找到了"relative path not working even with __init__.py"和"Import a module from a relative path",但它们没有帮助。</p> <p>这里有什么我遗漏的吗?</p>
P粉566048790
P粉566048790

全部回复(2)
P粉827121558

对于 Ignacio Vazquez-Abrams 的回答进行详细说明:

Python的导入机制是相对于当前文件的__name__。当直接执行一个文件时,它的名称不是通常的名称,而是使用"__main__"作为名称。因此,相对导入不起作用。

正如Ignacio建议的那样,你可以使用-m选项来执行它。如果你的包中有一部分是作为脚本运行的,你还可以使用__package__属性来告诉该文件在包层次结构中应该有什么名称。

详细信息请参见http://www.python.org/dev/peps/pep-0366/

P粉604507867

是的。你没有将它作为一个包使用。

python -m pkg.tests.core_test
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板