我想在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
.除此之外,sudo
虽然pip 成功安装,但pip无法正常工作.错误消息:
sudo: pip2.7: command not found
有没有办法妥善管理点子?
尝试:
sudo which pip
这可能会显示出"没有pip in($ PATH)"之类的东西.
如果是这种情况,您可以这样做:
which pip
哪个会给你一条路/usr/local/bin/pip
.
通过运行以下命令将路径复制+粘贴到pip到sbin文件夹: sudo cp /usr/local/bin/pip /usr/sbin/
这将允许您运行sudo pip
没有任何错误.
苦苦挣扎了一会儿.这是我发现的:
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
可执行文件的符号链接/usr/bin
.
您的问题可以部分解决问题.Amazon AMI不认为/usr/local/bin
是root帐户的PATH的一部分.您可以通过更新root帐户~/.bashrc
来包含它来解决此问题.
像这样......
export PATH=$PATH:/usr/local/bin
经过数小时的努力并阅读评论后
which pip
给/ usr / bin / pip,但是由于pip升级,实际的pip位于/ usr / local / bin / pip,并且清理未完成
因此,删除/ usr / bin /中的pip
须藤rm / usr / bin / pip
并将新的点添加到您的导出路径
vim〜/ .bash_profile
PATH = $ PATH:$ HOME / bin:/ usr / local / bin
退出终端,然后重新登录
which pip
应该给/ usr / local / bin / pip
pip install --upgrade pip