与distutils / pip一起安装Bash完成

时间:2012-03-30 13:51:46

标签: python pip distutils setup.py bash-completion

我创建了一个简单的Python模块,并希望用pip进行分发。我还想与模块一起安装Bash完成文件。 我正在使用Python 2.7.1+和pip 0.8.2安装模块。

我有这个setup.py:

setup(
    name='jenkinsmon',
    version='0.0.1',
    description='Jenkins Job Monitor',
    long_description=open('README.txt').read(),
    scripts=['bin/jenkinsmon'],
    data_files=[
        ('/etc/bash_completion.d', ['extras/jenkinsmon.completion']),
    ],
    install_requires = [
        'autojenkins',
        'argparse'
    ],
)

现在,如果我尝试使用pip install -e .安装软件包,则Bash完成文件永远不会与软件包一起安装。 我也通过指定MANIFEST.in尝试了解决方法,如描述here

MANIFEST.in:

include extras/jenkinsmon.completion

但这也没有用 - 完成文件不会安装。 我该怎么做才能安装Bash完成文件?

2 个答案:

答案 0 :(得分:1)

MANIFEST.in仅描述要包含在源代码分发中的其他文件;它与安装无关。

如果您运行python setup.py install,是否会安装该文件? pip依赖于setuptools,所以它可能会继承它只在一个“egg”目录/ zipfile中安装所有东西的行为。

答案 1 :(得分:0)

我的错误(除了一般不读取pip文档)只是将-e添加到pip install参数,这意味着以“可编辑”模式安装。引用documentation

  

使用--editable或-e选项,pip具有安装功能   直接来自版本控制存储库(它目前支持   Subversion,Mercurial,Git和Bazaar):

     

pip install -e svn+http://svn.colorstudy.com/INITools/trunk#egg=initools-dev

     

此   选项shell为每个相应的VCS发送到命令行客户端,   所以你必须在你的系统上安装VCS。 repo URL必须   以svn +(或hg +,git +或bzr +)开头,以#egg = packagename结尾;   否则,pip支持相同的URL格式和有线协议   由VCS本身支持。

     

Pip会将源代码检出到src /目录里面   virtualenv(即pip_test_env / src / initools-dev),然后运行python   setup.py在该源代码中开发。这直接“链接”代码   从repo到virtualenv的site-packages目录(通过添加   repo目录进入easy-install.pth),所以你做的改变   来源结账立即生效。

     

如果您已经有想要继续使用的本地VCS结帐,那么您   可以使用pip install -e path / to / repo来安装它“editable”in   同样的方式。

因此要将软件包永久安装到系统中,我必须删除-r,然后按预期安装Bash完成文件。