使用带有 configparser 的 pyinstaller 编译时出错
Error when compiling with pyinstaller with configparser
当我使用 pyinstaller 编译时出现错误,它在我的电脑上运行,而不是在其他电脑上运行。
我收到错误
Traceback (most recent call last):
File "app.py", line 30, in <module>
password = parser.get('settings', 'password')
File "configparser.py", line 781, in get
File "configparser.py", line 1152, in _unify_values
configparser.NoSectionError: No section: 'settings'
[9464] Failed to execute script 'app' due to unhandled exception!
这是我的代码
parser = ConfigParser()
parser.read('C:\Users\abc\Desktop\Maker\settings.ini')
我遵循了一些解决方案,但仍然没有解决这个问题,有人能帮忙吗?
我也尝试过这个解决方案,但没有成功
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 = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
parser = ConfigParser()
settings_file = resource_path('settings.ini')
您必须确保将 ini 文件与您的应用程序捆绑在一起。如果您使用 UPX 将所有文件压缩到一个可执行文件中,这会有点困难。我从没看出这有什么意义,因为这似乎是一笔虚假的储蓄。每次您 运行 EXE 时,它都会将所有文件解压缩到一个临时文件夹中。然后您的应用程序现在消耗所有未压缩的 space 加上所有压缩的 space。死气沉沉
我建议您使用 Spec file 来指定所有额外的
您希望包含在申请中的文件。
出于调试目的,您可以将其放入您的程序中以确保 ini 文件位于您认为的位置(您可以在确认文件存在后将其删除或注释掉)
print(os.listdir(<path>))
或
print(os.listdir(os.getcwd()))
其中 getcwd 代表 'get current working directory',这应该是您的 EXE 所在的目录。
如果你不想弄乱 spec 文件,你可以将 --add-data
参数传递给 pyinstaller 并传递你的 ini 文件。
当我使用 pyinstaller 编译时出现错误,它在我的电脑上运行,而不是在其他电脑上运行。
我收到错误
Traceback (most recent call last):
File "app.py", line 30, in <module>
password = parser.get('settings', 'password')
File "configparser.py", line 781, in get
File "configparser.py", line 1152, in _unify_values
configparser.NoSectionError: No section: 'settings'
[9464] Failed to execute script 'app' due to unhandled exception!
这是我的代码
parser = ConfigParser()
parser.read('C:\Users\abc\Desktop\Maker\settings.ini')
我遵循了一些解决方案,但仍然没有解决这个问题,有人能帮忙吗?
我也尝试过这个解决方案,但没有成功
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 = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
parser = ConfigParser()
settings_file = resource_path('settings.ini')
您必须确保将 ini 文件与您的应用程序捆绑在一起。如果您使用 UPX 将所有文件压缩到一个可执行文件中,这会有点困难。我从没看出这有什么意义,因为这似乎是一笔虚假的储蓄。每次您 运行 EXE 时,它都会将所有文件解压缩到一个临时文件夹中。然后您的应用程序现在消耗所有未压缩的 space 加上所有压缩的 space。死气沉沉
我建议您使用 Spec file 来指定所有额外的 您希望包含在申请中的文件。
出于调试目的,您可以将其放入您的程序中以确保 ini 文件位于您认为的位置(您可以在确认文件存在后将其删除或注释掉)
print(os.listdir(<path>))
或
print(os.listdir(os.getcwd()))
其中 getcwd 代表 'get current working directory',这应该是您的 EXE 所在的目录。
如果你不想弄乱 spec 文件,你可以将 --add-data
参数传递给 pyinstaller 并传递你的 ini 文件。