[√]pyinstaller打包的exe运行报错,找不到库

简介: [√]pyinstaller打包的exe运行报错,找不到库

PyInstaller 是一个用于将 Python 程序打包成独立可执行文件的工具。

使用 PyInstaller 可以将 Python 脚本及其所有依赖项(包括第三方库和资源文件)打包到一个单个的可执行文件中,这样用户就不需要安装 Python 解释器或其他依赖项即可运行该程序。

PyInstaller 支持跨平台,并可以在 Windows、macOS 和 Linux 上进行打包。它能将 Python 程序打包为原生的可执行文件(如EXE、APP或ELF),从而实现了更好的用户体验和便携性。

pyinstaller之后报错

Traceback (most recent call last):
  File "generator.py", line 1574, in <module>
    main()
  File "generator.py", line 1569, in main
    generator.generate_code()
  File "generator.py", line 1204, in generate_code
   顶层逻辑
    layout_h = Template(file=os.path.join(self.target, "templates", "layout_head.h"), searchList=[self])
  File "site-packages\Cheetah\Template.py", line 1259, in __init__
  File "site-packages\Cheetah\Template.py", line 1553, in _compile
  File "site-packages\Cheetah\Template.py", line 788, in compile
  看到它会拼接一个文件,这个路径是以_分割,目录很明显不是exe的
  File "_proj_cocos_binding_static_targets_lua_templates_layout_head_h.py", line 21, in <module>
ImportError: No module named DummyTransaction

在调用栈中发现路径分隔符有异常

H:\\proj\\cocos-binding/static\\targets\\lua
               ↑ 这里的横杠转换出现了问题
    _proj_cocos_binding_static_targets_lua

但是底层Template在处理的时候会正确转换路径分隔符

image.png

问题出在这个convertTmplPathToModuleName函数

image.png

折腾了一圈,发现好像跟这个路径分隔符没有关系,因为我这本地正常的版本也是这个转换逻辑,这里只是为了防止出现特殊字符串

原因

报错提示的代码好像是临时生成的,所以报错后我一直在本机找不到这个文件。

报错的21行代码为

LOAD_CONST(-1), LOAD_CONST(('*',)), IMPORT_NAME(Cheetah.DummyTransaction), IMPORT_STAR

这个报错也就对上了,的确是有这个文件,需要确认下pyinstaller之后是否有这个文件

image.png

解包之后发现还真的就没有Cheet.DummyTransaction这个文件

image.png

感觉是pyinstaller的问题,我使用的pyinstaller版本是3.6,看了文档--hidden-import可以强制将某些lib打包进去,

--hidden-import Cheetah

发现这样没有任何效果,exe运行仍旧提示找不到DummyTransaction模块,解包后的确还是没有,文档上也没有说的更清楚,抱着试试看的态度

--hidden-import Cheetah.DummyTransaction

这样的确是可以了,以防万一,所有的都加上

--hidden-import Cheetah.DummyTransaction --hidden-import PyYAML

pyinstaller并不会把整个lib的代码全部放进去,比如这个cheet库,我发现他会分析你代码中使用到的库的某些工具,仅仅把这些用到的库工具打包进去,这么做也是为了尽可能的减小包体,如果代码中有动态加载的逻辑,pyinstaller就无法识别到,这时就需要--hidden-import打包选项了。

目录
相关文章
|
Python
python打包exe——pyinstaller遇到的那些坑及解决办法
pyinstaller的那些坑 问题一:failed to create process. 问题二:pyinstaller相关参数
2394 0
python打包exe——pyinstaller遇到的那些坑及解决办法
PyInstall的安装,使用,以及最后打包成一个exe文件
PyInstall的安装,使用,以及最后打包成一个exe文件
|
存储 C++
VisualStudio打包项目文件为.exe安装包
注意事项:打包项目前,确保项目能正常运行,不然打包毫无意义。
205 0
|
区块链 Python Windows
python项目打包成exe文件
python项目打包成exe文件
137 0
|
Java Android开发
AndroidStudio导入httpmime jar编译不通过的解决办法
AndroidStudio导入httpmime jar编译不通过的解决办法
176 0
|
Python Windows
Python 把脚本编译打包成EXE文件 —— pyinstaller 的安装和使用
Python 把脚本编译打包成EXE文件 —— pyinstaller 的安装和使用
405 0
|
区块链 Python
pyinstaller打包exe
pyinstaller打包exe
146 0
pyinstaller打包exe
|
SQL 算法 区块链
pyinstaller打包exe(详细教程)
当你想把你做的python游戏或者是脚本等.py文件发给别人时,打包为.exe文件,即使对方没有安装python也能运行
860 0
pyinstaller打包exe(详细教程)
|
C++ Windows
QT5的程序打包发布(打包成exe可执行程序)
QT5的程序打包发布(打包成exe可执行程序)
716 0
QT5的程序打包发布(打包成exe可执行程序)
|
C# C++
C#如何打包EXE程序生成setup安装文件
项目结束之后,有需要将winForm程序打包成.exe文件提供给用户。这里记录一下打包过程。
1939 0
C#如何打包EXE程序生成setup安装文件