我想在Amazon Linux AMI 2015.09.1上部署我的Python应用程序,该应用程序具有Python2.7(默认)和pip(6.1.1)。然后,我使用以下命令升级了pip:
sudo pip install -U pip
然而,它似乎坏了,并在我尝试安装软件包时显示消息:
pkg_resources.DistributionNotFound: pip==6.1.1
我发现pip会移除位于/usr/bin/
的先前文件,并在/usr/local/bin
中安装新文件。因此,我尝试使用以下命令指定位置:
sudo pip install -U --install-option="--prefix='/usr/bin'" pip
尽管如此,它仍然在/usr/local/bin
中安装了新的。除此之外,虽然pip成功安装,但pip无法与sudo
一起使用。错误消息:
sudo: pip2.7: command not found
有没有办法正确管理点子?
答案 0 :(得分:46)
尝试:
sudo which pip
这可能会显示出类似于($ PATH)'的内容。
如果是这种情况,您可以这样做:
which pip
这将为您提供类似/usr/local/bin/pip
的路径。
通过运行:sudo cp /usr/local/bin/pip /usr/sbin/
这样您就可以毫无错误地运行sudo pip
。
答案 1 :(得分:24)
挣扎了一段时间。这是我发现的:
ec2_user
找到pip
可执行文件,但由于other
对pip
文件夹中没有读取/执行权限而导致模块导入错误}文件夹。这实际上没问题,因为在大多数情况下,/usr/local/lib/python2.7/site-packages
安装失败时无论如何都不会以pip
运行。root
找不到sudo
。pip
输入root
可以毫无问题地运行sudo su -
。升级后pip
停止工作的原因是因为sudo pip
中删除了可执行文件(或符号链接)。但是,剩下的是名为/usr/bin
的文件,其中包含以下内容:
pip-27
所以,这就是我们的错误所在,因为升级显然不会清除此文件。尚不完全清楚#!/usr/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==6.1.1','console_scripts','pip2.7'
__requires__ = 'pip==6.1.1'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('pip==6.1.1', 'console_scripts', 'pip2.7')()
)
到pip
的名称转换位置。
正如另一个答案中所提到的,pip-2.7
现在在pip
升级后存在,不再在/usr/local/bin
安全路径中。您可以通过运行sudo
将此路径添加到secure_path
变量。另一种方法是,如果您不希望将该路径添加到sudo visudo
,则可以在secure_path
中创建指向新pip
可执行文件的符号链接。
答案 2 :(得分:9)
问题部分由你的问题回答。 Amazon AMI并不认为/usr/local/bin
是root帐户PATH的一部分。您可以通过更新root帐户~/.bashrc
来包含它来解决此问题。
像这样......
export PATH=$PATH:/usr/local/bin
答案 3 :(得分:4)
经过几个小时的挣扎并阅读评论
which pip
给了/ usr / bin / pip,但由于pip升级并且清理不完整,实际的pip位于/ usr / local / bin / pip
删除/ usr / bin /
中的点子sudo rm / usr / bin / pip
并将新的点数添加到导出路径
vim~ / .bash_profile
PATH = $ PATH:$ HOME / bin中:在/ usr / local / bin中
退出终端,然后重新登录
which pip
应该给/ usr / local / bin / pip
pip install --upgrade pip
答案 4 :(得分:2)
这对我有用
sudo /usr/local/bin/pip install --upgrade pip
答案 5 :(得分:2)
我认为在这种情况下,最好的策略是使用pip
管理virtualenv
作为虚拟环境的一部分,而不是弄乱系统级版本。
如果你对此感到满意,这是基本的想法:
将您要升级的virtualenv
版本的pip
版本安装到系统级pip
(例如virtualenv==15.1.0
附带的pip==9.0.1
pip
):
$ sudo pip install -U virtualenv==15.1.0 You are using pip version 6.1.1, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Collecting virtualenv==15.1.0 Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB) 100% |████████████████████████████████| 1.8MB 135kB/s Installing collected packages: virtualenv Found existing installation: virtualenv 12.0.7 Uninstalling virtualenv-12.0.7: Successfully uninstalled virtualenv-12.0.7 Successfully installed virtualenv-15.1.0
我使用virtualenv
release notes找出virtualenv
的哪个版本与pip
的哪个版本对应。
创建虚拟环境:
$ virtualenv myenv New python executable in /home/ec2-user/myenv/bin/python2.7 Also creating executable in /home/ec2-user/myenv/bin/python Installing setuptools, pip, wheel...done.
激活虚拟环境并确认已升级的virtualenv
的版本和位置:
$ source myenv/bin/activate (myenv) $ pip -V pip 9.0.1 from /home/ec2-user/myenv/local/lib/python2.7/dist-packages (python 2.7) (myenv) $ which pip ~/myenv/bin/pip
这应该允许您使用您选择的pip
版本将软件包安装到此sudo
,而无需ubuntu
。
答案 6 :(得分:1)
我认为你没有安装 pythonXX-pip 包。
我已经直接升级到Python3.4,这些命令对我有用。
sudo su
yum install python34
yum install python34-pip
答案 7 :(得分:1)
要添加到angelokh
sudo `which pip` install --upgrade pip