Pip не устанавливает entry_points как исполняемые файлы

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

Здесь мой файл 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

С этим я не могу напрямую ссылаться либо на python, либо на bash script.

Любые идеи?

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

Ответ 1

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

sudo apt remove python-pip

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

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

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

Ответ 2

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

which python

моя говорит:

/usr/bin/python

ваш будет другим, измените путь, соответствующий  затем убедитесь, что PATH правильно установлен, поэтому:

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

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

python setup.py install

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

/usr/local/bin 

Ответ 3

Try:

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

например.

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