win10环境Pyinstaller打包pyside2为exe问题合集

10 篇文章 0 订阅

带pyside(pyqt)的打包指令模板

pyinstaller -w -F main.py --hidden-import PySide2.QtXml --paths E:\ProgramData\Miniconda3\envs\pyside\Lib\site-packages\shiboken2

问题合集

【问题1. qt.qpa.plugin: Could not find the Qt platform plugin “windows” in “”】

在import部分下面加入pyside2的plugins\platforms文件夹

# ----- 这里是import部分--------
# 方法1, 根据组件目录找出plugins\platforms路径
dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
# 方法2, 手工加入
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'E:\ProgramData\Miniconda3\Lib\site-packages\PySide2\plugins\platforms'
# 推荐把platforms目录复制到与.exe文件同级目录下
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = './platforms'

还有第三种方法是修改在conda的包文件夹里的PySide2的__init__.py文件

conda路径\Lib\site-packages\PySide2_init_.py

然后在_setupQtDirectories函数将下面语句替换:
找到下面代码:

pyside_package_dir = os.path.abspath(os.path.dirname(__file__))

在该代码上面添加下面代码

dirname = os.path.dirname(__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

如果1、3种方法都不行就试一下第二种

【问题2. UPX is not available】

UPX官网下载一个新版,解压压缩包,将里面的UPX.exe文件复制到对应python环境下的Script目录
UPX打不开看这篇文章修改DNS,应该是github.io被运营商指向127.0.0.1

【问题3. lib not found: shiboken2】

在对应环境找到包目录,找到shiboken2的文件夹,在打包的时候用–paths选项补上

--paths conda或python路径\Lib\site-packages\shiboken2
【问题4. 运行的时候提示没有找到\shiboken2\libshiboken】

在PySide2的__init__.py文件找到_additional_dll_directories函数

修改1

# 将下面代码
shiboken2 = os.path.join(os.path.dirname(root), 'shiboken2', 'libshiboken')
# 改为下面这句
shiboken2 = root

修改2

# 将下面代码
result = [shiboken2, os.path.join(root, 'libpyside')]
# 改为下面这句
result = [shiboken2, os.path.join(root, 'PySide2')]
【问题5. Failed to execute script stats】

因为前面有报错没解决,.py文件运行不起来

【问题6. WARNING: Several hooks defined for module ‘win32ctypes.core’. Please take care they do not conflict.】

请确认是否安装pywin32

pip install pywin32

如果已安装仍然提示错误请看下面:

如果是conda环境请打开以下路径的compat.py文件

本地存储路径\Miniconda3\envs\pyside\Lib\site-packages\PyInstaller

将185行以下代码

if is_win:
    try:
        from win32ctypes.pywin32 import pywintypes  # noqa: F401
        from win32ctypes.pywin32 import win32api
    except ImportError:
        # This environment variable is set by setup.py
        # - It's not an error for pywin32 to not be installed at that point
        if not os.environ.get('PYINSTALLER_NO_PYWIN32_FAILURE'):
            raise SystemExit('PyInstaller cannot check for assembly dependencies.\n'
                             'Please install pywin32-ctypes.\n\n'
                             'pip install pywin32-ctypes\n')

修改为下面代码

if is_win:
    try:
        import pywintypes  # noqa: F401
        import win32api
    except ImportError:
        # This environment variable is set by setup.py
        # - It's not an error for pywin32 to not be installed at that point
        if not os.environ.get('PYINSTALLER_NO_PYWIN32_FAILURE'):
            raise SystemExit('PyInstaller cannot check for assembly dependencies.\n'
                             'Please install pywin32-ctypes.\n\n'
                             'pip install pywin32-ctypes\n')
【问题7. ImportError: could not import module ‘PySide2.QtXml’】

在pyinstaller打包指令末尾加上–hidden-import PySide2.QtXml指令

# 举例
pyinstaller -F main.py --hidden-import PySide2.QtXml
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alex-Leung

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

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

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

打赏作者

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

抵扣说明:

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

余额充值