模块sys在Python 3.6.6上没有_MEIPASS成员错误

时间:2018-07-05 18:23:09

标签: python pyinstaller

我一直试图将json文件捆绑在使用pyinstaller创建的python可执行文件中。经过大量研究,我找到的解决方案涉及到使用_MEIPASS文件夹。但是,VSCode声称sys软件包没有_MEIPASS成员。

我的代码的相关部分如下:

branches_path = 'bank_branches/bank_branches.json'

if hasattr(sys, "_MEIPASS"):
     branches_path = os.path.join(sys._MEIPASS, branches_path)

该代码可在终端版本以及独立应用程序上使用,因此请注意;但是,我想知道是否有一种可行的解决方案,并且没有相关的错误。如果有帮助,我正在使用Python 3.6.6

1 个答案:

答案 0 :(得分:0)

使用pyinstaller创建可执行文件时,我遇到了类似的问题。为了获得功能强大的可执行文件,我必须对脚本进行两​​项更改。

首先,我创建了此函数:

def resource_path(relative_path):
    try: 
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

我的脚本中包含几个类,因此我将其单独放在最后,以便所有类都可以引用它。然后,我替换了我曾经使用过的任何功能

os.getcwd()

-首先可能是个坏主意-

resource_path() 

,对于resource_path()内部的变量,我改用了此函数:

os.path.dirname(os.path.abspath(__file__))

无论如何,此函数返回了我想要的内容;正在运行的此文件/程序的位置。

所以,以前的写法是这样的:

filePath = os.getcwd() + "\\my_file.csv"

现在读为:

filePath = resource_path(os.path.dirname(os.path.abspath(__file__))) + "\\my_file.csv"

一旦完成,我的程序将正确编译并按预期执行,希望它也能为您提供帮助。