Hub*_*bro 9 python pyinstaller
我之前只使用过一次PyInstaller,而且它在wxPython中非常直接.我现在正在尝试建立一个不同的项目.从命令行运行时,该项目运行良好.然而,在它构建之后,它永远不会启动主窗口(wxPython).
我在构建规范中将调试和控制台标志设置为True.我还添加[('v', '', 'OPTION')]了PyInstaller手册指定的verbose选项().这是规格:
# -*- 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
所以现在我看到iu.py引发了异常,但我仍然不明白为什么.即使我删除了该文件夹,我也发现在我的Downloads/py-installer文件夹中运行python文件是相当神秘的.
总结一下 - 我必须采取哪些步骤来弄清楚应用程序在启动时崩溃的确切原因?
我在Windows 8上使用PyInstaller 2.0与Python 2.7.3.这些事实本身都没有导致这个错误,因为我正在成功构建另一个项目.
Pyinstaller 有时需要在 .spec 文件中明确引用以正确打包依赖项。
有关更多信息,请参阅确保正确的导入语句,以便 pyinstaller 识别它们。
例如,如果关键依赖项是从 Python 模块之一外部导入的(例如从 pyinstaller 不会读取的 jar 或 c++ 文件),则很容易错过关键依赖项。
Dependency walker可能是您系统地跟踪丢失的 DLL 的第一道防线。只需下载它,然后加载您的 exe 或附属 dll 即可查看哪些缺少依赖项。然后,这只是一种追查它们并手动将它们与 .exe 一起添加到您的目录中的野鹅追逐(假设您的包装在一个目录中)。
作为旁注,对于 pyinstaller 2.1 (python 2.7.6),我修改了pyi_importers.py文件以至少尝试打印导入时哪个模块是麻烦制造者:
# 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
Run Code Online (Sandbox Code Playgroud)
然后,知道问题发生的位置,然后您可以使用依赖项walker 确定问题以根除丢失的 DLL。
| 归档时间: |
|
| 查看次数: |
8733 次 |
| 最近记录: |