Module sys has no _MEIPASS member error on Python 3.6.6(Python 3.6.6上的模块sys有NO_MEIPASS成员错误)
本文介绍了Python 3.6.6上的模块sys有NO_MEIPASS成员错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在尝试将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__))
该函数返回我想要的;正在运行的文件/程序的位置。
那么,之前是这样写的:
filePath = os.getcwd() + "\my_file.csv"
现在显示为:
filePath = resource_path(os.path.dirname(os.path.abspath(__file__))) + "\my_file.csv"
一旦准备就绪,我的程序就能正确编译并按预期执行,希望它也能对您有所帮助。
这篇关于Python 3.6.6上的模块sys有NO_MEIPASS成员错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:Python 3.6.6上的模块sys有NO_MEIPASS成员错误
基础教程推荐
猜你喜欢
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
