2017-02-11 15 views
12

Я пытаюсь создать собственный пакет. Пакет очень прост, он имеет один модуль python и один скрипт bash. Я решил, что оба они будут установлены под /usr/local/bin, чтобы они могли быть выполнены непосредственно.pip не устанавливает entry_points как исполняемые файлы

Вот мой setup.py файл:

from setuptools import setup 

setup(
    name='deploy', 
    . 
    . 
    . 
    install_requires=['pyyaml', 'cot', 'jsonschema'], 
    entry_points={ 
     'console_scripts': [ 
      'cloud_config = cloud_config:main', 
     ], 
    }, 
    scripts=['deploy.sh'], 
) 

Вот выдержка из выхода из pip install ...:

running install_scripts 
    copying build/scripts-2.7/deploy.sh -> /usr/local/lib/python2.7.10/bin 
    changing mode of /usr/local/lib/python2.7.10/bin/deploy.sh to 755 
    Installing cloud_config script to /usr/local/lib/python2.7.10/bin 

С этим, я не в состоянии вызвать либо питона или Баш скрипт непосредственно.

Любые идеи?

Редактировать: Я запускаю pip на Ubuntu 16.04.1 машине. Просто попытался установить тот же пакет на машине Ubuntu 14.04, и поведение будет таким, как ожидалось. cloud_config.py и deploy.sh оба устанавливаются на /usr/local/bin, и я могу вызывать оба из любой точки системы.

+2

Ubuntu сильно патчи, Я не удивлен, что они тоже изменили поведение. –

+0

Это абсурд @MartijnPieters. Как можно создать пакет, который правильно устанавливается на всех платформах? – ronakg

+0

Я только что попытался создать пакет на основе 'setup.py' и развернуть чистую Ubuntu 16.04 Vagrant box - все работает отлично.Если вы предоставите дополнительную информацию, это может помочь воспроизвести проблему. Может быть, что-то с версиями? Какую версию setuptools вы используете для сборки? Каковы настройки pip и setuptools на целевой машине? – Timur

ответ

1

Наконец я заставил его работать. Мне пришлось удалить пакет pip, который был установлен apt.

sudo apt remove python-pip 

А затем установить пип снова в соответствии с инструкциями на их сайте - https://pip.pypa.io/en/stable/installing/.

wget https://bootstrap.pypa.io/get-pip.py 
sudo python get-pip.py 

Похоже, что пипс из репозитория по умолчанию Ubuntu не такой, как один, распространенный pypi.

0

Try:

pip install --install-option="--prefix=$PREFIX_PATH" package_name 

например

pip install --install-option="--prefix=/usr/local/bin" pyFooBar 
+0

Не записываются ли записи в 'entry_points -> console_scripts' в' PATH', чтобы их можно было вызывать из любого места? – ronakg

+0

В соответствии с этой документацией для упаковки python - http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html – ronakg

2

Два варианта, о которых я могу думать, во-первых, проверить, что пип указывается в нужном месте. Так что попробуйте:

which python 

шахты говорит:

/usr/bin/python 

ваш будет отличаться, изменить путь соответственно затем убедитесь, что путь правильно установлен, так:

export PATH=/usr/bin/python:${PATH} 

Переустановка и повторите попытку. В противном случае, обходной путь может быть не использовать пипс в данном случае и попробовать:

python setup.py install 

который будет использовать свой путь питона по умолчанию (не пип) и должны установить на:

/usr/local/bin 
+0

Mine также говорит '/ usr/bin/python'. См. Мой ответ ниже, чтобы посмотреть, что сработало. Я до сих пор не знаю, почему настройка по умолчанию не работает. – ronakg