web-dev-qa-db-ja.com

Python setuptools:<prefix> / etcに配布するための設定ファイルを含める方法

setup.py そのため:

  1. バイナリの卵の分布(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'コメントアウトされているかどうかは役に立ちません。

35
Victor Olex

私はこの問題についていくつかの調査をしており、その答えはsetuptoolsのドキュメントにあると思います: http://peak.telecommunity.com/DevCenter/setuptools#non-package-data-files

次に、答えがあると思う抜粋を引用します。

非パッケージデータファイル

Distutilsは通常、一般的な「データファイル」をプラットフォーム固有の場所(例:/ usr/share)にインストールします。この機能は、ドキュメント、サンプル設定ファイルなどに使用することを目的としています。ただし、setuptoolsはこれらのデータファイルを別の場所にインストールしません。これらは、Pythonモジュールおよびパッケージと共に)Eggファイルまたはディレクトリ内にバンドルされています。データファイルには、Resource Management API [...]を使用してアクセスすることもできます。

ちなみに、このデータファイルのカプセル化は、ユーザーのマシンの任意の場所にデータファイルを実際にインストールできないことを意味します;これは機能であり、バグではありません。ドキュメントまたはデータファイルをユーザーの指定した場所に抽出およびコピーするスクリプトを、ディストリビューションにいつでも含めることができます。関連するデータファイルを単一のディレクトリに配置する場合は、resource_filename()をディレクトリ名とともに使用して、shutilモジュールでコピーできるファイルシステムディレクトリを取得できます。 [...]

17
Akhorus