python - 点子升级不会删除旧点子和中断
问题描述
编辑:我的问题不是关于如何立即让 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 或优雅的方式来处理此类问题或从一开始就阻止它们?
最好的问候和感谢您的任何建议。
解决方案
在调查了评论中的提示后,我的结论是:
- Python 与自身发生冲突。
- 不要试图避免这种情况 - 应对它。
- 使用虚拟环境一致地处理不可避免的多个 Python 版本。
pyenv
似乎最适合我的目的。使用以下命令安装第一个 pyenv (1),更新它 (2),使用 pyenv (3) 安装 Pythons 版本(对于本示例为 3.5.6),将您的用户全局 python 设置为已安装的版本 (4),升级Python 包管理工具 (5) 并在虚拟 Python 环境中 安装任何东西(6)。curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
pyenv update
CONFIGURE_OPTS=--enable-shared pyenv install 3.5.6
pyenv global 3.5.6
pip install --upgrade pip setuptools wheel
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 中的应用程序开发,这可能不是最好的解决方案,但对于数据科学环境的一致管理,它似乎运作良好。
希望这会有所帮助。
推荐阅读
- python - 以距离矩阵为输入的聚类算法
- mongodb - 为什么分页插件和跳过/限制在那个 mongodb 查询中不起作用?
- c - (unsigned long)1 和 *(unsigned long *) 是什么意思?
- azure-devops - 仅从 Azure Devops 返回状态更改的 OData 查询
- angular - 带有 ServiceWorker 的自定义 url 路径中的 Angular 应用程序
- visual-studio-code - 侧边栏在 vscode 中使用触摸板滚动非常快
- jhipster - Kubernetes 上的 JHipster 会话问题
- node.js - 运行具有范围包的分叉时出错
- java - 如何在 Eclipse IDE for Enterprise Java Developers 2020-12 版本中添加 Glassfish 6.0 服务器
- django - 如何从裁判类中获取外键值