我正在尝试将 TravisCI 集成到我的工作流程中,并意识到由于我的旧目录结构(没有独立的、virtualenv
-able git repos),我有一些依赖关系。
当我尝试在本地运行 nosetests
时,它运行测试很好;当 TravisCI 尝试运行它们时,它会失败,并出现 import
错误。具体来说,我有,作为我的测试脚本中的一行:
from myproject import something
我的目录结构在我的 git 仓库中 myproject
是这样的:
.travis.yml
requirements.txt
something.py
tests/
test_something.py
- 我曾尝试让它在本地失败(因为那时我可能会理解 TravisCI 问题),但无法完成。
- 我试过使用常规 python 运行,并使用将
nose
添加到其requirements.txt
的 virtualenv,并且测试始终在本地通过。
我觉得我仍然不了解绝对导入与相对导入,我无法判断这是在这里发挥作用,还是我只是在我的项目中做一些明显而愚蠢的事情。
期望的结果:找出 TravisCI 失败的原因,并相应地修复我的存储库,这样我就可以在本地和 TravisCI 上提交并正确构建东西。如果这需要更剧烈的改变,比如“你应该有一个对环境做废话的 setup.py
”或类似的 - 请告诉我。我是 Python 这方面的新手,发现当前文档非常不清楚。
仅供引用,我找到了 this question并添加 --exe
没有帮助,或者似乎是同一个问题。
最佳答案
我看到没有答案,我遇到了同样的问题,所以我在这里发帖希望能帮助别人:
解决方案一
我的快速修复是在 .travis.yml
中添加此行 export PYTHONPATH=$PYTHONPATH:$(pwd)
:
before_install:
- "pip install -U pip"
- "export PYTHONPATH=$PYTHONPATH:$(pwd)"
解决方案2
有一个 setup.py
应该是默认选项,因为它是最优雅的,配置如下:
from setuptools import setup, find_packages
setup(name='MyPythonProject',
version='0.0.1',
description='What it does',
author='',
author_email='',
url='',
packages=find_packages(),
)
然后在.travis.yml
中加入这一行
before_install:
- "pip install -U pip"
- "python setup.py install"
解决方案 3:
更改项目的布局,使测试文件夹位于应用程序一(具有核心 python 代码的那个)下,例如:
.travis.yml
requirements.txt
app
|_ tests
| |_ test_application.py
|_ application.py
并在 travis 中运行测试,覆盖率和 nosetest 如下:
script:
- "nosetests --with-coverage --cover-package app"
关于Python 导入在 travisCI 上失败但在本地失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35972415/