Установите завершение Bash вместе с distutils / pip - PullRequest
4 голосов
/ 30 марта 2012

Я создал простой модуль 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, как описано здесь :

MANIFEST.in:

include extras/jenkinsmon.completion

Но это также не помогает - файлы завершения не будут установлены. Что я могу сделать, чтобы установить файлы завершения Bash?

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

MANIFEST.in описывает только дополнительные файлы, которые будут включены в исходные дистрибутивы; это не имеет ничего общего с установкой.

Будет ли установлен файл, если вы запустите python setup.py install? pip полагается на setuptools, поэтому, возможно, он наследует поведение установки всего в один «egg» каталог / zipfile.

0 голосов
/ 04 апреля 2012

Моя ошибка (кроме того, что я вообще не читал pip-документацию) заключалась в добавлении -e к параметрам pip install, что означает установку в «редактируемом» режиме.Цитируя документацию

Используя опцию --editable или -e, pip имеет возможность установки непосредственно из хранилища управления версиями (в настоящее время он поддерживает Subversion, Mercurial, Gitи Bazaar):

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

Эта опция отправляется клиенту командной строки для каждой соответствующей VCS, поэтому в вашей системе должна быть установлена ​​VCS.URL репо должен начинаться с svn + (или hg +, git + или bzr +) и заканчиваться # egg = packagename;в противном случае pip поддерживает те же форматы URL и проводные протоколы, которые поддерживаются самой VCS.

Pip извлечет исходное хранилище в каталог src / внутри virtualenv (то есть pip_test_env / src / initools-dev), а затемзапустите python setup.py для разработки в этом репозитории.Это «связывает» код непосредственно из репозитория с каталогом site-packages в virtualenv (добавляя каталог репозитория в easy-install.pth), поэтому изменения, вносимые вами в исходную проверку, вступают в силу немедленно.

Еслиу вас уже есть локальная проверка VCS, которую вы хотите продолжать использовать, вы можете просто использовать pip install -e path / to / repo, чтобы установить ее «редактируемой» таким же образом.

Итак, чтобы установитьПакет постоянно в систему, я должен удалить -r, затем файлы завершения Bash устанавливаются, как ожидалось.

...