首先,我移动了安装在/…中的python模块/蟒蛇3。7/站点包
到新的//蟒蛇3。8/站点包
手动目录。
为了概括下面的问题,我引入了以下术语:初始(较低)python版本将由3. x表示,较新的版本由3. y表示。在我的例子中,x=7,y=8。
在手动将3. x site-包移动到3. y site-包目录后,我发现在使用新的python版本3. y执行python脚本时,在调用特定模块时出现了某些错误,如Numpy
,sency
,matplotlib
等。最后对我来说相当不优雅的变通方法是简单的python-m pip卸载Packagename
,然后是python-m pip安装Packagename
,即简单的卸载,然后重新安装它。这样,错误就消失了。幸运的是,我不必用我所有的100多个包裹来做这件事,这对于大约10个包裹来说是相当必要的。
然而,对于未来,我想知道如何更优雅地将包从前者迁移到当前的python
版本,并在需要时自动更新这些包。
系统细节:
Linux-Ubuntu 18.04 LTS
Python 3.8。3
(默认值,2020年7月9日,19:37:58)[GCC 5.4.0 20160609]在linux上(通过linuxbrew
/homebrew维护)VS-code
我找到了一个解决方案,将此答案与更改两个配置文件中的PYTHONPATH
相结合:
/home/user/.bashrc
/home/user/.bash_profile
命名:初始(较低)python版本将由3. x表示,较新的版本由3. y表示。
关于先前修改PYTHONPATH的必要性的注释:
在我的例子中,因为有许多python
版本以各种方式和位置安装,所以需要将目标sitepackage目录前置到整个PYTHONPATH
中的每一个其他目录,因为只有这样提取的python
-模块将安装在正确的目录通过python-m pip安装--user-rpackages_python_3_x.txt
。
如果在您的系统上,PYTHONPATH
直接指向所需的站点包,即它们位于整个PYTHONPATH的第一个位置,则无需对其进行修改。此外,如果您使用的是虚拟环境(如pyenv)或其他环境管理器,则可以自动分离与每个虚拟环境关联的每个站点包。然后,也不需要修改PYTHONPATH
。相比之下,我没有使用虚拟的、本地的和全局的python环境,这就是为什么我有必要为PYTHONPATH
预先准备感兴趣的站点包目录。现在,我正在为不同的项目使用虚拟环境,我向大家推荐。
1.)准备蟒蛇路径(如果需要)
继续上述配置文件,在其中插入以下行:
PYTHONPATH="/home/linuxbrew/.linuxbrew/lib/python3.x/site-packages:$PYTHONPATH"
如果有类似的行指向以前的python版本目录,请根据您的情况将其替换为最新的一行(例如,目录路径中的3.7
为3.8
)。
此外,如果系统python3
-路径在PYTHONPATH
前面,请注释掉该注释,以便为python发行版(无论是homebrew
、anaconda
还是您喜欢的任何版本)提供优先级。
# NOTE on the following commando: it is commented out on purpose (you could also delete it from the config-files, if you don't consider to use these site-packages again, but I kept it for playing safe)
#export PYTHONPATH="/usr/lib/python3/dist-packages:$PYTHONPATH"
为了使更改立即生效,请在UNIX终端中执行以下突击任务:
source /home/user/.bash_profile
source /home/user/.bashrc
2.)提取当前安装的模块,并使用新版本3重新安装它们。Y
最后,将所有安装到文本文件中的python
-包提取出来。在我的例子中,这是用pip
完成的,因此这将是:
python -m pip freeze --path /home/linuxbrew/.linuxbrew/lib/python3.x/site-packages > packages_python_3_x.txt
文本文件应该包含这样的行:
absl-py==0.11.0
access==1.1.1
affine==2.3.0
aiohttp==3.7.2
aiohttp-cors==0.7.0
...
最后,(重新)将所有这些软件包安装到最新的站点软件包文件夹中(此处使用pip
):
python -m pip install --user -r packages_python_3_x.txt
包管理器pip应该选择正确的文件夹,因为您已经更新了PYTHONPATH。此示例中的新site-包目录应为/home/linuxbrew/. linuxbrew/lib/python3. y/site-包
。