我已经检查了尽可能多的页面,并尝试了我找到的所有内容,但没有一个成功。我还检查了有关导入的 PEP 页面并尝试了每个示例,但没有一个起作用。
我有一个包含单元测试的测试文件夹,我需要导入我想要测试的模块。这些模块位于 src 文件夹旁边的名为“src”的文件夹中。
文件夹/文件看起来像这样:
Project /
src /
stringbuilder.py
__init__.py
tests /
stringbuilder_test.py
__init__.py
main.py
__init__.py
我已尽我所能:添加__init__.py
到每个文件夹,使其成为一个模块,包括项目的主文件夹。
import src.module_to_test
from ..src.module_to_test import function_to_test
from ..src import module_to_test
我测试了所有其他组合,但都失败了。我开始认为我的设置或理解一定有问题——我认为这应该很简单。
如果我犯了任何明显的错误,请告诉我。
from tests import stringbuilder
错误信息:
$ ./stringbuilder_test.py
Traceback (most recent call last):
File "./stringbuilder_test.py", line 14, in <module>
from tests import stringbuilder
ImportError: No module named tests
同样的错误发生在(但测试= src):
from src import stringbuilder
如果从包内部执行脚本,则需要采用各种技巧才能使导入正常工作。其中最常见的可能是操纵sys.path
:
import sys, os
sys.path.insert(0,
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src import stringbuilder
del sys.path[0]
使用普通的导入语句无法实现此目的。
通常更好的解决方案是完全避免在包内运行脚本。相反,将所有脚本outside包含目录中的包。鉴于当前运行脚本的目录会自动添加到sys.path
,这将保证无论脚本从哪里执行,包始终可以直接导入。
所以目录结构可能看起来像这样:
project /
package /
__init__.py
src /
__init__.py
stringbuilder.py
tests /
__init__.py
stringbuilder_test.py
main.py
test.py
The test.py
然后脚本可以像这样导入它的测试:
from package.tests import stringbuilder_test
And stringbuilder_test.py
可以导入src
像这样的模块:
from package.src import stringbuilder
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)