提问者:小点点

将使用pip安装的站点包/模块从较旧的python版本迁移到较新/最新的python版本


首先,我移动了安装在/…中的python模块/蟒蛇3。7/站点包到新的//蟒蛇3。8/站点包手动目录。

为了概括下面的问题,我引入了以下术语:初始(较低)python版本将由3. x表示,较新的版本由3. y表示。在我的例子中,x=7,y=8。

在手动将3. x site-包移动到3. y site-包目录后,我发现在使用新的python版本3. y执行python脚本时,在调用特定模块时出现了某些错误,如Numpysencymatplotlib等。最后对我来说相当不优雅的变通方法是简单的python-m pip卸载Packagename,然后是python-m pip安装Packagename,即简单的卸载,然后重新安装它。这样,错误就消失了。幸运的是,我不必用我所有的100多个包裹来做这件事,这对于大约10个包裹来说是相当必要的。

然而,对于未来,我想知道如何更优雅地将包从前者迁移到当前的python版本,并在需要时自动更新这些包。

系统细节:

  • 操作系统:Linux-Ubuntu 18.04 LTS
  • Python:Python 3.8。3(默认值,2020年7月9日,19:37:58)[GCC 5.4.0 20160609]在linux上(通过linuxbrew/homebrew维护)
  • 编辑:VS-code

共1个答案

匿名用户

我找到了一个解决方案,将此答案与更改两个配置文件中的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.73.8)。

此外,如果系统python3-路径在PYTHONPATH前面,请注释掉该注释,以便为python发行版(无论是homebrewanaconda还是您喜欢的任何版本)提供优先级。

# 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-包