我正在尝试将TravisCI集成到我的工作流程中,并意识到我有一些依赖项,因为我的旧目录结构(没有自包含的,virtualenv
- 能够git repos)。
当我尝试在本地运行nosetests
时,它运行测试就好了;当TravisCI尝试运行它们时,它会失败,并出现import
错误。具体来说,我有,作为我的测试脚本中的一行:
from myproject import something
我的目录结构在我的git repo myproject
里面就像是:
.travis.yml
requirements.txt
something.py
tests/
test_something.py
nose
添加到requirements.txt
,测试总是在本地传递。我觉得我仍然没有理解绝对与相对的进口,我不知道这是否会在这里发挥作用,或者我只是在我的项目中做了一些明显和愚蠢的事情。
期望的结果:弄清楚为什么TravisCI会失败,并相应地修复我的回购,这样我就可以提交并在本地和TravisCI上正确构建。如果这需要更加激烈的变化,例如“你应该setup.py
对环境造成祸害”或类似的 - 请告诉我。我是Python的新方面的新手,并且发现当前的文档非常不清楚。
作为一个FYI,我发现this question并添加--exe
没有帮助,或者似乎是同一个问题。
答案 0 :(得分:6)
我看到没有答案,我遇到了同样的问题,所以我发帖在这里希望帮助某人:
我的快速解决方法是在PYTHONPATH=$PYTHONPATH:$(pwd)
中添加此行导出.travis.yml
:
before_install:
- "pip install -U pip"
- "export PYTHONPATH=$PYTHONPATH:$(pwd)"
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"
更改项目的布局,使应用程序下的测试文件夹(具有核心python代码的文件夹)如下:
.travis.yml
requirements.txt
app
|_ tests
| |_ test_application.py
|_ application.py
在travis中运行测试,覆盖率和鼻子测试如下:
script:
- "nosetests --with-coverage --cover-package app"