py2exe打包运行后出错,请问如何解决

时间:2021-06-06 07:46:51
没用"bundle_files"这个选项就没问题,用了之后报错
ImportError: MemoryLoadLibrary failed loading XXXX.pyd
XXXX.pyd是我用boost+vs2005做的一个dll文件

19 个解决方案

#1


lz看看这个是否有帮助

http://www.py2exe.org/index.cgi/ProblemsToBeFixed

#2


bundle_files是打包成一个文件吧,用了这个它就无法从文件系统中导入了,你可以把xxxx.pyd单独放在外面。或者用Python将它先解压到系统temp目录。

#3


请问怎么把XXXX.pyd单独放在外面?
我程序中有import XXXX

#4


引用 1 楼 darkchampion 的回复:
lz看看这个是否有帮助

 http://www.py2exe.org/index.cgi/ProblemsToBeFixed


这个报的错和我不一样,而且也没用

#5


把 xxx.pyd 文件 COPY到 .exe 文件夹下就OK了...

#6


不行啊
报错

#7


对于扩大展模块,尽量通过 在setup.py中添加下面的语句来完成设置。这样一般不会出错。

        ext_modules = [Extension("_mymod",["../mymod/clipbrd.cpp",
                                          "../mymod/miffed.c",
                                          "../mymod/mif.c",
                                          "../mymod/mymod.i"
                                          ],
                                 include_dirs=["../mymod"],
 libraries=["user32"]
                                 ),
],

#8


没看懂...

#9


晕,这都没有看懂。请查看disutil的文档

#10


_mymod 是你自定义的吧

#11


引用 6 楼 shakaqrj 的回复:
不行啊
 报错


不行啊.报什么错???
 不是那个 xxx.pyd 未找到了吧? 应该需要多个文件,你要把文件COPY齐了...

#12


是runtime error,r6034
然后是日志文件中的ImportError: MemoryLoadLibrary failed loading XXXX.pyd 

#13


该拷的都拷了
因为第一次我去掉bundle_files,打包一次,这下dist下面有许多文件
不删除,加上bundle_files,再次打包,原先dist下的文件都存在,只是打包后的exe文件替换了
运行时出错

#14


按我说的方法去做就一定没有问题。disutil会自动帮你处理好extension 的。你所需要做的就是改好我给你的那几行代码,把内容换成你的extension相关的文件及名称等

#15


py2exe打包并不包含所有.dll(动态链接库),比如非常重要的:MSVCR71.dll(C运行库);MSVCP71.dll(估计你是缺少该库函数);不同版本及系统可能有所不同。
by the way: pyinstall 打包却不会有这个问题,如果你用pyinstall打没问题,则可以肯定是缺少库函数了,或者你看程序运行是否无误,则也很可能是打包时,缺少系统文件(py2exe打包最后会提示你有些动态库是没有包含进去的,你看系统下是否有?)。

#16


该回复于2009-09-11 13:40:14被版主删除

#17


引用 12 楼 shakaqrj 的回复:
是runtime error,r6034
 然后是日志文件中的ImportError: MemoryLoadLibrary failed loading XXXX.pyd


还有相关的 dll 文件..
dll 文件放到你生成的 .exe 文件文件夹内就行了.

比如  pymssql 需要的 pymssql.pyd 以及 ntwdblib.dll

#18


不用pyd了,现在可以

#19


打包成一个exe文件我觉得还是用pyinstall来的方便,我尝试用py2exe大宝成一个文件,可以打包,但文件运行不了,后来用pyinstall很棒

http://hi.baidu.com/pythonhome/blog/item/ff28afde7050a7d68c102953.html

#1


lz看看这个是否有帮助

http://www.py2exe.org/index.cgi/ProblemsToBeFixed

#2


bundle_files是打包成一个文件吧,用了这个它就无法从文件系统中导入了,你可以把xxxx.pyd单独放在外面。或者用Python将它先解压到系统temp目录。

#3


请问怎么把XXXX.pyd单独放在外面?
我程序中有import XXXX

#4


引用 1 楼 darkchampion 的回复:
lz看看这个是否有帮助

 http://www.py2exe.org/index.cgi/ProblemsToBeFixed


这个报的错和我不一样,而且也没用

#5


把 xxx.pyd 文件 COPY到 .exe 文件夹下就OK了...

#6


不行啊
报错

#7


对于扩大展模块,尽量通过 在setup.py中添加下面的语句来完成设置。这样一般不会出错。

        ext_modules = [Extension("_mymod",["../mymod/clipbrd.cpp",
                                          "../mymod/miffed.c",
                                          "../mymod/mif.c",
                                          "../mymod/mymod.i"
                                          ],
                                 include_dirs=["../mymod"],
 libraries=["user32"]
                                 ),
],

#8


没看懂...

#9


晕,这都没有看懂。请查看disutil的文档

#10


_mymod 是你自定义的吧

#11


引用 6 楼 shakaqrj 的回复:
不行啊
 报错


不行啊.报什么错???
 不是那个 xxx.pyd 未找到了吧? 应该需要多个文件,你要把文件COPY齐了...

#12


是runtime error,r6034
然后是日志文件中的ImportError: MemoryLoadLibrary failed loading XXXX.pyd 

#13


该拷的都拷了
因为第一次我去掉bundle_files,打包一次,这下dist下面有许多文件
不删除,加上bundle_files,再次打包,原先dist下的文件都存在,只是打包后的exe文件替换了
运行时出错

#14


按我说的方法去做就一定没有问题。disutil会自动帮你处理好extension 的。你所需要做的就是改好我给你的那几行代码,把内容换成你的extension相关的文件及名称等

#15


py2exe打包并不包含所有.dll(动态链接库),比如非常重要的:MSVCR71.dll(C运行库);MSVCP71.dll(估计你是缺少该库函数);不同版本及系统可能有所不同。
by the way: pyinstall 打包却不会有这个问题,如果你用pyinstall打没问题,则可以肯定是缺少库函数了,或者你看程序运行是否无误,则也很可能是打包时,缺少系统文件(py2exe打包最后会提示你有些动态库是没有包含进去的,你看系统下是否有?)。

#16


该回复于2009-09-11 13:40:14被版主删除

#17


引用 12 楼 shakaqrj 的回复:
是runtime error,r6034
 然后是日志文件中的ImportError: MemoryLoadLibrary failed loading XXXX.pyd


还有相关的 dll 文件..
dll 文件放到你生成的 .exe 文件文件夹内就行了.

比如  pymssql 需要的 pymssql.pyd 以及 ntwdblib.dll

#18


不用pyd了,现在可以

#19


打包成一个exe文件我觉得还是用pyinstall来的方便,我尝试用py2exe大宝成一个文件,可以打包,但文件运行不了,后来用pyinstall很棒

http://hi.baidu.com/pythonhome/blog/item/ff28afde7050a7d68c102953.html

#20