我的项目结构似乎是正确的。
setup.py
mypackage/
__init__.py
__main__.py
main.py
script1.py #import script2
script2.py
tests/
test_script2.py
使用script1.py
导入文件。script2.py
'import script2'
我可以使用以下命令运行代码而不会出现错误:
python mypackage
python mypackage/main.py
不幸的是,当我尝试使用执行测试pytest
或python -m pytest
出现错误时,没有命名模块script2
(以下完整消息)。我以可编辑模式安装了程序包pip install -e .
我可以通过使用包名称为的导入来解决此问题,import mypackage.script2 as script2
但随后,所有克隆我的存储库的人都必须在运行pip之前安装包。否则将mypackage
找不到错误。
我希望能够在不安装pip的情况下运行此代码,并可以选择单独运行每个脚本文件。
您能建议我替代解决方案吗?
来自pytest的错误消息:
(venv) lecho:~/pytest-imports-demo$ pytest
================================================= test session starts ==================================================
platform linux -- Python 3.6.7, pytest-4.4.1, py-1.8.0, pluggy-0.9.0
rootdir: /home/lecho/pytest-imports-demo
collected 0 items / 1 errors
======================================================== ERRORS ========================================================
________________________________________ ERROR collecting tests/test_script2.py ________________________________________
ImportError while importing test module '/home/lecho/pytest-imports-demo/tests/test_script2.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_script2.py:2: in <module>
import mypackage.script1 as script1
mypackage/script1.py:1: in <module>
import script2
E ModuleNotFoundError: No module named 'script2'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=============================================== 1 error in 0.05 seconds ================================================
在文件pytest-imports-demo/mypackage/script1.py
导入script2
包中,应执行以下任一操作:
from mypackage import script2
要么
from . import script2
还需要__init__.py
向pytest-imports-demo/tests/
目录添加空文件。
至于“我希望能够在不进行pip安装的情况下运行此代码,并可以选择分别运行每个脚本文件。” 通过使脚本可执行并提供脚本的完整路径或将这些脚本的目录路径放入$ PATH环境变量中,可以完成此操作。另外,也可以通过pip安装来完成(但setup.py
文件中需要其他设置)。
但是可以运行测试而无需pip install
打包。
我打开了PR:https : //github.com/lecho/pytest-imports-demo/pull/1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句