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.py
和 deploy.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。
我正在尝试创建自己的程序包。软件包非常简单,只有一个 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.py
和 deploy.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。