PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)

PyInstaller天坑终极攻略

PyInstaller莫名报错?面对错误信息无从下手?翻遍全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目

大佬别走!我这里有:

  1. PyInstaller打包失败后的python打包exe攻略
  2. 便携式python的制作方法
  3. 便携式python安装pip攻略
  4. PyQt5运行时少这少那
  5. 使用QWebEngineView后缺失文件无法运行
  6. 便携式python运行PyQt5出现复古老界面
以上这些你想要的答案这里都有,请慢慢享用或直接查询所需

求赞,求关注,求收藏!

盘点PyInstaller的坑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
等等等,代码写的多了错误也就不胜其数了,好了我就就不戳大家心窝子了,下面开始我们的正题

讲解案例:

使用PyQt5,QWebEngineView,jinja2,markdown2等库的一个项目打包exe

虽然我已经不想再提PyInstaller使用过程中遇到的错误了,但是不巧我们的案例讲解也是由一个错误开始的

Traceback (most recent call last):
  File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 329, in get_module_attribute
    return _get_module_attribute(module_name, attr_name)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_parent.py", line 269, in wrapped
    return call(function, *args, **kwargs)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_parent.py", line 238, in call
    return isolated.call(function, *args, **kwargs)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_parent.py", line 176, in call
    raise RuntimeError(f"Child process call to {function.__name__}() failed with:\n" + output)
RuntimeError: Child process call to _get_module_attribute() failed with:
  File "E:\notebook\venv\lib\site-packages\PyInstaller\isolated\_child.py", line 63, in run_next_command
    output = function(*args, **kwargs)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 325, in _get_module_attribute
    return getattr(module, attr_name)
AttributeError: module 'markdown' has no attribute '__version__'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\program\python\Python3.7.9\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "D:\program\python\Python3.7.9\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "E:\notebook\venv\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
  File "E:\notebook\venv\lib\site-packages\PyInstaller\__main__.py", line 178, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "E:\notebook\venv\lib\site-packages\PyInstaller\__main__.py", line 59, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 934, in main
    build(specfile, distpath, workpath, clean_build)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 856, in build
    exec(code, spec_namespace)
  File "E:\notebook\main.spec", line 20, in <module>
    noarchive=False,
  File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 381, in __init__
    self.__postinit__()
  File "E:\notebook\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 173, in __postinit__
    self.assemble()
  File "E:\notebook\venv\lib\site-packages\PyInstaller\building\build_main.py", line 550, in assemble
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "E:\notebook\venv\lib\site-packages\_pyinstaller_hooks_contrib\hooks\stdhooks\hook-markdown.py", line 23, in <module>
    if is_module_satisfies("markdown >= 3.3"):
  File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 487, in is_module_satisfies
    version = get_module_attribute(module_name, version_attr)
  File "E:\notebook\venv\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 331, in get_module_attribute
    raise AttributeError(f"Failed to retrieve attribute {attr_name} from module {module_name}") from e
AttributeError: Failed to retrieve attribute __version__ from module markdown

说,这么长的东东有没有吓到你,
哎,面对它我们怎么办呢?解决是不可能解决的,额也可能是我菜,到现在也没搞明白~~
莫名其怪,明明码代码的时候运行的好好地就是打包不了,我们只能自己手动打包了.

思路: 将python解释器制作成便携版 然后加入我们的项目 最后补一个exe运行入口好了

