Python 导入在 travisCI 上失败但在本地失败

标签 python travis-ci nose

我正在尝试将 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/

相关文章:

Python pickle : what can cause stack index out of range error?

python - 在 python 2.7 中打印阿拉伯语/波斯语字母

python - 如何清空列表?

java - 在不同语言语法之间转换正则表达式的工具?

docker - 如何自动化 Multi-Arch-Docker 镜像构建

c++ - QT QOverload 未在 Travis CI 的此范围内声明

Nosetests 不读取配置文件

r - 我怎样才能避免 travis-ci "SSL errors"?

python - 在 nose 或 pytest 中收集以编程方式生成的测试套件的好方法

Python:如何在单元( Nose )测试期间忽略装饰器?