【问题标题】:Where to put a config file for a compiled Python script?将已编译 Python 脚本的配置文件放在哪里?
【发布时间】:2012-03-18 23:53:05
【问题描述】:

这类似于Where to put a configuration file in Python?,但我询问的是在 Windows 系统上使用 py2exe 或类似工具编译/冻结的脚本。 (即这个:What config file format to use for user-friendly strings of arbitrary bytes?https://gist.github.com/1119561

我的第一个想法是将配置文件与 .exe 放在同一个文件夹中,这使它有点独立。但是如果我将文件与 .exe 相关联,它将从它们的目录中调用,而不是从它自己的目录中调用,所以我需要像 How do I get the path of the current executed file in Python? 这样的东西来查找配置文件。

这是最好的方法吗?或者是否有一些标准配置文件位置可供搜索,例如https://stackoverflow.com/a/7567946/125507

【问题讨论】:

    标签: python configuration-files py2exe cx-freeze


    【解决方案1】:

    您可以使用the appdirs module 来确定用户数据的适当文件夹。

    【讨论】:

      【解决方案2】:

      如果这是一个用户应该编辑的配置文件,那么把它放在明显的地方。我倾向于在这样的目录结构中“编译”python 应用程序:

      C:/path/to/Application
      | config.ini
      | Run Application.bat  (runs code/application.exe)
      | code/
        | application.exe
        | library.zip 
        | ... etc. 
      

      这将“启动应用程序”快捷方式和配置文件保持在同一位置,便于用户查找。

      【讨论】:

        【解决方案3】:

        如果您使用 py2exe 来打包脚本,那么按照您的链接指向描述如何使用 determine the path of the executable 的链接似乎是正确的方法。您决定将配置文件相对于 exe 存储在哪里取决于您。您可以将它放在应用程序目录的根目录(exe 旁边)或创建一个配置子目录。这是你的选择。

        在 linux 机器上,有时使用etc/ 位置来存放配置文件是很常见的。在 OSX 中,您可以使用用户 plist 首选项位置等。但同样在任何这些平台中,您也可以在应用程序目录中使用相对 conf 文件。

        如果您正在打包某种类型的 GUI 框架,那么您可以利用注册表并通过您的界面提供配置选项。

        【讨论】:

          【解决方案4】:

          我已经在 widnows 上创建了“已编译”的可执行文件,这些可执行文件具有与之关联的文件类型,而且我在打开与 .exe 位于同一位置的配置文件时从未遇到任何问题。我用这样的东西找到它:

              conf = open(r"%s\settings.conf" % os.getcwd())
          

          我存储的值用换行符分隔,因此文件如下所示:

          PNelson
          21
          6'
          

          这存储了用户名、年龄和身高,以读取我会使用的值:

          settings = "\n".split(conf.read())
          

          然后我会检查数组的长度以确保配置文件没有损坏或以某种方式损坏,如果是,我会将默认值写入文件并使用它们。

          【讨论】:

          • 不,这行不通。 os.getcwd()返回的是双击文件所在的目录,而不是脚本所在的目录。
          • 我想一个标准的地方可能是在 %appdata% 目录中放置这样的东西?
          猜你喜欢
          • 2011-11-25
          • 1970-01-01
          • 2019-07-01
          • 1970-01-01
          • 2014-08-13
          • 1970-01-01
          • 2017-11-19
          • 2011-04-08
          相关资源
          最近更新 更多