pip 没有安装 entry_points 作为可执行文件

pip not installing entry_points as executables

我正在尝试创建自己的程序包。软件包非常简单,只有一个 python 模块和一个 bash 脚本。我想把它们都安装在/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 脚本。

有什么想法吗?

编辑:我是 运行 Ubuntu 16.04.1 机器上的 pip。刚刚尝试在 Ubuntu 14.04 机器上安装相同的包,并且行为符合预期。 cloud_config.pydeploy.sh 都安装到 /usr/local/bin,我可以从系统的任何地方调用它们。

尝试:

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

例如

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

我能想到的两个选项,首先,检查 pip 是否指向正确的位置。所以尝试:

which python

我的说:

/usr/bin/python

你的会有所不同,相应地改变路径 然后确保路径设置正确,所以:

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

重新安装 pip 并重试。 如果做不到这一点,解决方法可能是在这种情况下不使用 pip 并尝试:

python setup.py install

这将使用您的默认 python 路径(不是 pip)并且应该安装到:

/usr/local/bin 

我终于让它工作了。我不得不删除 apt 安装的 pip 包。

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 的默认存储库中的 pip 与 pypi 分发的不同。

console_scripts 不适用于旧版本的 pip。 pip 10.0.1 太旧了。 pip 19.0.3 足够新了。

我还发现我可以安装一个包,它似乎是成功的,但是 entry_points 脚本不在我的 PATH 中。原来 pip 默默地安装失败。

直接尝试运行宁setup.py install。这样做显示我在尝试将脚本安装到 /usr/local/bin 时出现访问错误,即使 pip install -e . 没有显示任何错误。 (See more about using -e.)

我的问题的解决方案是使用 --prefix:

pip install --prefix ~/apps -e .

并且 ~/apps/bin 在我的 $PATH 中。要安装到 /usr/local/bin,您必须更改其权限或 运行 pip 作为 root。