PyBuilder项目执行pyb -v报错No module named 'src'如何解决
问题原因
- PyBuilder运行单元测试时默认会将
src/main/python(生产代码根目录)、src/unittest/python(测试代码根目录)加入Python的模块搜索路径,你在测试代码中写的from src.main.python.amass import amass导入路径多了冗余前缀,运行时找不到src模块。 - IntelliJ运行测试时会自动将项目根目录、配置好的源码目录加入Python搜索路径,同时可能自动修正了导入路径映射,所以可以正常运行。
- 手动执行测试时报
No module named 'rest_tests'是因为你的测试文件名为my_tests.py,对应的模块名是my_tests不是rest_tests,属于模块名传错。 - 注意检查你项目中
__init__.py的拼写,你给出的结构里存在_init__.py、__init.py__这类拼写错误,会导致Python无法正常识别目录为Python包。
解决方案
- 修改测试文件导入语句
将my_tests.py中的导入代码替换为:
from amass import amass
PyBuilder运行时会自动搜索src/main/python下的包,不需要带src.main.python前缀。
- 补全build.py配置
在initialize函数中添加生产代码目录的显式配置,避免PyBuilder默认路径识别异常:
@init def initialize(project): # 原有配置保留,新增下面这行 project.set_property('dir_source_main_python', 'src/main/python') # 其他原有配置不变
- 修正手动执行测试的命令
在项目根目录执行以下命令,先配置Python搜索路径,再执行测试:
# 临时将源码目录和测试目录加入Python搜索路径 export PYTHONPATH=./src/main/python:./src/unittest/python # 注意模块名是my_tests不是rest_tests python -m unittest my_tests.MyTestCase.test_subdomains_finding_amass
- 修正所有__init__.py的拼写错误
把项目中所有拼写错误的包文件修正为标准的__init__.py,确保Python能正常识别包结构。
配置完成后重新执行pyb -v即可正常运行单元测试。
内容的提问来源于stack exchange,提问作者Hongli Bu
相关产品推荐
相关产品推荐

