【发布时间】:2018-09-01 15:59:04
【问题描述】:
我看到很多关于导入模块错误的问题,但我无法解决 Gitlab CI 管道的问题。
我的项目结构:
├───config
├───docs
├───src
__init__.py
│ ├───dataset
__init__.py
│ ├───exceptions
│ ├───resources
│ └───utils
__init__.py
└───tests
__init__.py
└───resources
__init__.py
我想使用 pytest 运行测试。
我调用此命令python -m pytest -p no:cacheprovider 或使用 unittest
'python -m unittest discover -v' 从根目录并尝试从测试目录调用。在这两种情况下,我从数据集模块导入类都有问题。有趣的是,我有两个测试文件。
第一个文件导入:
import os import unittest
from src.utils.FileManager import FileManager
第二次进口:
from src.dataset.DatasetHelper import DatasetHelper
第一个文件通过但第二个文件失败并出现错误:
从数据集导入 DatasetHelper ModuleNotFoundError: No module 命名为“数据集”
所以问题是其他模块(如来自 src 的 utils)被正确导入,只有数据集有问题。我在这几天苦苦挣扎,我完全没有想法。我还尝试从 src.dataset 更改而不是从数据集更改。它没有用。我可以通过单击鼠标右键在 PyCharm 中运行测试,只运行测试,但不能在 CI 环境中运行。
我尝试了什么:
- 向 $PYTHONPATH 添加模块,例如
sys.path.insert(0, "/builds/USER/PROJECT/src/dataset") sys.path.insert(0, "/builds/USER/PROJECT/src") sys.path.insert(0, "/builds//USER/PROJECT/tests")
PYTHONPATH 添加前的内容为:
Current $PYTHONPATH: ['/builds/USER/PROJECT/config', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']
列表中的第一个模块是 config,因为我从该目录运行脚本以将上述模块添加到路径。没用
- 从根目录运行测试命令并添加前缀
src到测试目录中的导入。没有帮助
【问题讨论】:
-
查看此问题,了解
No module named问题的不同解决方案:PATH issue with pytest 'ImportError: No module named YadaYadaYada'。你已经用不必要的__init__.py文件破坏了你的项目,也不需要sys.path操作。 -
正确的做法是在您的 CI 中使用
setup.py并使用python setup.py develop。这将确保您的库已安装。
标签: python python-3.x pytest gitlab-ci