升级的 Python;我是不是必须手动重新安装所有站点包?

Posted

技术标签:

【中文标题】升级的 Python;我是不是必须手动重新安装所有站点包?【英文标题】:Upgraded Python; Do I have to reinstall all site-packages manually?升级的 Python;我是否必须手动重新安装所有站点包? 【发布时间】:2019-04-21 06:54:21 【问题描述】:

我最近升级了我的 Linux 发行版。 Python 3.5 被 Python 3.6 取代。

我使用pip3 安装的所有站点包仍在/usr/lib/python3.5/site-packages 目录中,Python 现在找不到它们,因为它显然在.../python3.6/site-packages 中查找。

我看到了目录内容,我可以再次手动安装它们,但在我看来这不是正确的做法。我可以将内容移动到新目录,但在我看来,这似乎也不正确。

我该如何正确处理?

我应该在升级前准备一个pip3 freeze 列表吗?

我试图搜索,但关键字可能过于笼统,得到了许多不相关的答案。

【问题讨论】:

你不应该首先安装站点包。使用 virtualenvs 并为每个项目安装所需的东西。 你还有pip3.5,或者至少还有一个可以工作的python3.5吗?如果是这样,您仍然可以使用pip3.5 freezepython3.5 -m pip freeze。这样,pip3.6 可以快速从 pip 缓存中重新安装包。 @PM2Ring 很遗憾,没有,旧发行版中的旧 3.5 二进制文件已在升级过程中被删除。 【参考方案1】:

Python 3.5 被 Python 3.6 取代。但是你仍然有使用 python 3.5 的备份选项。

如果你想使用 python 3.6,你必须为 python 3.6 重新安装所有 pip 包。这是有道理的。

假设您从 2.7 更改为 3.5。您可能希望分别保留这两种环境。因此 3.6 环境与 3.5 不同。

执行此操作的快速方法是在 3.5 中使用 pip freeze,然后为 3.6 安装这些依赖项。

pip freeze > reqs.txt

升级

pip install -r reqs.txt

由于您不再有此选项,请先尝试列出您的 python3.5 中的所有包

为此,您可以按照@kabanus 的回答安装 pip3.5。

sudo apt-get install python3=3.5.1*
sudo python3.5 easy_install.py pip

此外,建议每个项目使用虚拟环境,这样您就可以为每个项目维护单独的环境。

【讨论】:

正如我所见,每天运行一次 pip freeze(保存输出)作为 cron 作业并不是一个坏主意。幸运的是,手动重新安装它的工作量并不大。【参考方案2】:

我刚从 Python 3.6 升级到 Python 3.7 时遇到了同样的问题,我忘记运行 pip freeze 之前我升级到 Python 3.7。有效的解决方案是将--path 选项指定为old site-packages/ 目录(未被删除):

pip3 freeze --path /usr/local/lib/python3.6/site-packages/ > python3.6_requirements.txt
pip3 install -r python3.6_requirements.txt

【讨论】:

【参考方案3】:

这会使您重新安装变得更简单。结帐the description。使用freeze,您可以执行以下操作:

$ env1/bin/pip3 freeze > requirements.txt
$ env2/bin/pip3 install -r requirements.txt

通常推荐的方法是您使用virtualenv 来安装站点包,这样您就不会乱扔安装区域,但是TBH 对我来说从来没有破坏过任何东西。另一种选择是检查 linux 发行版是否有可用于正确检索的包,如下所示:

sudo apt-get install python3-<somemodule>

这是我更喜欢的 - 并且可以使用发行版进行升级。至于现在要做什么,如果您真的不想正确重新安装所有内容,可以尝试cp /usr/lib/python3.5/site-packages/* /usr/lib/python3.6/site-packages。版本之间的差异并没有那么大,以至于我相信大多数软件包都可以立即使用。不过,您可能必须 sed 将所有文件中的 python3.5 替换为 python3.6忘记如果您这样做,请删除所有 pyc 文件。

Python 模块是自包含的,如果有问题,可以按包处理,并且站点包是完全自包含的,因此您始终可以删除所有内容并重新安装。

最后一点 - 您可以尝试为您的 linux 安装 pyton3.5/pip3.5,然后执行冻结操作。如果没有软件包,您可以手动安装(whl 等)或单独编译并正确配置站点路径。如果您想将内容保存在全局站点包目录中或迁移到 virtualenv,这可能是最安全的选择。

【讨论】:

谢谢。我看到我没有准备好。从我现在看到的选项中,我将手动重新安装所有内容。关于 virtualenvs:我用它们来运行完成的项目。

以上是关于升级的 Python;我是不是必须手动重新安装所有站点包?的主要内容,如果未能解决你的问题,请参考以下文章

升级第三方 jar 时是不是必须重新编译我的应用程序?

升级 R 版本后,如何轻松重新安装旧版本中安装的所有软件包? [复制]

Kubernetes1.16.0重置升级到1.22.2

Kubernetes1.16.0重置升级到1.22.2

Ubuntu18.04 一次性升级Python所有库

Visual Studio ultimate 2012 RC的评估期将在3天后结束,您将需要升级到最新版本?? 必须升级吗?