【发布时间】:2019-07-20 13:21:58
【问题描述】:
我希望我的tests folder separate 用于我的应用程序代码。我的项目结构是这样的
myproject/
myproject/
myproject.py
moduleone.py
tests/
myproject_test.py
我的项目.py
from moduleone import ModuleOne
class MyProject(object)
....
myproject_test.py
from myproject.myproject import MyProject
import pytest
...
我使用myproject.myproject,因为我使用了命令
python -m pytest
从项目根目录./myproject/
但是,这些模块中的导入失败
E ModuleNotFoundError: 没有名为“moduleone”的模块
我正在运行 Python 3.7,并且已阅读自 3.3 以来,不再需要空的 __init__ 文件,这意味着我的项目变成了 implicit namespace package
但是,我尝试在 myproject/myproject/ 中添加 __init__.py 文件,也尝试在 myproject/ 中添加 conftest.py 文件,但都不起作用
我有 read answers 对 mess with the paths 说,然后在其他问题中投票给 cmets 说 not to。
什么是正确的方法,我错过了什么?
编辑;
可能相关,我使用了requirements.txt 来使用 pip 安装 pytest。这可能有关系吗?如果是这样,在这种情况下安装 pytest 的正确方法是什么?
编辑 2:
sys.path 中的路径之一是 /usr/src/app/,它是与 /my/local/path/myproject/ 对齐的 docker 卷。
音量是否应该改为/my/local/path/myproject/myproject/?
【问题讨论】:
-
老实说,这将是一场舆论战。您可以将测试文件夹移动到您的主结构中并从那里执行它,您可以按原样工作。不需要更改任何东西,因为导入路径是相关的。除此之外,您需要对测试文件中的路径进行猴子修补以包含目标目录,这不是一件坏事(意见)。只需知道您在做什么以及您在做什么。
-
Long cmets.. 您还可以(在命令行上)附加
PYTHONPATH以包含目标目录。这意味着您不必从任何脚本中操作sys.path,但您会在运行测试时获得更新的路径。PYTHONPATH=./myproject python -m pytest就像你一样。 -
您在项目结构中列出的目录中,哪些(如果有)在您的
PYTHONPATH? -
@JohnGordon 用新信息更新了问题
-
您是否尝试将空的 init.py 添加到 ./tests 目录而不是您的项目目录。这听起来可能很奇怪,但值得一试。
标签: python python-3.x docker pytest