我正在为我的项目设置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的新手。什么是使这项工作最好的方法,所以我的代码被添加为可导入的模块?
答案 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 install
,python setup.py bdist_rpm
或pip 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/
。