windows 下 py2exe 打包程序时遇到的问题及解决办法


    近日为公司写了一个自动更新网站数据的程序,本来是要在我自己的机器上运行的,但是想要可能要将程序部署到其他的机器上,双不能让别人看到程序源码(因为源码里有重要的数据库用户名与密码),所以要打包成 exe.一来可以在windows下运行,二来可以保护源码(不知道是否可以真正做到保护)

    在WIN平台上,先后安装 Python2.6, py2exe, cx_Oracle, Oracle instantclient 11g。cx_Oracle要和Oracle instantclient、python的版本一致,并且 cx_Oracle 要用非 Unicode 版本的,貌似Unicode版本的cx_Oracle会出现"expecting None or a str" 错误。

 

首先设置 oracle instantclient:


先把 oracle instantclient 解压到了 D:/ProgramFiles/instantclient,并设置以下环境变量:
ORACLE_HOME=D:/ProgramFiles/instantclient
PATH=%PATH%;D:/ProgramFiles/instantclient
TNS_ADMIN=D:/ProgramFiles/instantclient
NLA_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

重启,使设置生效

在python的目录下写一个py2exe的安装脚本:mysetup.py,内容如下:


#mysetup.py
from distutils.core import setup
import py2exe
setup(console=[{"script":"main.py"}])

脚本中的main.py是python的入口程序

一切准备就绪,开始打包。我的程序目录是 D:/WebAutoUpdate,执行命令:python D:/WebAutoUpdate/mysetup.py py2exe,出现以下错误:

error: main.py: No such file or directory  

解决办法:进入程序目录后再执行命令

继续执行命令,错误:no such file or dircetory : msvcr80.dll

解决办法:在c:/windows中搜索此文件,并将其拷贝到 python 的site-packages目录中

打包完成,在终端中执行一下程序main.exe,错误: cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

解决办法:将 oraciei11.dll, oraocci11.dll, oci.dll拷贝到生成的目录(dist)中(oci.dll可能已经在目录中),以上3个dll都可以在oracle instantclient中找到。

再执行程序,没有错误,大功告成。

在以上的打包过程中,还有两个错误,因为具体内容记不清了,所以就没有在上面写出来。一个是关于decimal的,好像是 "no module named decimal",解决办法是在 main.py中引用:import decimal,另一个一点儿印象也没有了,解决的办法是将刚提到的三个dll拷贝到 python 的 site-packages 目录中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值