4

我创建了一个简单的 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 尝试了解决方法,如下所述

清单.in:

include extras/jenkinsmon.completion

但这也无济于事——完成文件不会被安装。我可以做些什么来安装 Bash 完成文件?

4

2 回答 2

1

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

如果你运行,文件会被安装python setup.py install吗?pip 依赖于 setuptools,因此它可能继承了仅将所有内容安装在一个“egg”目录/zipfile 中的行为。

于 2012-03-31T22:59:27.800 回答
0

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

使用 --editable 或 -e 选项,pip 可以直接从版本控制存储库安装(它目前支持 Subversion、Mercurial、Git 和 Bazaar):

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

此选项会针对每个 VCS 向命令行客户端发送,因此您必须在系统上安装 VCS。repo URL 必须以 svn+(或 hg+、git+ 或 bzr+)开头,并以 #egg=packagename 结尾;否则,pip 支持与 VCS 本身支持的相同 URL 格式和有线协议。

Pip 会将源代码库检出到 virtualenv 内的 src/ 目录中(即 pip_test_env/src/initools-dev),然后在该源代码库中运行 python setup.py develop。这会将代码从 repo 直接“链接”到 virtualenv 的 site-packages 目录中(通过将 repo 目录添加到 easy-install.pth 中),因此您在源代码签出中所做的更改会立即生效。

如果您已经有了要继续使用的本地 VCS 结帐,则可以使用 pip install -e path/to/repo 以相同的方式“可编辑”安装它。

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

于 2012-04-04T17:26:50.513 回答