我想要我的tests folder separate到我的申请代码.我的项目 struct 是这样的

myproject/
  myproject/
    我的项目.py
    moduleone.py
  tests/
    myproject_测试.py

我的项目.py

from moduleone import ModuleOne

class MyProject(object)
....

myproject_测试.py

from myproject.myproject import MyProject
import pytest

...

因为我使用了命令,所以我使用了myproject.myproject

python -m pytest

从项目根目录./myproject/

然而,这些模块中的导入会失败,并导致

E ModuleNotFoundError:没有名为'moduleone'的模块

我正在运行Python3.7,从3.3开始,就不再需要__init__个空文件,这意味着我的项目变成了implicit namespace package

然而,我曾try 在myproject/myproject/中添加一个__init__.py文件,也try 在myproject/中添加一个conftest.py文件,但两者都不起作用

我有read answers条对mess with the paths条的 comments ,然后在其他问题上的 comments 是not to条.

正确的方法是什么?我错过了什么?

EDIT;

可能与此相关,我使用requirements.txt安装了使用pip的pytest.这有关系吗?如果是这样,在这种情况下,安装pytest的正确方法是什么?

EDIT 2:

sys.path中的路径之一是/usr/src/app/,这是一个docker卷,排成/my/local/path/myproject/行.

音量应该改为/my/local/path/myproject/myproject/吗?

推荐答案

Solution: use the PYTHONPATH env. var

PYTHONPATH=. pytest

正如@J_H所提到的,您需要显式地添加项目的根目录,因为pytest只会添加到sys.path个测试文件所在的目录中(这就是@Mak2006的答案有效的原因)


良好实践:使用Makefile或其他自动化工具

如果不想一直键入长命令,一个选项是在项目的根目录中创建一个Makefile,例如:

.PHONY: test
test:
    PYTHONPATH=. pytest

这让你可以简单地运行:

make test

另一种常见的替代方法是使用一些标准测试工具,例如tox.

Python-3.x相关问答推荐

如何创建多个日志(log)文件

如何在M x N数组的行中找到所有值的组合

如何使用TensorFlow Keras子类化来构建和训练模型

以某种方式分割字符串

「Python Pandas」多级索引列和行匹配,如果列和行名称相似,则排除这些单元格中的值添加

三重奏:为什么频道被记录为使用async with,而不是with?

包含值超出范围的 ID 的新 DataFrame 列?

python 3:如何判断一个对象是否是一个函数?

Python - 如何从同一台客户端机器运行多个Flask应用程序

将字符串表示与使用整数值的枚举相关联?

创建日志(log)文件

Anaconda 中的依赖项和包冲突?

TypeError:列表索引必须是整数或切片,而不是列表

如何将 Matplotlib 图形转换为 PIL Image 对象(不保存图像)

带百分号的 Python 字符串格式

python setup.py egg_info mysqlclient

TypeError:只有整数标量数组可以转换为标量索引

用 Anaconda 安装了一个包,无法在 Python 中导入

新项目:Python 2 还是 Python 3?

python asyncio add_done_callback 与 async def