虚拟环境迁移问题排查

背景

某项目开发过程中python虚拟环境通过anaconda conda创建,然后将该虚拟环境直接复制到开发环境中,将整个项目打包成exe之后,出现了一个奇怪的问题:在win8,win10,win11上均没有问题,但在win7上运行过程中出现了缺包的问题。

  • 【WinError127】找不到指定的程序:pywin32_system32和numpy\.libs.

image-20221111100422322

  • 电脑版本:win7 专业版 Service Pack 1

问题排查

问题复现

我们在相同的电脑版本上,尝试进行该问题的复现。

  • 首先通过虚拟环境打开对应的python.exe。然后重新导入缺少的包:
import numpy as np

发现并为报错。

  • 针对当前项目,原来python服务是通过js命令自动调用,我们产生尝试手动启动python服务,发现其也可以正常启动。所以可以说明打包的虚拟环境没有问题。

pywin32_system32

根据网上的经验,需要将虚拟环境下pywin32_system32下包下的动态链接库复制到对应C:Windows\System32.

image-20221111093657502

(继续尝试...)

追加环境变量

将虚拟环境中的python.exe的安装路径添加到环境变量中.

(然并卵,继续复现...)。

win7 上安装python

版本问题

如指定PEP 11,Python 版本仅支持 Windows 平台,而 Microsoft 认为该平台处于扩展支持之下。这意味着 Python 3.11 支持 Windows 8.1 和更新版本。如果您需要 Windows 7 支持,请安装 Python 3.8。

帮助文档:在 Windows 上使用 Python

当前版本(python3.8.5 )支持

在win7 sp1上安装Python3.8

网上资源

stackoverflow:Installing Python 3.8 on windows 7 32bit with SP1

![(C:/Users/B_Hanan/AppData/Roaming/Typora/typora-user-images/image-20221111091552434.png)

image-20221111091609531

验证过程

查看当前电脑的补丁库,发现补丁KB2533623已经存在,所以我们先手动卸载,重新打开python.exe发现,可以复现缺包的问题。然后我们重新安装该补丁,缺包问题解决。

在此基础上,我们回退我们之前的操作:移除追加的环境变量、移除动态链接库,发现一切仍然正常可以使用。

所以在当前问题中影响python虚拟环境缺包的真正问题应该是win7系统缺少"KB2533623"导致.

资源链接:Here

离线包安装

背景

将python库及其依赖包下载下来,然后离线安装。

下载离线包的方式:

image-20221121095403385

需求:安装pymoo库

step1:创建与现场python版本相同的虚拟环境;

step2:创建requirement.txt :里面写pymoo(即我们需要离线下载的库,如果版本未知,可以不写);

step3:使用下述命令进行下载:

pip download -d dir -r requirement.txt
# dir是所有依赖包存放的位置;

step4:然后将所有下载好的文件导入到目标服务器,然后使用下述命令进行安装:

pip install --no-index --find-links=dir -r requirement.txt

注:离线下载时需保持包环境与安装环境一致,即一般情况下windows下导的包在windows上安装;linux下导的包在linux上安装.

实践过程中出现的问题:

supported

出现上述问题,比较郁闷,在本地服务器上顺顺利利,但客户现场就是报错。

问题排查

排查项 命令 排查结果
系统架构 arch 都是x86_64
系统core cat /etc/redhat-release centos7.6(客户)/centos7.9(本地)
python版本 python 3.6.3(客户)/3.6.5(本地)[本地重新创建3.6.3环境后发现,下载的离线包与之前的版本全部一致]
pip pip.__version__ 9.0.1(客户)/21.2.2(本地)下载21.2.2离线安装包,然后在安装上述离线包,问题解决
posted @ 2023-04-11 09:39  LgRun  阅读(265)  评论(0编辑  收藏  举报