首页 > 解决方案 > 点子升级不会删除旧点子和中断

问题描述

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

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

那么建议是什么?

从评论看来,应该使用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 行,in from pip import main

原来,旧的 pip 仍然存在,/usr/bin/pip而新的 pip 在/usr/local/bin/pip.

我用蛮力修复了它:

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

我做了正确的事还是这是注定要失败的方式?

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

最好的问候和感谢您的任何建议。

标签: pythonubuntupipapt

解决方案


在调查了评论中的提示后,我的结论是:

  1. Python 与自身发生冲突。
  2. 不要试图避免这种情况 - 应对它。
  3. 使用虚拟环境一致地处理不可避免的多个 Python 版本。
  4. pyenv似乎最适合我的目的。使用以下命令安装第一个 pyenv (1),更新它 (2),使用 pyenv (3) 安装 Pythons 版本(对于本示例为 3.5.6),将您的用户全局 python 设置为已安装的版本 (4),升级Python 包管理工具 (5) 并在虚拟 Python 环境中 安装任何东西(6)。
    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一些依赖于共享库的 python 包需要 in (3) 。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 中的应用程序开发,这可能不是最好的解决方案,但对于数据科学环境的一致管理,它似乎运作良好。

希望这会有所帮助。


推荐阅读