如何将所有模块移动到新版本的 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)的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.8 已发布,现在是切换至新版本的好时机吗?