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 ファイルまたはディレクトリ内にバンドルされています。データ ファイルには、Resource Management API を使用してアクセスすることもできます [...]

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

于 2012-11-20T15:33:28.270 に答える