py2exe打包,遇到找不到msvcp9.dll
周海汉 /文
http://blog.csdn.net/ablo_zhou/archive/2010/02/07/5295750.aspx
2010.2.7
今天用py2exe打包python程序,结果遇到如下错误:
view plaincopy to clipboardprint?
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (c:\python26\lib\site-packages\
wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'select' (c:\python26\DLLs\select.pyd -> se
lect.pyd)
creating python loader for extension 'unicodedata' (c:\python26\DLLs\unicodedata
.pyd -> unicodedata.pyd)
creating python loader for extension 'wx._windows_' (c:\python26\lib\site-packag
es\wx-2.8-msw-unicode\wx\_windows_.pyd -> wx._windows_.pyd)
creating python loader for extension 'wx._core_' (c:\python26\lib\site-packages\
wx-2.8-msw-unicode\wx\_core_.pyd -> wx._core_.pyd)
creating python loader for extension 'wx._gdi_' (c:\python26\lib\site-packages\w
x-2.8-msw-unicode\wx\_gdi_.pyd -> wx._gdi_.pyd)
creating python loader for extension 'wx._controls_' (c:\python26\lib\site-packa
ges\wx-2.8-msw-unicode\wx\_controls_.pyd -> wx._controls_.pyd)
creating python loader for extension 'bz2' (c:\python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (c:\python26\lib\site-packages\
wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'select' (c:\python26\DLLs\select.pyd -> se
lect.pyd)
creating python loader for extension 'unicodedata' (c:\python26\DLLs\unicodedata
.pyd -> unicodedata.pyd)
creating python loader for extension 'wx._windows_' (c:\python26\lib\site-packag
es\wx-2.8-msw-unicode\wx\_windows_.pyd -> wx._windows_.pyd)
creating python loader for extension 'wx._core_' (c:\python26\lib\site-packages\
wx-2.8-msw-unicode\wx\_core_.pyd -> wx._core_.pyd)
creating python loader for extension 'wx._gdi_' (c:\python26\lib\site-packages\w
x-2.8-msw-unicode\wx\_gdi_.pyd -> wx._gdi_.pyd)
creating python loader for extension 'wx._controls_' (c:\python26\lib\site-packa
ges\wx-2.8-msw-unicode\wx\_controls_.pyd -> wx._controls_.pyd)
creating python loader for extension 'bz2' (c:\python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory
*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory
解决办法:
因为包含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 并拷贝到Python26/DLLs 目录下
http://www.dll-files.com/dllindex/dll-files.shtml?msvcp90
3.由于本机也能运行,确认不需要msvcp90.dll,可以直接在脚本中去掉包含该dll。但可能在其他人机器不能运行。
在py2exe的setup.py包含如下的代码:
view plaincopy to clipboardprint?
distutils.core.setup(
options = {
"py2exe": {
"dll_excludes": ["MSVCP90.dll"]
}
},
...
)
distutils.core.setup(
options = {
"py2exe": {
"dll_excludes": ["MSVCP90.dll"]
}
},
...
)
或
view plaincopy to clipboardprint?
from distutils.core import setup
import py2exe
setup(
windows=['main.py'],
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以上,而找不到目录,可以如下设置,找到分发目录。
view plaincopy to clipboardprint?
import sys
sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')