如何将我的模块添加到travis-ci pythonpath

时间:2014-09-10 01:48:26

标签: python python-import travis-ci

我正在为我的项目设置Travis-CI,奇怪的是,我无法导入我的项目:

$ python tests/tests.py
Traceback (most recent call last):
  File "tests/tests.py", line 11, in <module>
    from my_module.lib.importer import build_module_list
ImportError: No module named my_module.lib.importer

在制作中,我只是创建一个符号链接:

sudo ln -s /usr/local/my_module /usr/lib/python2.7/dist-packages/my_module

但我不知道 - 或者想知道 - 真的 - Travis-CI的文件夹结构。

这似乎是一个已解决的问题,但我是Travis-CI的新手。什么是使这项工作最好的方法,所以我的代码被添加为可导入的模块?

5 个答案:

答案 0 :(得分:16)

  

使这项工作的最佳方法是什么,所以我的代码被添加为可导入的模块?

答案是明确地使用distutils(绝对不是ln)。

  

在制作中,我只是创建一个符号链接......

B-b-但为什么? Right Way™的复杂性非常低!它甚至适合几行:

来自The Fine Manual - 只需创建setup.py,就像这样:

from distutils.core import setup

setup(name='Distutils',
      version='1.0',
      description='Python Distribution Utilities',
      author='Greg Ward',
      author_email='gward@python.net',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['distutils', 'distutils.command'],
     )

现在你可以做一些奇妙的事情,比如python setup.py installpython setup.py bdist_rpmpip install . - 而不仅仅是在Travis环境中,而是为了你的项目。

答案 1 :(得分:8)

要快速,您可以通过在before_script阶段添加以下内容来更优雅地解决问题:

export PYTHONPATH=$PYTHONPATH:$(pwd)

更好的方法(但需要更多的努力)是Brian Cain所建议的,即写一个setup.py文件并将pip install .添加到install阶段。

或者,如果您正在使用makefile,则可以使用以下命令执行此操作。

test:
    $(shell export PYTHONPATH=$PYTHONPATH:$(pwd))
    python setup.py test

答案 2 :(得分:1)

这当然不是最佳的,但它确实有效。在我的.travis.yml文件中,我将以下行添加到install属性:

 - ln -s `pwd` $(dirname `which python`)/../lib/python2.7/site-packages/my_module

这基本上找到安装Python的目录,然后在其中添加my_module作为符号链接。很高兴听到更好的答案,因为这个人感到非常脆弱。

更新:请参阅@Brian Cain的答案以获得更好的解决方案。

答案 3 :(得分:1)

在@ Brian-Cain答案的补充中,您还可以使用setuptools代替distutils。截至撰写时,distutils正在逐步淘汰,setuptools正在被用作替代品,即使setuptools尚未出现在标准库中。

from setuptools import setup, find_packages

setup(name='Foo',
      version='0.0.1',
      description='Python Distribution Utilities',
      author='',
      author_email='',
      url='',
      packages=find_packages(exclude=['contrib', 'docs', 'tests*']),
     )

有关使用setup.py制作setuptools的快速教程: https://packaging.python.org/tutorials/distributing-packages/

快速实例:https://github.com/pypa/sampleproject/blob/master/setup.py

答案 4 :(得分:0)

使用/home/travis/.local/lib/python2.7/site-packages/更有可能需要PYTHONPATH before_script添加export PYTHONPATH=$PYTHONPATH:/home/travis/.local/lib/python2.7/site-packages/