【发布时间】:2017-03-04 15:25:51
【问题描述】:
这些是我的模块的目录:
mymodule
|-__init__.py
|-file1.py
|-file2.py
|-test
|-__init__.py
|-test_file1.py
|-test_file2.py
test_file1.py 包含此命令:from .. import file1。
为了运行测试,我做了这个(在命令行上):python3 -m unittest test.test_file1。 (当我为整个 test 目录运行该命令时,它只是告诉我“一切都很好”,但没有找到我的测试。)
答案(当然也在命令行中)是(没有大部分堆栈跟踪):
File "/media/me/my_usb/backup me/myfolder/django projects/django-mymodule/mymodule/test/test_file1.py", line 1, in <module>
from .. import file1
ValueError: attempted relative import beyond top-level package
如何解决这个问题?在多个文件中进行测试的最佳做法是什么?
编辑: 我按照建议尝试了一些事情,这就是我所做的:
-
我改变了测试方向(如Hitchhikers guide to python中所建议的那样。这就是现在的样子:
modulewrapper |-mymodule (with the 2 files in it) |-... (docs, readME and this stuff) |-tests |-test_file1.py |-test_file2.py -
我在插入这样的方向后导入了
mymodule(我在每个测试文件的开头添加了这段代码):import sys sys.path.insert(0, '../mymodule') import file1
我照常开始测试:python3 -m unittest test_file1 从测试目录。
现在发生的事情是这样的:(首先是堆栈跟踪的相关部分,然后是我的猜测):
File "/media/me/my usb/backup me/my folder/django projects/django-mymodule/tests/test_file1.py", line 4, in <module>
import file1
File "../mymodule/file1.py", line 4, in <module>
from .file2 import MyClass1, MyClass2
SystemError: Parent module '' not loaded, cannot perform relative import
如何处理这个新问题? (还是和以前一样?更改工作代码以运行测试似乎几乎不是一种最佳实践。)
Edit2: 现在,我将from .file2 import someclass 替换为from file2 import someclass。这会产生任何负面影响吗?
【问题讨论】:
-
test是您的顶级包。对于相对进口,您不能超出此范围。运行mymodule.test.test_file1或将mymodule添加到您的Python 路径。
标签: python python-3.x python-import git-submodules