便携版python制作

  1. 去python官网下载压缩包的python到本地解压(这里我用https://www.python.org/ftp/python/3.7.9/python-3.7.9-embed-amd64.zip)
  2. 下载get-pip.py文件(https://bootstrap.pypa.io/get-pip.py)
    3.运行get-pip.py文件

pip安装
注意:使用时python要写类似c:\user\python.exe这样具体地址

4.设置python自动寻找pip
找到和python.exe同目录下的python37._pth打开(具体看个人python情况)
去掉 import site 前的注释符号

在这里插入图片描述
注意:在执行pip 命令时要用 python -m pip

到此为止我们的便携式Python就完成了,接下来就是复制我们项目的时候了克隆包拷贝文件走一波

在这里插入图片描述在这里插入图片描述

再把项目文件统统拷贝到python.exe同名目录,大功告成,别高兴的太早,转头运行,不说也罢在这里插入图片描述

接下来处理PyQt5运行时文件找不到的情况

首先 Qt所需要的东西不在环境变量中找不到
qt.qpa.plugin: Could not find the Qt platform plugin “windows” in “”
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

当然网上最简单的方案是

找到python的路径,点击 \Lib\site-packages\PyQt5\Qt5\plugins\platforms
将该路径添加到环境变量中,变量名设为QT_QPA_PLATFORM_PLUGIN_PATH

不过俺是要发布软件给别人用啊,让人家去配环境变量?显然…

那么我的选择是

复制PyQt5\Qt\plugins下下的所有内容复制到到python.exe同目录下

别急,这时我运行,what?我电脑win11啊,怎么成xp界面了,

每错,在某些情况下,如在精简环境下的python程序打包中(我们用的就是便携版python),执行打包后的程序会出现窗体风格变为老式的win风格,这是由于打包时候PyQt的styles动态库没有找到。

因此只需要在Python 目录下找到 Lib\site-packages\PyQt5\Qt\plugins\styles,将styles整个目录复制到python.exe同层目录

最后又又又出现了Could not find QtWebEngineProcess.exe错误,相信看到这儿小伙伴们也和我一样心力憔悴

别慌

将PyQt5/Qt/bin(dist目录下也有)目录下的QtWebEngineProcess.exe和PyQt5/Qt/resource目录下的所有文件复制到dist目录下,解决问题。

这次运行 …/python.exe main.py 成功跑起
晒一张我当时的截图,看到这一幕我高兴的哭了
在这里插入图片描述
当然现在还仅仅是运行起来的,不要指望所有人都会像程序员一样老老实实敲
/python.exe main.py 我们还需要一个小小的脚本

from os import path
import sys
from win32api import ShellExecute
dirname = path.dirname(path.realpath(sys.argv[0]))
ShellExecute(0, 'open', path.join(dirname,'pythonw.exe'), path.join(dirname,'main.py'),dirname,1)# 第一个路径指定python.exe 第二个指定程序入口main.py 第三个路径是开始路径,相当于从D:\\users\\Desktop\\新建文件夹开始运行程序 , 这样能保证路径名不出现问题

之后,这里用了pythonw来调用,嗯毕竟论谁辛辛苦苦画的漂亮界面也不想看到一个黑框框出来扫兴.
还有获取py文件目录就用上面那个,其他不行,这就不得不说PyInstaller打包后exe运行问题了,它是解压到零时目录下运行的,其他语句得不到想要结果,路径会出错
最后我整个项目做出来大概600MB,大是大了点不过python就这样,在加上咱们没有压缩很正常.

终于完了,哦对了上述代码可以用PyInstaller打包个exe放python.exe目录下调用,那么短一个程序也不用怕出啥幺蛾子了

求点赞,求收藏,求关注

致谢:(是你们指引我走过了那段迷茫的时光~~~)

  1. pyinstaller 打包出现几类错误的一般解决方法(https://blog.youkuaiyun.com/qq_44703886/article/details/109763756)
  2. Windows下制作Python便携版(带pip)–Portable Python(https://blog.youkuaiyun.com/lizongti/article/details/123142634)
  3. Pyinstaller 打包发布经验总结(https://blog.youkuaiyun.com/weixin_42052836/article/details/82315118)
  4. 【Pyinstaller】打包并运行时报错:Could not find QtWebEngineProcess.exe的解决(https://blog.youkuaiyun.com/xhltk316/article/details/120283750)
  5. Pyinstaller路径问题,pycharm,exe,双用(https://www.cnblogs.com/jackadam/p/15837102.html)
<think>嗯,用户问的是PyInstaller中使用--key参数报错的问题。首先,我需要确认用户的使用场景。PyInstaller的--key参数是用来加密生成的Python字节码的,通常用于保护代码不被轻易反编译。用户可能在打包时想增加代码的安全性,但遇到了报错。 接下来,我要回忆PyInstaller的文档。记得--key需要配合一个16字符的密钥使用,并且需要安装PyCrypto或者tinkersupport这些加密库。如果用户没有正确安装这些依赖,或者密钥格式不对,就会报错。 可能的错误原因有几个方面:第一,用户是否安装了正确的加密库?比如PyInstaller默认使用PyCrypto,但这个库已经不再维护,可能安装失败。用户可能尝试安装了pycryptodome作为替代,但没有正确配置。第二,密钥是否满足16字符的要求?如果密钥长度不对,或者包含不支持的字符,也会导致错误。第三,PyInstaller版本是否支持--key参数?旧版本可能有兼容性问题,需要确认用户是否用的是最新版本。 然后,我需要思考解决方案。首先建议用户检查密钥是否符合条件,然后确认依赖库是否正确安装。如果使用的是PyCrypto遇到问题,可以建议改用pycryptodome,并给出安装命令。同时,提醒用户注意Python版本PyInstaller的兼容性,可能需要升级工具。最后,提供一个示例命令,让用户参考正确用法。 还要注意用户的系统环境,比如是否在虚拟环境中安装依赖,或者是否有权限问题导致库安装失败。另外,如果错误信息中有具体的提示,比如导入错误或密钥错误,需要根据不同的错误类型给出具体建议。用户可能没有看到详细的报错信息,所以建议他们提供错误日志以便进一步排查。 最后,整理这些思路,用清晰的中文分步骤解释可能的原因解决方法,帮助用户逐步排除问题。确保回答结构清晰,用户能按照步骤检查操作,解决报错问题。</think>在PyInstaller中使用`--key`参数进行加密时遇到报错,通常涉及以下几个关键原因及解决方法: --- ### 一、`--key`参数的作用 `--key`参数用于**加密Python字节码**(.pyc文件),通过AES算法保护代码,但需注意: - 仅加密字节码,原始脚本逻辑仍可能被逆向分析 - 必须配合16字符的密钥使用(如`--key 1234567890123456`) --- ### 二、常见报错原因及解决步骤 #### 1. **依赖库缺失** - ❌ 错误表现:`ImportError: No module named 'Crypto'` 或类似提示 - 🔧 解决方法: ```bash # 安装替代PyCrypto的库 pip install pycryptodome # 确认PyInstaller版本(需≥3.3) pip install --upgrade pyinstaller ``` #### 2. **密钥格式错误** - ❌ 错误表现:`ValueError: Key must be 16 characters long` - 🔧 解决方法: - 确保密钥为**16位ASCII字符**(例如`--key MySecureKey12345`) - 避免使用中文或特殊符号 #### 3. **Python版本兼容性** - ❌ 错误表现:`RuntimeError: Compression requires Python 3.6+` - 🔧 解决方法: - 确认Python版本≥3.6 - 使用虚拟环境测试(推荐): ```bash python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows ``` #### 4. **路径或权限问题** - ❌ 错误表现:`Permission denied` 或文件访问错误 - 🔧 解决方法: - 以管理员权限运行终端(Windows) - 避免路径包含空格或中文 --- ### 三、完整操作示例 ```bash # 安装依赖 pip install pyinstaller pycryptodome # 打包命令(注意密钥长度) pyinstaller --key MySecureKey12345 your_script.py ``` --- ### 四、高级排查 如果仍报错,尝试: 1. 通过`--log-level DEBUG`查看详细日志: ```bash pyinstaller --key YOUR_KEY --log-level DEBUG your_script.py ``` 2. 检查是否与其他参数冲突(如`--upx`需单独安装UPX工具) --- 请根据具体错误信息按上述步骤排查。若问题仍未解决,建议提供完整报错内容以便进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盧瞳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值