2012-12-07 16 views
6

我之前只使用了PyInstaller一次,它使用wxPython很简单。我目前正试图建立一个不同的项目。从命令行运行时,该项目运行良好。但是,它在构建之后永远不会启动主窗口(wxPython)。如何调试无法运行的PyInstaller构建?

我已经在构建规范中将调试和控制台标志设置为True。我还添加了PyInstaller手册中指定的详细选项([('v', '', 'OPTION')])。这里是规格:

 
# -*- mode: python -*- 
# basedir = os.path.realpath(os.path.dirname(__file__)) 
basedir = os.getcwd() 

# Build the icons toc. 
icons_toc = [] 
for dir in os.walk(os.path.join(basedir, 'icons')): 
    for icon in dir[2]: 
     icons_toc.append(
      (
       os.path.join('icons', icon), 
       os.path.join(dir[0], icon), 
       'DATA', 
      ) 
     ) 

a = Analysis(
    ['application.py'], 
    pathex=['.', './lib', '../broadpy/lib', '../broadpy/vendor'], 
    hiddenimports=[], 
    hookspath=None 
) 
a.datas += icons_toc 

pyz = PYZ(a.pure) 

exe = EXE(
    pyz, 
    a.scripts + [('v', '', 'OPTION')], 
    a.binaries, 
    a.zipfiles, 
    a.datas, 
    name=os.path.join(
     'dist', 'Address cleaner.exe' 
    ), 
    debug=True, 
    strip=None, 
    upx=True, 
    console=True 
) 

app = BUNDLE(
    exe, 
    name=os.path.join('dist', 'Address cleaner.app') 
) 

现在,当我运行生成的可执行文件,我得到这样的输出:所以现在我看到有

C:\Users\tomas\Dropbox\Broadnet\address_cleaner>"C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Address cleaner.exe" 
_MEIPASS2 is NULL 
archivename is C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Address cleaner.exe 
Extracting binaries 
Executing self as child with Setting up to run child 
Creating child process 
Waiting for child process to finish... 
_MEIPASS2 is C:/Users/tomas/AppData/Local/Temp/_MEI30762/ 
archivename is C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Address cleaner.exe 
Already in the child - running! 
manifestpath: C:/Users/tomas/AppData/Local/Temp/_MEI30762/Address cleaner.exe.manifest 
Activation context created 
Activation context activated 
C:/Users/tomas/AppData/Local/Temp/_MEI30762/python27.dll 
Manipulating evironment 
PYTHONPATH=C:/Users/tomas/AppData/Local/Temp/_MEI30762;C:/Users/tomas/Dropbox/Broadnet/address_cleaner/dist 
PYTHONHOME=C:/Users/tomas/AppData/Local/Temp/_MEI30762/ 
v 
# installing zipimport hook 
import zipimport # builtin 
# installed zipimport hook 
importing modules from CArchive 
import marshal # builtin 
extracted iu 
import imp # builtin 
import nt # builtin 
extracted struct 
import _struct # builtin 
extracted archive 
Installing import hooks 
out00-PYZ.pyz 
Running scripts 
import zlib # builtin 
import errno # builtin 
import _weakref # builtin 
import _codecs # builtin 
import _sre # builtin 
import _collections # builtin 
import operator # builtin 
import itertools # builtin 
import _bisect # builtin 
import _heapq # builtin 
import thread # builtin 
import math # builtin 
import binascii # builtin 
import _hashlib # dynamically loaded from C:\Users\tomas\AppData\Local\Temp\_MEI30762\_hashlib.pyd 
import _random # builtin 
import cStringIO # builtin 
Traceback (most recent call last): 
    File "", line 65, in 
    File "C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in importHook 
    File "C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport 
    File "C:\Users\tomas\Dropbox\Broadnet\address_cleaner\build\pyi.win32\buildspec\out00-PYZ.pyz\win32com", line 5, in 
    File "C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in importHook 
    File "C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py", line 459, in doimport 
    File "C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py", line 248, in getmod 
    File "C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py", line 105, in getmod 
