python指南中的指示将这个项目添加到sys路径中以便在测试中使用时,会出现此问题,除非我误解了这些指示,否则该指示似乎不起作用
我有一个像这样的python项目的目录结构
sample/a.py
sample/b.py
sample/c.py
sample/__init__.py
test/context.py
test/test_something.py
test/__init__.py
docs
Run Code Online (Sandbox Code Playgroud)
根据python指南,我应该创建一个test / context.py文件并添加它
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
import sample
Run Code Online (Sandbox Code Playgroud)
然后,在我的test/test_something.py文件中说我可以做到这一点
from .context import sample
Run Code Online (Sandbox Code Playgroud)
该指南说:“这将始终按预期进行”。
但是,当我cd测试并运行时
python -m unittest test_something
Run Code Online (Sandbox Code Playgroud)
我得到一个错误
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)
错误消息专门针对此: from .context import sample
问题:如何将示例程序包正确添加到sys路径?
回答时,您还可以澄清该解决方案是否可以处理示例包中的绝对导入。例如,我的sample.a导入sample.b等。当我以不同的方式构造测试时,我进行了绝对导入sample.a,但是由于它的相对导入为from .b import Boo,因此产生了类似的错误
更新资料
`File "/usr/local/lib/python2.7/runpy.py", line 162 in _run_module_as_main "__main__", fname, loader, pkg_name)
File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals
File …Run Code Online (Sandbox Code Playgroud) python ×1