我一直试图将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
答案 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"
一旦完成,我的程序将正确编译并按预期执行,希望它也能为您提供帮助。