【问题标题】:Upgrade pip in Amazon Linux在 Amazon Linux 中升级 pip
【发布时间】:2016-03-10 06:11:55
【问题描述】:

我想在 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 无法与sudo 一起正常工作,尽管它已成功安装。错误信息:

sudo: pip2.7: command not found

有没有办法正确管理 pip?

【问题讨论】:

  • 不要使用 sudo,/usr/local/bin 是 pip 的正确位置
  • @abolotnov 它总是显示没有 sudo 的错误消息。消息:权限被拒绝:'/usr/local/lib/python2.7/site-packages/xxxxx.py'
  • 试试sudo /usr/lib/local/pip install --upgrade pip
  • @abolotnov 好像没有这个目录(/usr/lib/local)。
  • which pip 返回什么?

标签: python amazon-ec2 pip


【解决方案1】:

试试:

sudo which pip

这可能会显示类似“($PATH) 中没有 pip”的信息。

如果是这样,你可以这样做:

which pip

这会给你一个像/usr/local/bin/pip这样的路径。

通过运行将 pip 的路径复制并粘贴到 sbin 文件夹:sudo cp /usr/local/bin/pip /usr/sbin/

这将允许您运行 sudo pip 而不会出现任何错误。

【讨论】:

    【解决方案2】:

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

    • ec2_user 找到了pip 可执行文件,但由于other/usr/local/lib/python2.7/site-packages 文件夹中的pip 文件夹没有读取/执行权限而导致模块导入错误。这实际上没问题,因为在大多数情况下,pip 安装会在不以root 运行时失败。
    • sudo 找不到 pip
    • 输入 rootsudo 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')()
        )
    

    所以,这就是我们的错误所在,因为升级显然没有清理这个文件。不完全清楚从pippip-2.7 的名称转换发生在哪里。

    正如另一个答案中提到的,升级后pip 现在存在于/usr/local/bin 中,它不再位于sudo 安全路径中。您可以通过运行sudo visudo 将此路径添加到secure_path 变量。如果您不想将该路径添加到您的secure_path,另一种选择是在/usr/bin 中创建指向新的pip 可执行文件的符号链接。

    【讨论】:

    • 很好的解释@Sector95。确定了根本原因。这应该是公认的答案。
    【解决方案3】:

    您的问题部分回答了这个问题。 Amazon AMI 不认为 /usr/local/bin 是根账户 PATH 的一部分。您可以通过更新 root 帐户的 ~/.bashrc 以包含它来解决此问题。

    这样的……

    export PATH=$PATH:/usr/local/bin

    【讨论】:

    • /usr/local/bin 在 PATH 中,但 AWS Linux 没有看到它。我运行了你的命令,现在 pip 工作。不确定实际上有什么不同,但现在可以了!
    【解决方案4】:

    在为此苦苦挣扎了几个小时并阅读了 cmets

    which pip 给了 /usr/bin/pip ,但由于 pip 升级和清理未完成,实际 pip 位于 /usr/local/bin/pip

    所以删除 /usr/bin/ 中的 pip

    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
    

    【讨论】:

      【解决方案5】:

      这对我有用

      sudo /usr/local/bin/pip install --upgrade pip
      

      【讨论】:

        【解决方案6】:

        添加到 angelokh

        sudo `which pip` install --upgrade pip
        

        【讨论】:

          【解决方案7】:

          我认为在这种情况下最好的策略是使用virtualenvpip 作为虚拟环境的一部分进行管理,而不是与系统级版本混为一谈。

          如果你同意的话,基本思路如下:

          1. 安装virtualenv 的版本与您要升级到的pip 版本一起打包到系统级pip(例如virtualenv==15.1.0 附带pip==9.0.1):

            $ sudo pip install -U virtualenv==15.1.0 您正在使用 pip 版本 6.1.1,但版本 9.0.1 可用。 您应该考虑通过“pip install --upgrade pip”命令进行升级。 收集 virtualenv==15.1.0 下载 virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB) 100% |████████████████████████████████| 1.8MB 135kB/s 安装收集的包:virtualenv 找到现有安装:virtualenv 12.0.7 卸载 virtualenv-12.0.7: 成功卸载 virtualenv-12.0.7 成功安装 virtualenv-15.1.0

            我使用virtualenv release notes 找出pip 的哪个版本对应virtualenv 的哪个版本。

          2. 创建虚拟环境:

            $ virtualenv myenv /home/ec2-user/myenv/bin/python2.7 中的新 python 可执行文件 还在 /home/ec2-user/myenv/bin/python 中创建可执行文件 安装 setuptools、pip、wheel...完成。
          3. 激活虚拟环境,确认升级后pip的版本和位置:

            $ 源 myenv/bin/激活 (myenv) $ pip -V 来自 /home/ec2-user/myenv/local/lib/python2.7/dist-packages 的 pip 9.0.1(python 2.7) (myenv) $ 哪个点 ~/myenv/bin/pip

          这应该允许您使用您选择的pip 版本将软件包安装到此virtualenv,而无需sudo

          【讨论】:

            【解决方案8】:

            我认为你没有安装 pythonXX-pip 包。

            我已经将我的直接升级到 Python3.4,这些命令对我有用。

            sudo su
            yum install python34
            yum install python34-pip
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-16
              • 2015-01-16
              • 2018-02-12
              • 2018-04-23
              • 2019-03-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多