如何在git中组织python项目?

时间:2017-07-15 07:29:59

标签: python git

我有一个带有模块名配置的python项目A,其中包含一个config.yaml文件。 此项目用作其他人根据需要使用和更新config.yaml的模板。 我希望这些用户分叉我的git项目并在他们的fork上进行更新,并且能够在一个可用时获得模板的更新。 但是,我不想覆盖配置文件,因为他们将更改从主项目拉到他们的分支。 怎么解决这个问题?

My_app
  MyConfigModule
     __init__.py
     config_helper.py
     config.yaml
  myAppModule
    __init__.py
    myModule.py

1 个答案:

答案 0 :(得分:0)

首先,单独的代码和配置。整个代码应该驻留在My_app中,用户不会触及,但只有开发人员才会触及,而配置可以位于根目录中。

您可以通过多种方式分离默认配置和实际配置:

拥有默认配置并允许用户设置其本地配置。用户必须自己创建config.yaml文件。例如,bash(和许多其他程序)从/etc/bash.bashrc读取其配置,然后从~/.bashrc更新。这种方法的缺点是您需要实现配置合并机制。如果配置的某些部分是相当静态/复杂的(例如,程序设置或转换规则),这是一个好主意,但另一部分通常需要被覆盖(用户名/电子邮件地址)。

要求用户config.default.yaml复制到config.yaml 。在程序安装或运行时,如果config.yaml不存在,您可以抛出错误,解释如何复制,静默回退到默认配置,或将默认配置复制到config.yaml,然后继续。您可以将大量文档放入默认配置中,但缺点是配置文件很长。例如,php's default configuration长度为2000行。

提示用户输入最重要(或所有)配置选项并编写一个小配置文件,如debian的debconf。如果您的程序具有交互式UI,这是一个好主意。


您可以混合这些选项,例如提示用户选择最重要的选项并依赖默认配置,或者在提示用户后稍作修改即可复制长默认配置。

在所有这些情况下,您希望在gitignore中包含config.yaml而不是选中。如果您希望用户,则应将默认配置文件放在存储库的顶层手动复制。