Python PyInstaller和MEIPASS文件夹,超过8个字符

Python PyInstaller和MEIPASS文件夹,超过8个字符,python,pyinstaller,Python,Pyinstaller,我有一个用python和gtk编写的应用程序,它是用PyInstaller编译的 一切都很顺利。但是,有时,应用程序在加载时会崩溃。Windows在ntdll.dll上报告失败。这可能会在任何Windows版本上损坏。我找到了动机 首先,根据文档,应用程序存储在一个名为MEIXXXX的临时文件夹中,其中xxxxxx是一个随机数 然后,如果此文件夹的名称包含超过8个字符,则我的应用程序将在以下行崩溃: self.builder.add_from_file(glade_file) 我的“glade

我有一个用python和gtk编写的应用程序,它是用PyInstaller编译的

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

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

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

self.builder.add_from_file(glade_file)
我的“glade_文件”是这样装载的:

def resource_path(relative):
    directory = getattr(sys, '_MEIPASS', os.path.abspath('.'))
    return os.path.join(directory, relative)
它基于以下提示:

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

C:\Users\myuser\AppData\Local\Temp\u\MEI41~1

在本例中,实际文件名如下:

_梅41402

我知道这是为了工作,但这不是我现在所经历的

我的怀疑:

  • 有没有办法限制此文件夹的大小?我在文件里什么也没看到
  • 有没有办法更改place的临时文件夹
  • 有没有其他方法可以解决我的问题,使我的应用程序安全运行

  • 对于类似的问题,我使用以下方法检索了长路径:

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

    你也许能帮我解决我的问题。