[python]pyinstaller的bootloader不支持中文路径问题

1 问题描述

在windows10下,使用pyinstaller制作了一个exe文件,其中使用了 ‘runtime_tmpdir=’.’’,以便让该exe解压的_MEIxxxxxx 文件与exe文件在同一个目录下。
在将该exe放在没有中文字符的路径下时,程序能够很好的解压,并能正常支持。但是,当将其放在含有中文字符的路径下时,程序无法运行,抛出异常。

2 问题分析

这是关于exe是否支持中文路径的问题,pyinstaller之前解决过该问题。参见下面的网址。
https://pyinstaller.readthedocs.io/en/stable/CHANGES-3.html?highlight=unicode#v3-3-known-issues
在网上也能搜索到一些帮助。
但这里出现的问题,并不是python的不支持的问题。而是由bootload解压时不支持问题。
上述问题的一个现象是:如果exe文件位于中文路径 “D:/test/”,然后 _MEIxxxxxx文件在"D:/test/"下面,程序能够正确执行;但是如果把exe文件放在含中文的路径下面,如"D:/test中文/"下,则 _MEIxxxxxx file 被解压到根目录"D:/"下,致使python再运行时,无法找到解压的库文件而出错。
所以,根源在于pyinstaller解压的问题。
pyinstaller解压是用一个独立的程序bootloader来完成的,在windows下,该程序路径如下:envs\虚拟环境名称\Lib\site-packages\PyInstaller\bootloader\ 下面。如下:
在这里插入图片描述
如果是64位的,则在下面的Windows-64bit文件夹下,如下图:
在这里插入图片描述
分别对应不同的运行模式下的。

3 问题解决

关于bootload不支持中文的问题,这里有一个解释和解决方案:https://github.com/pyinstaller/pyinstaller/issues/5184
这是bootload的一个缺陷,目前,在这个分支版本中解决了这个问题。
https://github.com/rokm/pyinstaller/tree/fix-5184
但是在正式的pyinstaller中还没有解决。期待下个正式的pyinstaller可以解决。

关于这个版本,及bootloader编译后的windows下64位程序,在这里可以查找:https://download.csdn.net/download/kevinshift/12889701

bootloader的重新编译方法,可参考作者的另一篇文章:https://blog.csdn.net/kevinshift/article/details/108817956

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤来使用PyInstaller打包多个文件的Python程序,并包含指定路径的依赖库。 1. 创建一个spec文件,该文件是一个Python脚本,用于指定需要打包的所有文件和依赖库路径。spec文件的基本结构如下: ```python # -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['main.py', 'module1.py', 'module2.py'], pathex=['/path/to/your/app'], binaries=[], datas=[], hiddenimports=['dependency1', 'dependency2'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, exclude_binaries=True, name='myapp', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], upx_include=[], console=True, path=['/path/to/dependency1', '/path/to/dependency2']) ``` 在上面的示例中,我们将三个文件(main.py,module1.py和module2.py)打包到一个名为“myapp”的可执行文件中,并指定了两个依赖库(dependency1和dependency2)的路径。 2. 运行PyInstaller命令生成可执行文件。在命令行中输入以下命令: ```bash pyinstaller myapp.spec ``` 这将根据spec文件生成一个可执行文件。 3. 运行可执行文件。在命令行中输入以下命令: ```bash ./myapp ``` 这将启动打包好的Python程序,其中包含了指定的多个文件和依赖库路径。 希望这些步骤可以帮助你打包多个文件的Python程序,并包含指定路径的依赖库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值