43

我怎么能这样写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'注释掉与否都无济于事。

4

1 回答 1

21

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

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

非包数据文件

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

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

于 2012-11-20T15:33:28.270 回答