如何将所有模块移动到新版本的 Python(从 3.6 到 3.7)

Posted

技术标签:

【中文标题】如何将所有模块移动到新版本的 Python(从 3.6 到 3.7)【英文标题】:How to move all modules to new version of Python (from 3.6 to 3.7) 【发布时间】:2018-12-20 20:44:51 【问题描述】:

我刚刚升级到python 3.7,我意识到我所有的模块都停留在以前的版本上。甚至连 Django 也不再被认可。如何将所有内容转移到新版本?我现在有点迷茫,不知道新版本安装在哪里了。

编辑:

当我执行$ which python3.6 时,终端告诉我它不存在,但我在/usr/local/lib/ 中有一个python3.6 目录,其中安装了所有模块。

在同一目录/usr/local/lib/ 中,我还有一个python3.7 目录,其中安装了一些模块,但很多模块都丢失了。但是,当我在查找器中搜索文件 python3.7 时,它不会出现。当我执行$ which python3.7 时,路径是/usr/local/bin,所以路径与目录不同。

任何人都看到了发生的事情并知道如何将所有模块转移到python3.7

【问题讨论】:

全部卸载后再重新安装? 您是否为 Python 3.7 使用单独的环境? 你是如何安装模块的?我希望你使用了 virtualenv 和 pip。 在旧版本中执行 pip freeze > requirments.pip 并在新版本中执行 pip install -r requirments.pip 只要弄清楚你安装了什么,然后用新版本的 pip 重新安装它们 【参考方案1】:

即使旧的python版本已经被移除,也可以使用当前python版本的pip加上--path选项列出之前版本安装的所有模块。

例如,将我所有用户安装的 python 模块从 3.7 迁移到 3.8

pip freeze --path ~/.local/lib/python3.7/site-packages > requirements.txt
pip install --user -r requirements.txt

顺便说一句,我总是将pip install--user 一起使用,并将系统范围的安装留给我的Linux 发行版的包管理器。

【讨论】:

大多数包都是这样列出的,除了WARNING: Could not generate requirement for distribution -lxc 0.1 (/usr/lib64/python3.7/site-packages): Parse error at "'-lxc==0.'": Expected W:(abcd...)【参考方案2】:

由于可能存在兼容性问题,重新安装所有软件包会更安全:

pip3.6 list | awk 'print $1' | xargs -I pip3.7 install 

【讨论】:

【参考方案3】:

在旧版本的 Python 中——运行命令

pip freeze > requirments.txt

在 python 上下载并安装更新版本.. 将 PATH 变量更改为新版本 并运行命令

pip install -r requirments.txt 

【讨论】:

【参考方案4】:

在某些情况下,我们没有机会在旧版本中pip freeze--因为我已经更新并且旧版本已被清除!我已经采取了一些措施来恢复一些包,但我不确定每个包都可以使用这个修复。(例如用***构建的包)

    mv /your/path/to/python3.6,7/site-packages/ 如果案例是安装在 venv 之外的包(在 /usr/local/~/.local 中),请使用 get-pip.py 重新安装 pip,以确保安全。 如果您正在恢复虚拟环境。激活您的 virtualenv 并使用 my script

您的大多数软件包现在应该可以工作了。如果出现任何故障,pip reinstall 会起作用。如果您仍然希望它 100% 有效,请pip freeze 现在。?

【讨论】:

【参考方案5】:

我不确定所有模块...但是如果您想专门在 python3.7 中安装模块,请尝试以下操作:

python3.7 -m pip install *module_name*

【讨论】:

【参考方案6】:

我有一个选择 (不确定是否适用于 Windows 10

我目前正在从 3.7 迁移到 3.8,我发现重新安装以前的库的方法是使用一个脚本,该脚本通过 pip install 更新所有包。 (假设您安装了新的 Python 版本作为主版本)这会检查我拥有的所有包并在新的 Python 版本中更新/安装它们。

注意:我更喜欢从命令行运行脚本

    使用文件资源管理器转到您拥有脚本的文件夹; 点击路径框,输入“cmd”并按enter,从您所在的文件夹打开命令行; 写“python name_of_your_script.py”并按enter运行命令。

脚本(改编自this solution):

import pkg_resources
from subprocess import call

packages = [dist.project_name for dist in pkg_resources.working_set]
[call("pip install " + name + " --upgrade") for name in packages]

【讨论】:

【参考方案7】:

我遇到了类似的问题,现在我从 python 3.7 升级到了 python 3.8(新)

我安装了 Python 3.8,但即使使用新的 python.exe 创建了 Pyhton38 子文件夹,系统仍将 python37 子文件夹与已安装的包(...\Python37-32\Lib\site-packages)一起保存。

通常,可以在新 Python 版本上继续使用旧库,因为现有库安装文件夹已在本地计算机系统路径 (*) 中注册。

尽管如此,我在使用某些库时遇到了问题(有些在 Jupyter Notebook 中工作,但在 Spyder 中没有)。我尝试了其他人提出的迁移库的替代方案,但没有奏效(也许我没有

所以我使用了野蛮的武力解决方案。一点都不优雅,但它确实有效:

    从系统路径中删除旧的 python 版本文件夹,甚至永久删除文件夹本身。 文件夹:C:\Users\USERNAME\AppData\Roaming\Python\Python37 C:\Users\USERNAME\AppData\Local\Programs\Python\Python37

    重新安装您需要的软件包,最好通过 Anaconda 提示符。 python -mpip 安装 library_name 要么 pip install --user --force-reinstall package_name 要么 pip install --user --force-reinstall package_name == specify_package_version

这些库将安装在 c:\users\USERNAME\anaconda3\lib\site-packages 并被您的新 python 版本识别。

(*)将文件夹添加到PATH:系统属性-->环境变量-->点击“路径”-->编辑-->添加文件夹名)

【讨论】:

以上是关于如何将所有模块移动到新版本的 Python(从 3.6 到 3.7)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 twine 将新版本的项目上传到 PyPI?

Python 3.8 已发布,现在是切换至新版本的好时机吗?

Xpages - 新版本的CkEditor无法加载

如何在较新版本的 libreoffice 中使用 unoconv

将新版本的数据库文件复制到设备上

__future__ 模块 2018-08-09