ImportError: DLL load failed: The specified module could not be found. 
RC: -1 from pyi_rth_win32comgenpy 
OK. 
Deactivating activation context 
Releasing activation context 
Done 
# clear __builtin__._ 
# clear sys.path 
# clear sys.argv 
# clear sys.ps1 
# clear sys.ps2 
# clear sys.exitfunc 
# clear sys.exc_type 
# clear sys.exc_value 
# clear sys.exc_traceback 
# clear sys.last_type 
# clear sys.last_value 
# clear sys.last_traceback 
# clear sys.path_hooks 
# clear sys.path_importer_cache 
# clear sys.meta_path 
# clear sys.flags 
# clear sys.float_info 
# restore sys.stdin 
# restore sys.stdout 
# restore sys.stderr 
# cleanup __main__ 
# cleanup[1] cStringIO 
# cleanup[1] __future__ 
# cleanup[1] _collections 
# cleanup[1] encodings 
# cleanup[1] site 
# cleanup[1] atexit 
# cleanup[1] shutil 
# cleanup[1] _heapq 
# cleanup[1] _weakref 
# cleanup[1] abc 
# cleanup[1] _bisect 
# cleanup[1] _weakrefset 
# cleanup[1] tempfile 
# cleanup[1] binascii 
# cleanup[1] sre_constants 
# cleanup[1] collections 
# cleanup[1] _codecs 
# cleanup[1] _warnings 
# cleanup[1] math 
# cleanup[1] operator 
# cleanup[1] fnmatch 
# cleanup[1] codecs 
# cleanup[1] re 
# cleanup[1] _struct 
# cleanup[1] thread 
# cleanup[1] keyword 
# cleanup[1] signal 
# cleanup[1] random 
# cleanup[1] itertools 
# cleanup[1] encodings.aliases 
# cleanup[1] exceptions 
# cleanup[1] heapq 
# cleanup[1] sre_compile 
# cleanup[1] _sre 
# cleanup[1] _random 
# cleanup[1] hashlib 
# cleanup[1] bisect 
# cleanup[1] sre_parse 
# cleanup[1] _hashlib 
# cleanup[2] copy_reg 
# cleanup[2] iu 
# cleanup[2] os.path 
# cleanup[2] archive 
# cleanup[2] struct 
# cleanup[2] errno 
# cleanup[2] imp 
# cleanup[2] _abcoll 
# cleanup[2] ntpath 
# cleanup[2] nt 
# cleanup[2] genericpath 
# cleanup[2] stat 
# cleanup[2] zipimport 
# cleanup[2] warnings 
# cleanup[2] UserDict 
# cleanup[2] types 
# cleanup[2] zlib 
# cleanup[2] linecache 
# cleanup[2] os 
# cleanup[2] marshal 
# cleanup sys 
# cleanup __builtin__ 
# cleanup ints: 41 unfreed ints 
# cleanup floats: 31 unfreed floats 
Back to parent... 
Freeing status for C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Address cleaner.exe 

的FROM iu.py引发异常,但我仍然没有想法为什么。我也发现它很神秘,我的Downloads/py-installer文件夹中的python文件运行,即使我删除该文件夹。

因此,总结 - 我必须采取哪些步骤才能确切知道应用程序在启动时崩溃的原因?


我在Windows 8没有单独的事实的使用PyInstaller 2.0与Python 2.7.3会导致这个错误,因为我成功地建立另一个项目。

回答

0

我知道这个答案没有回答如何调试这样的问题,所以我不会将它标记为正确的,但我设法构建应用程序,我想我应该分享如何。我做了三件事情,每个可能是错误的原因,但我们永远不会知道:

1

Pyinstaller sometimes needs explicit references in the .spec file to correctly package dependencies

欲了解更多信息,请参阅ensuring proper import statements so that pyinstaller recognizes them

例如,如果从一个Python模块(例如,pyinstaller不会读取的jar或C++文件)之外导入关键的依赖关系,就很容易错过。

dependency walker可能是您系统跟踪丢失的DLL的第一道防线。只需下载它,然后加载您的exe或附属dll,以查看哪些缺少依赖关系。然后,这只是一个疯狂的追逐,追踪它们并手动将它们与.exe一起添加到您的目录中(假设您的包装在一个目录)。

# line 409 of Pyinstaller.loader.pyi_importers.py 
try: module = imp.load_module(fullname, fp, filename, self._c_ext_tuple) 
except Exception as e: 
    print fullname # at least tells you what module couldn't be imported 
    raise e 

然后,知道在哪里:

作为一个侧面说明,对于pyinstaller 2.1(蟒蛇2.7.6),我在导入时修改了pyi_importers.py文件至少尝试和打印哪个模块是麻烦制造者发生问题后,您可以使用dependency walker指出问题以找出丢失的DLL。

+0

我有同样的问题,谢谢。 –

+0

解决了我的问题是在WinXP上重新编译pyd模块(尤其是pcapy),并将其复制到我的Windows 7 python安装中。现在我在Windows 7上构建的pyinstaller exe也可以在Windows XP和Windows 7上工作 –

+0

您可以帮助解决我的[问题](http://stackoverflow.com/questions/41073132/pyinstaller-app-is-accessing -txt-文件的但不写入到他们-作品 - 前-AP)。 – Phillip

相关问题