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

12 投票
5 回答
3478 浏览
提问于 2025-04-20 18:55

我正在为我的项目设置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

before_script中,可能需要把/home/travis/.local/lib/python2.7/site-packages/这个路径加到PYTHONPATH里。你可以用export PYTHONPATH=$PYTHONPATH:/home/travis/.local/lib/python2.7/site-packages/这个命令来做到这一点。

2

补充一下@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*']),
     )

如果你想快速学习如何用 setuptools 创建一个 setup.py 文件,可以参考这个教程:https://packaging.python.org/tutorials/distributing-packages/

这里有一个真实的例子:https://github.com/pypa/sampleproject/blob/master/setup.py

2

这肯定不是最好的方法,但它确实有效。在我的 .travis.yml 文件中,我在 install 属性里添加了以下一行:

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

这基本上是找到 Python 安装的目录,然后在里面添加一个叫 my_module 的符号链接。我很乐意听到更好的解决方案,因为这个方法感觉很脆弱。

更新:可以看看 @Brian Cain 的回答,那里有一个更好的解决办法。

8

为了快速解决这个问题,你可以在 before_script 阶段添加以下内容:

export PYTHONPATH=$PYTHONPATH:$(pwd)

更好的方法(虽然需要多花一点时间)是Brian Cain提到的,也就是写一个 setup.py 文件,并在 install 阶段添加 pip install .

如果你在使用makefile的话,你也可以用下面这样的命令来实现。

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

怎么才能让我的代码变成一个可以被导入的模块呢?

最好的办法就是用 distutils,绝对不要用 ln

在生产环境中,我只是创建一个符号链接……

可是为什么呢?用正确的方法做这件事其实很简单!只需要几行代码就能搞定:

根据官方手册,只需创建一个这样的 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_rpm 或者 pip install .,这不仅适用于Travis环境,也适用于你的整个项目。

撰写回答