【问题标题】:Python setuptools: how to include a config file for distribution into <prefix>/etcPython setuptools:如何将配置文件包含在 <prefix>/etc 中进行分发
【发布时间】:2012-05-14 10:30:31
【问题描述】:

我怎么写setup.py 这样:

  1. 二进制 egg 发行版 (bdist_egg) 包括一个示例配置文件和
  2. 安装后放入{prefix}/etc目录?

示例项目源目录如下所示:

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' 注释掉与否没有帮助。

【问题讨论】:

    标签: python setuptools


    【解决方案1】:

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

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

    非包数据文件

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

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

    【讨论】:

    • 为什么它是一个特性,而不是一个错误?
    • @Flimm ,这是一个功能,因为它旨在像那样工作。 API 专为呈现此类行为而设计。它甚至被记录并正确解释。 bug 是计算机程序或系统中的错误、缺陷、错误、失败或故障,会产生不正确或意外的结果,或导致其以非预期方式运行。
    • 我的意思是,他们为什么打算这样工作?在我看来,人们希望能够将数据文件安装到用户机器上的任意位置。
    • @Flimm resource_filename() api 为不允许应用程序将其文件安装到任意位置的平台提供了更大的灵活性。它还允许将所有内容打包到一个单独的 egg 文件中,并根据需要对数据文件进行解压缩。
    • @Flimm 我们经常将安全措施造成的不便视为错误。我们还认为缺乏安全性是一个错误。也就是说...正如您从docs.python.org/2/distutils/… 中看到的那样,该功能/错误已被消除。恭喜,当受害者 pip 安装您的 json 库时,您现在可以替换受害者“/bin/bash”。 ;-)
    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2020-08-20
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多