如何通过setuptools或distutils安装Python软件包后访问可编辑的配置文件?

时间:2016-11-23 17:43:13

标签: python configuration setuptools packaging distutils

如何允许使用'python setup.py install'安装的软件包访问外部配置文件?

我目前正在尝试使用distutils / setuptools为RHEL安装Python包。这个Python包最初是以这样一种方式编写的,它作为一组脚本运行,需要文件系统访问各种配置文件,日志等。现在我正在尝试用这个设置创建一个可安装的包,我难以与文件系统交互必要的文件。

这些文件应该是可编辑的。除基本问题外,此类行为的最佳做法是什么?即管理通过setuptoolsdistutils安装的Python包配置的最佳实践是什么,以及这些包与文件系统交互。我假设这个硬币有两半:在安装方面配置文件的位置,并访问代码实现方面的信息。任何有关优化这两个方面的建议都将不胜感激。

其他信息:

安装软件包后,我基本上需要访问“config”目录。 'config'目录的位置可以是文件系统上的任何位置(用户有权限),并且在安装包之前本身应该是可配置的。该项目看起来像这样:

  • 项目/
    • 主/
      • __初始化__。PY
      • script1.py
      • script2.py
      • service.py(Flask网络服务运营商)
      • ...与上面交互的其他python文件
    • 配置/
      • 子目录/
        • 子目录/
          • config_file.ini
      • 子目录/
        • ...
      • ...
    • 日志/
      • log_file.log

1 个答案:

答案 0 :(得分:1)

您可以使用data_files option in distutils安装数据文件。但是,distutils / setuptools在处理配置文件时的范围非常有限。您只能指定安装这些文件的相对绝对路径,并且没有选项可以使此安装位置可由用户配置。

处理安装和读取配置文件的最佳做法?我不认为有任何被规范地视为"最好的"。 distutils在它能做的事情上是非常有限的,因此不会遇到很多用例。您基本上只能以任何方式处理配置文件。

如果要在安装之前配置配置文件的位置,则需要提供比distutils更多的功能。一些可能的方法来解决这个问题:

  1. 将代码添加到setup.py脚本中以处理此问题。 setup.py可以处理任意Python代码,因此它可以扩展到所需的setup()调用之外,以执行您需要的任何操作。但是,这样做被认为是意外和非标准的。在像setuptools和pip这样的工具之前的日子里,包有时会有一个交互式提示会询问用户安装输入。但是,当通过自动安装(如pip或easy_install)安装该软件包时,这会中断。

  2. 编写您自己的安装程序。这将处理安装配置文件的位置的详细信息,并在幕后安装Python软件包。

  3. 在Linux环境中,Buildout工具可以为此提供帮助。这将要求用户安装Buildout,然后使用配置文件位置编辑buildout.cfg配置文件。它可以是一种管理应用程序配置的有用方法,但它确实需要执行安装的人安装Buildout并编辑基于bulidout的配置文件。这方面的一个例子是Plone项目,该项目具有复杂且可配置的安装过程,Buildout用于管理此过程。