摘要:在客户提供的系统中之前项目打包免安装版本的环境无法正常启动在启动解释器的时候直接就是类似这样的异常缺失这样的异常很明显就是宿主环境中缺乏库最简单方式当然是如果本地机器上有对应的文件直接拷贝一份放进去就好了。
从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...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44939.html
导读:兴许所有程序员都有命名困难症,在考虑变量、常量、方法、类、文件等命名时,总会千方百计尝试一些语义化的方式去实现。 曾经有那么一段时间,一些node初学的同学遇到了同样的问题:Hello World 跑不动! 原文首发于个人博客:这事要从node node.js说起 0. 谜之 Hello World 问题的起源非常简单,当我们在编写一个入门程序时,就会迅速想起那句脍炙人口的语句: conso...
阅读 3132·2021-11-10 11:35
阅读 1279·2019-08-30 13:20
阅读 1096·2019-08-29 16:18
阅读 2099·2019-08-26 13:54
阅读 2127·2019-08-26 13:50
阅读 938·2019-08-26 13:39
阅读 2451·2019-08-26 12:08
阅读 1936·2019-08-26 10:37