如果在setup.py打包程序中使用简单代码:
# setup.py from distutils.core import setup import py2exe setup(windows=["test.py"])
在dist文件夹中运行test.exe文件会出现如下错误:
Traceback (most recent call last):
File "test.py", line 2, in
import pymssql
File "pymssql.pyc", line 30, in
File "_mssql.pyc", line 12, in
File "_mssql.pyc", line 10, in __load
ImportError: No module named decimal
可以把setup.py文件修改成如下:
# setup.py from distutils.core import setup import py2exe,os,pyodbc py2exe_options = { "includes": "decimal, datetime" } } setup(windows=["test.py"],options={"py2exe": py2exe_options})
再到cmd的窗口使用python setup.py py2exe命令,一般可正常运行。在网上可以找到关于图形界面的打包脚本,例如:
包含图形界面(pyqt)的程序打包:
#setup.py # -*- coding: utf-8-*- from distutils.core import setup import py2exe,sys,os includes = ["encodings", "encodings.*"] origIsSystemDLL = py2exe.build_exe.isSystemDLL def isSystemDLL(pathname): if os.path.basename(pathname).lower() in ("QtSvg4.dll"): return 0 return origIsSystemDLL(pathname) py2exe.build_exe.isSystemDLL = isSystemDLL setup(windows=[{'script':'RunManager.py','icon_resources':[(1,"icon.ico")]}], options={'py2exe': {'includes':['sip','PyQt4._qt','PyQt4.QtCore','PyQt4.QtSvg','PyQwt'], "optimize": 0, "includes": includes #,"bundle_files": 1 }}, data_files=["icon.ico"])
操作步骤:
1、Dos窗口进入本目录
2、运行命令 python setup.py py2exe --includes PyQt4.QtSvg,sip
3、生成文件在dist目录
4、需要手动拷贝到dist目录的文件:images(目录);app.init;打包相关文件中的PyQt4、qt.conf、QtSvg4.dll;
自己修改其中的一些语句,就可以打包你想要的任何python脚本。
补充,有些PC机可能会出现找不到MSVCP90.DLL文件,用了图形模块的缘故吧。有如下几种解决方法:
因为包含wxpython模块,需下载MSVCP90.DLL 并拷贝到Python26/DLLs 目录下
1.直接下载安装微软vc++ 2008 分发包:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf
会安装到:
C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30411.0_x-ww_71382c73目录下
可能不同的系统会稍有不同,但C:/WINDOWS/WinSxS/x86_Microsoft.VC90...这个是一致的。
而且直接在windows里搜索搜不到。
2.单独下载MSVCP90.DLL 并拷贝到PythonXX/DLLs 目录下
http://www.dll-files.com/dllindex/dll-files.shtml?msvcp90
3.由于本机也能运行,确认不需要msvcp90.dll,可以直接在脚本中去掉包含该dll。但可能在其他人机器不能运行。
在py2exe的setup.py包含如下的代码:
distutils.core.setup( options = { "py2exe": { "dll_excludes": ["MSVCP90.dll"] } }
或
from distutils.core import setup import py2exe setup(windows=['main.py'], options = { "py2exe": {"dll_excludes":["MSVCP90.dll"]}})
4.如果已经安装msvc++ 2008以上,而找不到目录,可以如下设置,找到分发目录。
import sys sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')