目录
- 带pyside(pyqt)的打包指令模板
- 问题合集
- 【问题1. qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""】
- 【问题2. UPX is not available】
- 【问题3. lib not found: shiboken2】
- 【问题4. 运行的时候提示没有找到\shiboken2\libshiboken】
- 【问题5. Failed to execute script stats】
- 【问题6. WARNING: Several hooks defined for module 'win32ctypes.core'. Please take care they do not conflict.】
- 【问题7. ImportError: could not import module 'PySide2.QtXml'】
带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