使用配置文件打包 Python 应用程序

2024-01-06

我正在使用 ConfigParser 来配置我的应用程序,现在我想让它易于分发,同时保留可配置性。

我想我需要一个包含配置文件模板的目录,以及一些生成配置以实际使用的方法。然后我需要一个可以在 virtualenv、用户主目录等中工作的地方来存储它。我希望它与普通 Unix 包的工作方式尽可能接近,即在 etc 中进行配置,但在主目录中进行覆盖。是否有现成的解决方案,如果没有,我应该在 setup.py 等中放入什么以使其按我想要的方式工作?


您可以使用data_files http://docs.python.org/distutils/setupscript.html#installing-additional-files的选项distutils将文件安装到任何您想要的位置。

data_files指定一个序列(directory, files)按以下方式配对:

setup(...,
      data_files=[('/etc', ['cfg/config1.ini', 'cfg/config2.ini']),
                  ('/etc/init.d', ['bin/initscript1'])],
      ....
     )

当读取应用程序上的配置文件时,您可以合并/home版本(如果存在),使用.read()的方法ConfigParser objects http://docs.python.org/library/configparser#ConfigParser.RawConfigParser.read:

files_read = cfgparserobj.read(['/etc/config1.ini', 
                                os.path.expanduser('~/.config1.ini')])
for fname in files_read:
    print "Reading config from", fname

那会读到/etc/config1.ini然后用来自的东西覆盖定义.config1.ini在用户的主目录中(如果存在)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用配置文件打包 Python 应用程序 的相关文章

随机推荐

  • 什么是 CMAKE_BUILD_TYPE:调试、发布、RelWithDebInfo 和 MinSizeRel?

    来自文档页面 https cmake org cmake help latest variable CMAKE BUILD TYPE html CMAKE BUILD TYPE 指定单配置生成器的构建类型 这静态指定将在此构建树中构建什么构
  • 使用 UrlRewriter.NET 的外部配置文件

    我正在使用网址重写器 NET http urlrewriter net为我的 asp net 网站实现 url 重写的库 目前正在从以下位置读取重写规则web config像这样的文件
  • 想要用java查找两个文本文件的内容差异

    我有两个文本文件 a txt b txt 每个文本文件都包含一些文件路径 b txt包含的文件路径多于a txt 我想确定添加哪些路径以及从中删除哪些路径a txt以便它对应于路径b txt 例如 abc txt 包含 E Users Do
  • 在 OS X Yosemite 上安装 Compass

    我正在尝试使用 GEM 安装指南针 但出现很多错误 我的 MacBook Pro 运行的是 OS X Yosemite 有人有同样的问题吗 感谢您的时间 祝你今天过得愉快 sudo gem install compass Password
  • 从 Gridfs 读取 chunk 并转换为 Buffer

    我有一个关于缓冲区的问题 这是我的代码 var Grid require gridfs stream var mongodb require mongodb var gfs Grid db mongodb var deferred Q de
  • WPF使用Canvas作为ImageSource

    我是 WPF 新手 正在尝试构建一个带有工具栏和图标的基本应用程序 我正在测试 Infragistics 的 XamRibbon 和ButtonTool功能区上显示的要求ImageSource显示这样的图像
  • 将 Microsoft 调试器与 Xamarin Android 结合使用

    Android 项目设置中有一个选项安卓选项部分关于包装选项卡可让您在 Xamarin 调试器或 Microsoft 调试器之间进行选择 Xamarin 调试器可以工作 但不如 Microsoft 的调试器好 不幸的是 当我尝试使用 Mic
  • 格式化掷骰子输出 Java

    我创建了一个代码 用户输入掷骰子的次数 然后程序输出面孔值 每张面孔出现的次数以及每张面孔出现的百分比频率 我必须使用 System out printf 来格式化输出 我的问题是 每当我输入超过 9 的卷时 我的输出格式就会完全丢失 这是
  • Java中HashMap的字面声明[重复]

    这个问题在这里已经有答案了 In JavaScript 您可以声明 a 的所有键和值组合JSON一次性对象如下 var myJSON key1 value 1 key2 value 2 key3 value 3 key4 value 4 k
  • 初学者 URL 重写 htaccess

    我只想重写来自以下位置的所有请求 http example com products product cfm id product name to http example com products product name 其次 http
  • Netbeans 和 MinGW-w64

    我正在尝试在 win7 64 位上配置我的 NetBeans 以与 MinGW w64 一起使用 所以我将编译器的以下路径放入 PATH 变量中 C mingw w64 bin i686 mingw binC minGw MSYS msys
  • 移位和二元按位运算符适用于布尔参数

    Python 文档转移操作 http docs python org 3 3 reference expressions html shifting operations and 二进制按位运算 http docs python org 3
  • 为什么 JVM 参数以“-D”开头?

    为什么我们需要在 JVM 参数前加上前缀 D例如从命令行运行 jar 时 例如 java jar DmyProp Hello World myProgram jar 用于运行myProgram jar与系统参数myProp 那么为什么领先
  • 将值合并到数组中

    我遇到的情况是 我必须手动将标签与值合并 然后存储在数组中 例如aaa 10 bbb 20 ccc 30 这些值来自文本字段 最后我必须以这种格式提供 用逗号分隔 标签是硬编码的 如何创建这样的数组或字符串aaa 10 bbb 20 ccc
  • 安装框架(问题 cURL 错误 6:无法解析主机:cache-proxy)

    我尝试安装 api platform https api platform com docs distribution https api platform com docs distribution 启动后我在日志中看到 api plat
  • 分析我的程序的时间复杂度

    我在确定算法的时间复杂度时遇到问题 for int i 0 i
  • 使用XElement保存XML文件时,文件的对齐方式也会发生变化,如何避免?

    我在用 XElement root XElement Load filepath 加载 XML 文件 然后找到我需要的东西 IEnumerable
  • GitKraken 启用长路径的 .git 配置文件在哪里

    到目前为止 我已经从命令行运行程序和 GitHub Desktop 使用了 Git 我尝试使用 GitKraken 但它有一个很大的问题 我有一个存储库 它有真正的嵌套文件夹 超过了 256 个长度 这个问题很容易用 Git 和 GitHu
  • 在枚举内部提供函数是否被认为是“干净的”?

    我在源代码中发现了一些代码 这些代码基本上使用 switch case 来遍历枚举的每个可能值 并调用根据数据类型返回 Number 对象的适当函数 这是一个片段 case TYPE 16BIT SIGNED BE measurement
  • 使用配置文件打包 Python 应用程序

    我正在使用 ConfigParser 来配置我的应用程序 现在我想让它易于分发 同时保留可配置性 我想我需要一个包含配置文件模板的目录 以及一些生成配置以实际使用的方法 然后我需要一个可以在 virtualenv 用户主目录等中工作的地方来