在Amazon Linux中升级点子

时间:2015-12-05 09:03:58

标签: python amazon-ec2 pip

我想在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

有没有办法正确管理点子?

8 个答案:

答案 0 :(得分:46)

尝试:

sudo which pip

这可能会显示出类似于($ PATH)'的内容。

如果是这种情况,您可以这样做:

which pip

这将为您提供类似/usr/local/bin/pip的路径。

通过运行:sudo cp /usr/local/bin/pip /usr/sbin/

将路径复制+粘贴到pip到sbin文件夹

这样您就可以毫无错误地运行sudo pip

答案 1 :(得分:24)

挣扎了一段时间。这是我发现的:

  • ec2_user找到pip可执行文件,但由于otherpip文件夹中没有读取/执行权限而导致模块导入错误}文件夹。这实际上没问题,因为在大多数情况下,/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作为虚拟环境的一部分,而不是弄乱系统级版本。

如果你对此感到满意,这是基本的想法:

  1. 将您要升级的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的哪个版本对应。

  2. 创建虚拟环境:

    $ 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.
    
  3. 激活虚拟环境并确认已升级的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
    
  4. 这应该允许您使用您选择的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