我试着用文件夹结构来组织我的Python项目,当我需要做测试时,我会使用类似下面的方法。
.
|-- src
| |-- b.py
| `-- main.py
`-- tests
`-- test_main.py
这种方法只有一个大问题,如果main.py
正在导入b.py
,Pytest将无法运行。
到目前为止,我已经尝试过将空的__init__.py
文件放在src
和tests
文件夹中,既可以单独放置,也可以放在一起,但似乎任何一个都能正常工作。
在我看来,这是一个相当标准的项目,但是我还没有能够在网上找到一个解决方案。我应该使用不同的文件夹结构吗?有没有推荐的方法来使用pytest处理这类项目?
以下是文件的内容:
x一个一个一个一个x一个一个二个一个x一个一个三个一个
这是我在运行pytest时得到的错误:
==================================================================================================== ERRORS ====================================================================================================
_____________________________________________________________________________________ ERROR collecting tests/test_main.py ______________________________________________________________________________________
ImportError while importing test module 'C:\Users\edwar\test_pytest\tests\test_main.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
c:\python39\lib\importlib\__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
tests\test_main.py:1: in <module>
from src.main import duplicate
src\main.py:1: in <module>
from b import triplicate
E ModuleNotFoundError: No module named 'b'
=========================================================================================== short test summary info ============================================================================================
ERROR tests/test_main.py
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=============================================================================================== 1 error in 0.15s ===============================================================================================
3条答案
按热度按时间rxztt3cl1#
Python使用“环境变量”
PYTHONPATH
来寻找要导入代码的源代码,默认情况下,会自动包含执行Python程序的目录,但在测试时,您需要包含类似下面的内容:这是在从源目录执行测试的情况下,IntelliJ(PyCharm)等工具可以让你在测试调用中将其作为一个值添加,或者你可以使用
export PYTHONPATH=...
(注意这是针对 *nix环境的,你在windows上的应用可能会有所不同)。结果是
PYTHONPATH
中的每个目录都会被加载,Python会尝试将其作为您试图导入的模块的“根”目录,您的基本目录结构是最惯用的。PYTHONPATH
的详细信息,请参见this answer。PYTHONPATH
的更多信息,请参见此文档。pytest
测试时包含src
目录的选项,请参见this answer。autoenv
(Python库)来启用.env
文件的使用,以便为您管理这一点(至少在virtualenv
设置中-通常是个好主意)。setup.py
也习惯于包含许多模块,并且可以为您正在处理的情况提供更方便的路径。vc6uscn92#
编辑:发帖后,I realized that someone has already posted this solution in a different question,很多年前。
如果您只想从根目录运行所有测试,而不必担心PYTHONPATH,那么最简单的解决方案是通过在终端中键入以下命令来调用测试:
虽然在OP示例中只运行
pytest
会失败,但是python -m pytest
可以正常工作,正如文档所示...通过python调用也会将当前目录添加到sys. path。
希望能有所帮助!
daolsyd03#
您可以将源文件放在根目录中,并按如下方式调整导入路径:
主文件.py
B.py
测试主文件.py
然后从根目录
stackoverflow
运行pytest .
:或者,如果您希望保留
src
文件夹,则导入如下: