gpt4 book ai didi

python - 编译调用配置文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:40 24 4
gpt4 key购买 nike

我正在使用 pyinstaller 编译一个 python 应用程序。

结构是这样的-

d:\app\myprog.exe
d:\app\config\settings.conf

如果我从 d:\app 运行 myprog.exe --switch value 它运行良好,如果我尝试从其他任何地方运行,比如 c:\windows 找不到我的 settings.conf 文件,提示消息:

Traceback (most recent call last):
File "<string>", line 284, in <module>
File "<string>", line 218, in main
File "ConfigParser.py", line 330, in get
ConfigParser.NoSectionError: No section: 'database'
myApp returned -1

database 是我试图引用的配置文件中的第一行。

我在此处引用应用程序中的 BASE_DIR -

# Global Path and Config Info
try:
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
except NameError: # We are the main py2exe script, not a module
BASE_DIR = os.path.dirname(os.path.abspath(sys.argv[0]))

这样我就可以得到这样的配置文件 -

config = RawConfigParser()
config.read(os.path.join(BASE_DIR, 'config/settings.conf'))

但我猜 BASE_DIR 是我从中运行 EXE 的任何文件夹(如 c:\windows,而不是 EXE 的位置(即 d:\app)?

最佳答案

如 PyInstaller documentation 中所述(在 单文件程序如何工作 部分)当执行单个可执行文件(由 PyInstaller 创建)时,会发生所需库模块(Python VM、库和包)的目录结构等)从单个可执行文件中提取到一个临时目录,然后从那里启动应用程序。

这意味着您的 Python 代码中的 __file__ 不会成为单个可执行文件的路径,这就是这个问题的原因。

我会编写我的应用程序以接受来自命令行参数的配置文件路径,回退到使用环境变量(如果可用),然后是基于平台的硬编码默认值(正如大多数多平台应用程序所做的那样)达到他们的配置)。

另一种方法是使用 PyInstaller 的单目录输出并将配置文件包含在同一目录中。然后,为了帮助更轻松地向最终用户分发软件,使用另一个工具从该目录结构创建单个 Windows 安装程序文件。这样您将分发 Windows 安装程序,以便用户可以运行以安装该应用程序。但是当应用程序运行时,它会从配置文件所在的目录运行。

关于python - 编译调用配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36707541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com