【问题标题】:How to add my module to travis-ci pythonpath如何将我的模块添加到 travis-ci pythonpath
【发布时间】:2014-09-10 01:48:25
【问题描述】:

我正在为我的项目设置 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 的新手。使这项工作的最佳方法是什么,所以我的代码被添加为可导入模块?

【问题讨论】:

    标签: python python-import travis-ci


    【解决方案1】:

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

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

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

    B-b-但是为什么呢?以正确的方式做到这一点的复杂性是如此之低!它甚至适合几行:

    来自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 环境中,而且在整个项目中。

    【讨论】:

    • 为了记录,我只花了两个小时试图整理我的包裹。对其他人的警告:这不是那么简单。 (没有这么简单。)
    • @mlissner 如果不是这么简单,那么这个解决方案缺少什么?
    • 这实际上并不能解决 travis 的问题
    【解决方案2】:

    为快速起见,您可以通过将以下内容添加到before_script 阶段来更优雅地解决问题:

    export PYTHONPATH=$PYTHONPATH:$(pwd)
    

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

    或者,如果您使用的是生成文件,则可以使用以下命令执行此操作。

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

    【讨论】:

      【解决方案3】:

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

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

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

      更新:查看@Brian Cain 的答案以获得更好的解决方案。

      【讨论】:

      • 只有这样才能解决我的测试回购问题:github.com/alirezahajibagheri/pets_package,非常感谢。但是,我想知道您是否能够通过此处发布的其他建议/答案解决您的问题?
      【解决方案4】:

      作为@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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-11
          • 2018-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-16
          相关资源
          最近更新 更多