gpt4 book ai didi

python - 使用 pytest 用于 Python 项目的正确文件夹结构是什么?

转载 作者:行者123 更新时间:2023-12-04 16:44:36 27 4
gpt4 key购买 nike

我尝试使用文件夹结构来组织我的 Python 项目。当我需要进行测试时,我会使用以下内容。

.
|-- src
| |-- b.py
| `-- main.py
`-- tests
`-- test_main.py
这种方法只有一个大问题。如果 main.py,Pytest 将不会运行正在进口 b.py .
到目前为止,我已经尝试放置空 __init__.py src 中的文件和 tests文件夹,无论是独立的还是一起的,但其中任何一个似乎都有效。
在我看来,这是一个非常标准的项目,但我一直无法在网上找到解决方案。我应该使用不同的文件夹结构吗?有什么推荐的方法可以在这种项目中使用 pytest 吗?

这是文件的内容:
# b.py
def triplicate(x):
return x * 3
# main.py
from b import triplicate

def duplicate(x):
return x * 2
# test_main.py
from src.main import duplicate


def test_duplicate():
assert duplicate(2) == 4
这是我在运行 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 ===============================================================================================

最佳答案

Python 使用“环境变量”PYTHONPATH寻找要从中导入代码的来源。默认情况下,你执行 python 程序的目录是自动包含的,但你在测试时希望包含这样的内容:

PYTHONPATH=$PYTHONPATH,../src python test_main.py
这是如果您从源目录执行测试。 IntelliJ (PyCharm) 之类的工具将允许您将其添加为测试调用中的值。或者,您可以使用 export PYTHONPATH=... . (请注意,这是针对 *nix 环境的,您在 Windows 上的使用情况可能会有所不同。)
结果是 PYTHONPATH中的每个目录将被加载,Python 将尝试将其用作您尝试导入的模块的“根”。您的基本目录结构是最惯用的。
  • this answer有关配置的更多信息 PYTHONPATH正确。
  • this doc更多关于如何PYTHONPATH被修改并“在引擎盖下”使用。
  • this answer用于包含 src 的选项运行时的目录pytest测试。
  • this blog post关于使用 autoenv (一个 Python 库)来启用 .env文件来为你管理这个(至少在 virtualenv 设置中 - 通常是个好主意)。
  • setup.py包含许多模块也是惯用的,并且可以为您处理的情况提供更方便的路径。
  • 关于python - 使用 pytest 用于 Python 项目的正确文件夹结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68476886/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com