我创建了一个简单的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完成文件?
答案 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完成文件。