gpt4 book ai didi

python - 使用 pytest 时在同一包中导入的 ModuleNotFoundError

转载 作者:太空狗 更新时间:2023-10-30 00:15:43 29 4
gpt4 key购买 nike

我的项目结构似乎是正确的。

setup.py
mypackage/
__init__.py
__main__.py
main.py
script1.py #import script2
script2.py
tests/
test_script2.py

文件 script1.py 使用 'import script2' 导入 script2.py

我可以使用以下命令无误地运行代码:

python mypackage
python mypackage/main.py

不幸的是,当我尝试使用 pytestpython -m pytest 执行测试时,我收到错误消息,指出没有名为 script2 的模块(完整下面留言)。我以可编辑模式安装了我的包 pip install -e .

我可以通过使用带有包名称的导入来解决这个问题,例如 import mypackage.script2 as script2 但是,每个要克隆我的存储库的人都必须在运行它之前使用 pip 安装包。否则会出现找不到 mypackage 的错误。

我希望能够在没有 pip install 的情况下运行这段代码,并且可以选择单独运行每个脚本文件。
你能给我建议替代解决方案吗?

存储库:pytest-imports-demo

来自 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 install 完成(但需要在 setup.py 文件中进行额外设置)。

但是无需pip install您的包就可以运行测试。

我打开了PR:https://github.com/lecho/pytest-imports-demo/pull/1

关于python - 使用 pytest 时在同一包中导入的 ModuleNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809722/

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