skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
814 stars 90 forks source link

Qt5 中文路径处理问题 #58

Open rainzee opened 1 year ago

rainzee commented 1 year ago

在使用 Pystand 打包后,如果目录中出现中文,会出现无法加载插件的情况,如下: image

这应该不是 Qt 的问题,在不打包的情况下,是能够正常启动,或者,可以通过将 \lib\PyQt5\Qt5\plugins 中的 \platforms 文件夹移动到 exe 的平级目录中,那么此时在中文路径下也没问题了。请问如何修复该问题。

skywind3000 commented 1 year ago

https://github.com/skywind3000/PyStand/wiki/Frequently-Asked-Questions

看 FAQ

rainzee commented 1 year ago

https://github.com/skywind3000/PyStand/wiki/Frequently-Asked-Questions

看 FAQ

这个我已经看了,我的意思是为什么在不打包的情况下,在中文路径启动没有问题,但是打包之后就会出现这个问题,这是为什么?是因为 Cpp 吗

mengdeer589 commented 3 months ago

我最近在在打包pyqt5的qwebengine时,也遇到了中文路径问题。路径信息可以通过QLibraryInfo.location(QLibraryInfo.PluginsPath)查询,包括插件,翻译文件,资源文件呢,未打包情况下,这些路径指向的是环境第三方库里面的路径,打包后,这些路径就指向了打包后的文件夹,于是有了中文路径报错。

pyqt5的qwebengine,环境变量没有QTWEBENGINE_LOCALES_PATH(qt6才有的),所以原本的目录结构没法解决这个中文路径问题,nuitka打包,是通过将资源文件都放在程序根目录来解决的,因为qwebengine启动时会依次尝试三个路径,qt5的bin,qt5,应用程序路径。

所以pystand要想打包pyqt5的qwebegine,在中文路径下成功运行。应该也得采用nuitkta的做法,把资源文件,翻译文件挪出来,具体操作步骤是 1,增加os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = r'.\site-packages\PyQt5\Qt5\plugins'#这是设置pyqt5的插件目录 2,移动site-package\pyqt5\qt5\resources文件夹下所有文件至程序根目录,移动site-packages\PyQt5\Qt5\bin\QtWebEngineProcess.exe至程序根目录 3,此时应该能跑了,但是会报找不到翻译文件,把翻译文件也拿出来,移动site-packages\PyQt5\Qt5\translations\qtwebengine_locales文件夹,把这个文件夹放到根目录。 这样就可以在中文路径下运行带webengine的pyqt5了。