模块 sys 在 Python 3.6.6 上没有 _MEIPASS 成员错误
Module sys has no _MEIPASS member error on Python 3.6.6
我一直在尝试将 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
我 运行 在使用 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__))
无论如何,这个函数返回了我想要的;这个 file/program 的位置是 运行。
所以,之前写的是这样的:
filePath = os.getcwd() + "\my_file.csv"
现在读作:
filePath = resource_path(os.path.dirname(os.path.abspath(__file__))) + "\my_file.csv"
一旦到位,我的程序就可以正确编译并按预期执行,希望它也能对您有所帮助。
我一直在尝试将 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
我 运行 在使用 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__))
无论如何,这个函数返回了我想要的;这个 file/program 的位置是 运行。
所以,之前写的是这样的:
filePath = os.getcwd() + "\my_file.csv"
现在读作:
filePath = resource_path(os.path.dirname(os.path.abspath(__file__))) + "\my_file.csv"
一旦到位,我的程序就可以正确编译并按预期执行,希望它也能对您有所帮助。