首页 > 编程语言 > 详细

python打包发布

时间:2015-12-26 20:44:23      阅读:461      评论:0      收藏:0      [点我收藏+]

跟所有python小白一样,我也遇到了python打包发布的问题!

进过2天的不断百度谷歌,终于解决了这个蛋疼的问题;过程中遇到了一些问题,记录下来以免遗忘!

先用了py2exe,由于项目里面需要访问oracle数据库,导入cx_oracle模块,就是这个蛋疼的东西坑咯!

安装cx_oracle的过程就不多说了 这个帖子讲得很清楚:http://evil850209.iteye.com/blog/1394932

Oracle Instant Client 设置环境变量是让python可以取到oci.dll,所以很多人把oci.dll, oraocci11.dll,oraociei11.dll都放到了Python27\Lib\site-packages目录下面,也能解决问题;

用py2exe打包后  dist里面有一个msvcp80.dll的文件,系统版本不一样名称不一样,有可能是msvcp90.dll、msvcp71.dll

这样打包就完成了, 问题也来了, 用64位的python,其它模块都是64位的,打包出来的64位程序在64位系统上运行没有问题, 用32位的python(其它也是32位)打包出来的程序在windows server 2003服务器系统上,始终不能正常运行,经调试是导入cx_oracle模块出错,“ Loaded failed ,找不到指定的模块”  复制各种dll进去都没解决到;最后放弃py2exe

 

改用pyinstall

 

使用pyinstall的问题:

 

安装时出现类似这种情况:

File "C:\Python27\lib\ctypes\util.py", line 54, in find_library
    fname = os.path.join(directory, name)
File "C:\Python27\lib\ntpath.py", line 108, in join
    path += "\\" + b
UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xc1 in position 9: ordinal not in range(128)

【原因】

安装过程需要访问用户文件夹:

5490 INFO: Updating manifest in C:\Users\梁鑫辉\AppData\Roaming\pyinstaller\bincache00_py27_32bit\python27.dll

如果用户名是中文,不识别。

【解决办法】

修改ntpath.py,将import sys改为:

import sys
reload(sys)
sys.setdefaultencoding("gbk")

问题2:manifest could not be extracted

【现象】

程序运行时出现这个错误:

manifest could not be extracted

【原因】

不明。

【解决办法】

开始用

pyinstaller -F test.py
打包成一个单一的文件,
换成
pyinstaller -D test.py
生成一个目录 ,这样会把所有需要的dll都放在目录下面;解决问题;

py2exe 和pyinstall 的对比; pyinstall会把需要的dll文件都复制过来,比较齐全;适合windows;在百度的时候看到有人说 py2exe是 用什么系统打包发布的,运行环境也最好是同样的系统,未证实;


通过
pyinstaller -D test.py 完美解决windows server 2003 无法导入cx_oracle模块的问题;

python打包发布

原文:http://www.cnblogs.com/luckstar007/p/5078715.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!