【问题标题】:PyInstaller and the MEIPASS folder with more than 8 charactersPyInstaller 和超过 8 个字符的 MEIPASS 文件夹
【发布时间】:2016-03-17 14:04:39
【问题描述】:

我有一个用 python 和 gtk 用 PyInstaller 编译的应用程序。

一切正常。但是,有时,应用程序在加载时会崩溃。 Windows 报告 ntdll.dll 失败。这可能会在任何 Windows 版本上发生。我找到了动机。

首先,根据文档how the one file program works,应用程序存储在一个名为 MEIXXXX 的临时文件夹中,其中 xxxxxx 是一个随机数。

然后,如果此文件夹的名称包含超过 8 个字符,我的应用程序将在此行崩溃:

self.builder.add_from_file(glade_file)

我的“glade_file”是这样安装的:

def resource_path(relative):
    directory = getattr(sys, '_MEIPASS', os.path.abspath('.'))
    return os.path.join(directory, relative)

它基于以下提示:

How to compile all resources into one executable file?

Bundling data files with PyInstaller (--onefile)

当文件夹名称超过八个字符时,Windows 会使用波浪号截断名称。像这样:

C:\Users\myuser\AppData\Local\Temp_MEI41~1

在这种情况下,真正的文件名是这样的:

_MEI 41402

我知道它是有效的,但这不是我正在经历的。

我的疑惑:

  1. 有没有办法限制这个文件夹的大小? 我在文档中什么也没看到。
  2. 有没有办法改变place的临时文件夹?
  3. 还有其他方法可以解决我的问题,以便我的应用程序安全运行吗?

【问题讨论】:

    标签: python pyinstaller


    【解决方案1】:

    遇到类似问题,我使用以下方法检索了长路径:

    if hasattr(sys, '_MEIPASS'):
        import win32api
        sys_meipass = win32api.GetLongPathName(sys._MEIPASS)
    

    【讨论】:

    • 你或许能帮我解决我的problem
    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 2013-07-15
    • 2012-07-16
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多