【问题标题】:Pip upgrade does not remove the old pip and breaks点子升级不会删除旧点子和中断
【发布时间】:2018-08-24 10:38:37
【问题描述】:

编辑:我的问题是不是关于如何立即让 pip 工作的问题。正如您在问题中看到的那样,我通过重新链接解决了这个问题。

问题是:在新的 *NIX 系统上,最佳/pythonic 实践是什么? 人们可能希望拥有最新版本的 Python2,尤其是带有 pip 和 setuptools 等的 Python3。一个受保护的虚拟环境似乎是一种方式,但无论如何都必须从某个地方开始。

那么建议是什么?

从 cmets 看来,应该使用 get-pip.py 脚本安装,然后使用 pip 安装 virtualenv。我想如果想要同时拥有 Python2 和 Python3,就必须这样做。

这是几天前发生的事情:

Ubuntu 18.04 和 Python 2.7

我是一个重度 R 用户,但使用越来越多的 Python。几乎每次我在 Linux 或 OSX 上设置任何类型的自定义 python 环境时,都会出现一些问题并且必须摆弄......链接、二进制文件、路径、依赖项。每一次。现在有多少人坐在一个 Ubuntu/Debian 机器上,并且在做apt install python pip; pip install --upgrade pip 和 -duh- 它坏了?真的吗?

特别是现在:我想在网络服务器上安装 django,并从 apt install python-pip 开始。

然后我做了推荐的pip install --upgrade pip,它安装了 pip-18.0 但给出了消息Not uninstalling pip at /usr/lib/python2.7/dist-packages

在那之后pip --version 抛出了一个错误

Traceback(最近一次调用最后一次):文件“/usr/bin/pip”,第 9 行,在 从点导入主

原来旧pip还在/usr/bin/pip,而新pip在/usr/local/bin/pip

我用蛮力修复了它:

rm /usr/bin/pip
ln -s /usr/local/bin/pip /usr/bin/pip

我做的是正确的事,还是这就是注定要走的路?

是否有一种 Python 或优雅的方式来处理此类问题或从一开始就阻止它们?

向您致以最诚挚的问候并感谢您提出的任何建议。

【问题讨论】:

  • 不要使用python-pip 包。通过其他方式安装pip。使用包管理器安装一个版本的包,然后执行其他操作来升级它是没有意义的。如果这会破坏安装,请不要感到惊讶。要么按原样使用发行版提供的软件包,要么“手动”处理它,
  • 我完全同意之前的评论。我会使用虚拟环境添加,你所有的问题都消失了,你从一个新的全新 python 安装开始(这是我假设的 python 方式)。
  • 为什么还要从 python 2.7 开始呢?使用某些版本的 python 3,djongo 可以完美运行。一旦你安装了 python django 安装只是pip install Django==2.1,或者pip3 install Django==2.1
  • @GiacomoAlzetta 听起来不错,但我如何在没有 apt 的情况下安装 pip?
  • 是的,一开始很正常,不要太担心你的python版本,一次一件事。我建议从源代码安装virtualenv,然后为每个项目创建一个virtualenv,然后安装项目需要的包,而不是其他任何东西,一旦完成,你就可以进行 pip freeze 并且所有依赖项都会神奇地出现。都是优点!

标签: python ubuntu pip apt


【解决方案1】:

我调查了cmets中的hints后得出的结论是:

  1. Python 与自身发生冲突
  2. 不要试图避免这种情况 - 应对它。
  3. 使用虚拟环境一致地处理不可避免的多个 Python 版本。
  4. pyenv 似乎最适合我的目的。使用以下命令安装第一个 pyenv (1),更新它 (2),使用 pyenv (3) 安装 Pythons 版本(对于本示例为 3.5.6),将您的用户全局 python 设置为已安装的版本 (4),升级Python 包管理工具 (5) 并在虚拟 Python 环境 (6) 中安装 anything
    1. curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
    2. pyenv update
    3. CONFIGURE_OPTS=--enable-shared pyenv install 3.5.6
    4. pyenv global 3.5.6
    5. pip install --upgrade pip setuptools wheel
    6. pip install ipython jupyter snowflake-connector-python seaborn

CONFIGURE_OPTS=--enable-shared in (3) 是一些依赖于共享库的python包需要的。 seaborn 没有它就无法安装。

请注意,pyenv安装的版本包括包管理器pip。现在每次调用 python 或 pip 都引用了正确的版本。

在 MacOS bash 和其他 *NIX 中的脚本中引用 python 时,使用#!/usr/bin/env python

可以安装pyenv install 2.7.15 最新的python 2.7 并在必要时更改为它。 pyenv shell 2.7.15 仅在需要运行临时脚本时为特定的 shell 会话切换到 Python2.7。

自从我使用这个流程后,我不再头疼了。

到目前为止,相同的设置在本地 MacOS 和基于远程 Ububtu 的 jupyter 笔记本服务器上都非常有效。

免责声明:我不是核心 Python 全栈开发人员,但在数据科学管道中必要时使用 Python。因此,对于使用 Python 进行应用程序开发,这可能不是最佳解决方案,但对于数据科学环境的一致管理来说,它似乎运作良好。

希望这有帮助。

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2021-12-02
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多