1

从Windows生产环境无法运行Python说起
不知道从什么时候开始,兴起了一股学习对Python的热潮。回想自己在2014年初,刚开始入门Python的时候,那时候的广州这个岗位的工作寥寥无几。
而现今,但凡是高新企业的软件公司,动不动就是大数据或者AI。没有数据,那就网上爬取,就是大数据了。不懂人工智能,调下TensorFlow的几个函数,就说自己具备AI技术。

部署的问题

吐槽就到此为止,接下来我们来聊聊生产环境下无法安装Python的问题。在客户提供的Windows 2012R2系统中,之前项目打包免安装版本的Python环境无法正常启动,在启动Python解释器的时候,直接就是类似这样的异常:

error:缺失api-ms-win-crt-runtimel1-1-0.dll

这样的异常,很明显就是宿主环境中缺乏VC库,最简单方式当然是如果本地机器上有对应的文件,直接拷贝一份放进去就好了。然而,对于C++链接库而言,这样的方式一般都是不成功的。于是直接访问如下的地址https://www.microsoft.com/zh-cn/download/details.aspx?id=48145进行相关的下载:

这里,选择了x64的版本进行下载。而在安装的过程中,又出现了类似如下的异常:

未指定的错误

原以为对应的Python版本不对,毕竟打包时候使用的是embeddable版本。
这里简单说下Windows下Python的几种安装版本,这里以Python3.5.3为例,如下图所示:
安装版本

主要有:

  • embeddable版,就是1个压缩包
  • executable安装版本,就是下载后是1个msi安装文件
  • web-based安装版本,就是1种在线安装的版本

一般情况下,我们选择是第2个方式,通过双击进行安装。而实际在项目部署中,会采用第1种方式,这样就不需要手工进行相关安装操作。

换种方式进行尝试

由于怀疑是不是因为embeddable版本缺少某个文件导致的,于是考虑通过安装包的方式看是否能解决问题。
于是,上Python的官方网站下载了对应的安装版本。而在安装的过程中,却出现类似如下的异常:

安装失败

可以发现,与之前VC安装的时候是相同的0x80240017错误。
于是,在Python的官网的地址https://bugs.python.org/issue29583中找到如下内容:

无法安装

找到问题所在并解决

而官方的解决方法主要有2个:

  • 开启系统自带的更新机制
  • 手动下载对应的补丁进行安装

对于开启系统自带的安全更新,可以直接在CMD中运行:

net start wuauserv

但是由于客户的宿主机器部署在内网,不对外进行访问。因此,对于第1种解决方案是不可行的。对于第2种方案,可以访问https://www.microsoft.com/en-us/download/details.aspx?id=42334下载其中的几个补丁文件:

  • Windows8.1-KB2919355-x64.msu(必备)
  • Windows8.1-KB2919355-x64.msu
  • Windows8.1-KB2934018-x64.msu
  • Windows8.1-KB2934018-x64.msu
  • Windows8.1-KB2938439-x64.msu
  • Windows8.1-KB2938439-x64.msu

其中第1个补丁是必须安装的,剩下的可以选择安装。
而在安装Windows8.1-KB2919355-x64.msu之前,需要先安装Windows8.1-KB2919442-x64.msu,而该补丁可以通过https://www.microsoft.com/en-us/download/details.aspx?id=42153进行下载。
下载完成后,我们可以通过wusa.exe进行安装,其操作类似如下:

wusa.exe D:\Windows8.1-KB2919355-x64.msu /quiet  /norestart

在这里,选项/quiet用于静默模式安装补丁,此时不会弹出相关的图像界面,也不会出现Microsoft的软件许可条款。而/norestart主要用于不让在安装完成后重启计算机。

结束语

不得不说,在Windows环境下部署Python3的环境就是1个考验人耐力的时候,要在问题中找到问题的所在,并进行解决。相比Python2,问题反而少那么一些。因此,如果可以的话,我还是比较喜欢用Python2。

参考文章:

https://support.microsoft.com...

我勒个去
1.9k 声望161 粉丝

是1个执着、低调的人