Python setuptools:如何包含配置文件以分发到<prefix> / etc </prefix>

时间:2012-05-04 21:20:40

标签: python setuptools

如何撰写setup.py以便:

  1. 二元蛋分发(bdist_egg)包含一个示例配置文件和
  2. 安装后将其放入{prefix}/etc目录?
  3. 示例项目源目录如下所示:

    bin/
       myapp
    etc/
       myapp.cfg
    myapp/
        __init__.py
        [...]
    setup.py
    

    setup.py看起来像这样:

    from distutils.command.install_data import install_data
    
    packages = ['myapp', ]
    scripts = ['bin/myapp',]
    cmdclasses = {'install_data': install_data}
    data_files = [('etc', ['etc/myapp.cfg'])]
    
    setup_args = {
        'name': 'MyApp',
        'version': '0.1',
        'packages': packages,
        'cmdclass': cmdclasses,
        'data_files': data_files,
        'scripts': scripts,
    #    'include_package_data': True,
        'test_suite': 'nose.collector'
    }
    
    try:
        from setuptools import setup
    except ImportError:
        from distutils.core import setup
    
    setup(**setup_args)
    

    setuptools安装在构建环境和安装环境中。

    'include_package_data'是否已注释无效。

1 个答案:

答案 0 :(得分:14)

我正在就此问题进行一些研究,我认为答案在setuptools文档中:http://peak.telecommunity.com/DevCenter/setuptools#non-package-data-files

接下来,我引用我认为有答案的摘录:

  

非包数据文件

     

distutils通常会将常规“数据文件”安装到a   特定于平台的位置(例如/ usr / share)。此功能旨在   用于文档,示例配置文件之类的内容,   等等。 setuptools不会在a中安装这些数据文件   但是,单独的位置。它们捆绑在egg文件中或   目录,以及Python模块和包。数据文件   也可以使用资源管理API [...]

进行访问      

顺便说一句,请注意,这种数据文件的封装意味着你   实际上无法将数据文件安装到某个任意位置   用户的机器;这是一个功能,而不是一个bug。你总是可以包括一个   您的发行版中的脚本,用于提取和复制您的   文档或数据文件到用户指定的位置   自由裁量权。如果您将相关数据文件放在一个目录中,那么   可以使用resource_filename()和目录名来获取   文件系统目录,然后可以使用shutil模块进行复制。   [...]