gpt4 book ai didi

python - 如何调试不起作用的 PyInstaller 构建?

转载 作者:行者123 更新时间:2023-12-04 04:26:18 25 4
gpt4 key购买 nike

我之前只使用过一次 PyInstaller,它在 wxPython 上工作得非常直接。不过,我目前正在尝试构建一个不同的项目。从命令行运行时,该项目运行良好。但是,在构建之后,它永远不会启动主窗口 (wxPython)。

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

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

# 构建图标 toc。
icon_toc = []
对于 os.walk(os.path.join(basedir, 'icons')) 中的目录:
对于目录 [2] 中的图标:
icon_toc.append(
(
os.path.join('icons', icon),
os.path.join(dir[0], icon),
'数据',
)
)

a = 分析(
['application.py'],
pathex=['.', './lib', '../broadpy/lib', '../broadpy/vendor'],
隐藏进口=[],
钩子(Hook)路径=无
)
a.datas += icons_toc

pyz = PYZ(a.pure)

exe = EXE(
比兹,
a.scripts + [('v', '', 'OPTION')],
a.二进制文件,
a.zip 文件,
a.数据,
名称=os.path.join(
'dist', '地址cleaner.exe'
),
调试=真,
条=无,
upx=真,
控制台=真
)

应用程序 = 捆绑(
可执行程序,
name=os.path.join('dist', '地址cleaner.app')
)

现在,当我运行构建的可执行文件时,我得到以下输出:

C:\Users\tomas\Dropbox\Broadnet\address_cleaner>"C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Addresscleaner.exe"
_MEIPASS2 为空
存档名称是 C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Addresscleaner.exe
提取二进制文件
将自己作为 child 执行,设置为运行 child
创建子进程
等待子进程完成...
_MEIPASS2 是 C:/Users/tomas/AppData/Local/Temp/_MEI30762/
存档名称是 C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Addresscleaner.exe
已经在 child - 运行!
list 路径:C:/Users/tomas/AppData/Local/Temp/_MEI30762/Addresscleaner.exe.manifest
已创建激活上下文
激活上下文已激活
C:/Users/tomas/AppData/Local/Temp/_MEI30762/python27.dll
操纵环境
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
# 安装 zipimport 钩子(Hook)
导入 zipimport # 内置
# 安装 zipimport 钩子(Hook)
从 CArchive 导入模块
导入编码(marshal) # 内置
提取的 iu
导入 imp # 内置
导入 nt # 内置
提取结构
import _struct # 内置
提取文件
安装导入钩子(Hook)
out00-PYZ.pyz
运行脚本
导入 zlib # 内置
导入错误号 # 内置
导入 _weakref# 内置
导入 _codecs # 内置
导入 _sre # 内置
import _collections # 内置
导入运算符 # 内置
导入 itertools # 内置
导入 _bisect # 内置
导入 _heapq # 内置
导入线程 # 内置
导入数学 # 内置
导入 binascii # 内置
import _hashlib # 从 C:\Users\tomas\AppData\Local\Temp\_MEI30762\_hashlib.pyd 动态加载
import _random # 内置
导入 cStringIO # 内置
回溯(最近一次调用最后一次):
文件“”,第 65 行,在
文件“C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py”,第 386 行,在 importHook
文件“C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py”,第 480 行,在 doimport
文件“C:\Users\tomas\Dropbox\Broadnet\address_cleaner\build\pyi.win32\buildspec\out00-PYZ.pyz\win32com”,第 5 行,在
文件“C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py”,第 386 行,在 importHook
文件“C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py”,第 459 行,在 doimport
文件“C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py”,第 248 行,在 getmod 中
文件“C:\Users\tomas\Downloads\pyinstaller-2.0\PyInstaller\loader\iu.py”,第 105 行,在 getmod 中
导入错误:DLL 加载失败:找不到指定的模块。
RC:-1 来自 pyi_rth_win32comgenpy
好的。
停用激活上下文
释放激活上下文
完毕
# 清除 __builtin__._
# 清除 sys.path
# 清除 sys.argv
# 清除 sys.ps1
# 清除 sys.ps2
# 清除 sys.exitfunc
# 清除 sys.exc_type
# 清除 sys.exc_value
# 清除 sys.exc_traceback
# 清除 sys.last_type
# 清除 sys.last_value
# 清除 sys.last_traceback
# 清除 sys.path_hooks
# 清除 sys.path_importer_cache
# 清除 sys.meta_path
# 清除 sys.flags
# 清除 sys.float_info
# 恢复 sys.stdin
# 恢复 sys.stdout
# 恢复 sys.stderr
# 清理 __main__
# 清理[1] cStringIO
# 清理[1] __future__
# 清理[1] _collections
# 清理[1] 编码
# 清理[1] 站点
# 清理[1] atexit
# 清理[1] 关闭
# 清理[1] _heapq
# 清理[1] _weakref
# 清理[1] abc
# 清理[1] _bisect
# 清理[1] _weakrefset
# 清理[1] 临时文件
# 清理[1] binascii
# 清理[1] sre_constants
# 清理[1] 集合
# 清理[1] _codecs
# 清理[1] _warnings
# 清理[1] 数学
# 清理[1] 操作符
# 清理[1] fnmatch
# 清理[1] 编解码器
#清理[1]重新
# 清理[1] _struct
# 清理[1] 线程
#清理[1]关键字
# 清理[1] 信号
#清理[1]随机
# 清理[1] itertools
# 清理[1] encodings.aliases
# 清理[1] 异常
# 清理[1] heapq
# 清理[1] sre_compile
# 清理[1] _sre
# 清理[1] _random
# 清理[1] hashlib
# 清理[1] 平分
# 清理[1] sre_parse
# 清理[1] _hashlib
# 清理[2] copy_reg
# 清理[2] iu
# 清理[2] os.path
# 清理[2] 存档
# 清理[2] 结构
# 清理[2] 错误号
# 清理[2] 小鬼
# 清理[2] _abcoll
# 清理[2] ntpath
# 清理[2] nt
# 清理[2] 通用路径
#清理[2]统计
# 清理[2] zipimport
# 清理[2] 警告
# 清理[2] UserDict
# 清理[2] 类型
# 清理[2] zlib
# 清理[2] 线缓存
# 清理[2] 操作系统
# 清理[2] 编码(marshal)
# 清理系统
# 清理 __builtin__
# 清理整数:41 个未释放的整数
# 清理浮点数:31 个未释放的浮点数
回到家长...
C:\Users\tomas\Dropbox\Broadnet\address_cleaner\dist\Addresscleaner.exe 的释放状态

所以现在我看到 iu.py 提出了一个异常,但我仍然不知道为什么。我还发现运行我的 Downloads/py-installer 文件夹中的 python 文件非常神秘,即使我删除了该文件夹。

总而言之 - 我必须采取哪些步骤才能准确找出应用程序在启动时崩溃的原因?

我在 Windows 8 上使用 PyInstaller 2.0 和 Python 2.7.3。单独这些事实都不会导致此错误,因为我正在成功构建另一个项目。

最佳答案

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 一起添加到您的目录中的野鹅追逐(假设您的包装在一个目录中)。

作为旁注,对于 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

然后,知道问题发生的位置,然后您可以使用依赖项walker 确定问题以根除丢失的 DLL。

关于python - 如何调试不起作用的 PyInstaller 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com