从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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。