当使用--onefile运行时,PyInstaller 2.1似乎求助于dos 8.3名称

时间:2013-11-25 11:58:49

标签: python pyinstaller

我一直在尝试使用PyInstaller 2.1从我的python脚本中创建单个.exe。运行我的.spec文件但没有“--onefile”选项时,我已经完成了所有工作但事情似乎确实如此当我使用“--onefile”选项运行时出错了。

我搜索了stackoverflow,我发现我有更改路径以包含“_MEIPASS”变量。我已将以下函数添加到我的代码中(感谢stackoverflow!):

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = getattr(sys, '_MEIPASS', os.getcwd())
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

我用以下内容加载资源:

data_dir = 'resources'
imageClear = resource_path(os.path.join(data_dir, 'Clear.png'))

我的资源包含在我的.spec文件中:

a.datas += [('resources/Clear.png', "C:\\Users\\MyRealName\\Dropbox\\ProjectName\\resources\\Clear.png",  'DATA')]

现在进入有趣的部分,当我构建没有“--onefile”选项的.exe时,一切似乎都有效。当我使用“--onefile”选项构建它时,我收到以下错误:

Error loading Python DLL:
C:\Users\LAUREN~1\Dropbox\DIAGNO~1\PYINST~1.1\DIAGNO~1\build\DIAGNO~1\python27.dll (error code 126)

似乎PyInstaller确实恢复到DOS 8.3文件名,然后找不到它。但是当我没有运行“--onefile”选项时,它不会这样做。我的代码在两个版本之间的唯一区别应该是上面列出的函数。

编辑: python27.dll在那条路径上不存在(它不应该),我不确定为什么PyInstaller正在寻找它。

我在Google和Stackoverflow上搜索了“getattr(sys,'_ MEIPASS',os.getcwd())”是否以某种方式强制DOS 8.3文件名这个但是这个函数似乎没有这样做。

有什么建议吗?

提前致谢!

0 个答案:

没有答案