29

通常の Python モジュールに加えて、/usr/local/lib/python2.7/dist-package/mylibrary に移動する必要があるいくつかのデータ ファイルを含む Python ライブラリがあります。

残念ながら、setup.py に実際にデータ ファイルをインストールするよう説得することはできませんでした。この動作は、sdist ではなく、インストール時に行われることに注意してください。

これは setup.py のわずかに編集されたバージョンです。

module_list = list_of_files

setup(name         ='Modules',
      version      ='1.33.7',
      description  ='My Sweet Module',
      author       ='PN',
      author_email ='email',
      url          ='url',
      packages     = ['my_module'],

# I tried this. It got installed in /usr/my_module. Not ok.

      # data_files   = [ ("my_module",  ["my_module/data1",
      #                                  "my_module/data2"])]

# This doesn't install it at all.
      package_data = {"my_module" : ["my_module/data1",
                                     "my_module/data2"] }
     )

これは Python 2.7 であり (最終的には 2.6 で実行する必要があります)、10.04 から 12+ の間の一部の Ubuntu で実行する必要があります。12.04で現在開発中です。

4

3 に答える 3

24

UPD : package_dataformat で dict を受け入れる{'package': ['list', 'of?', 'globs*']}ため、機能させるには、ディストリビューション ルートに相対的なファイル パスではなく、パッケージ dir に相対的なシェル グロブを指定する必要があります。

data_filesには別の意味があり、一般に、このパラメーターの使用は避けるべきです。

setuptools を使用すると必要なのは だけですがinclude_package_data=True、データ ファイルは setuptools に認識されているバージョン管理システムの下にある必要があります (デフォルトでは、CVS と SVN、インストールsetuptools-git、またはsetuptools-hggit または hg を使用する場合のみを認識します...)


setuptools を使用すると、次のことができます。

- MANIFEST.im:

    include my_module/data*

- setup.py 内:

    setup(
        ...
        include_package_data = True,
        ...
    )
于 2013-05-15T23:53:37.173 に答える
5

http://docs.python.org/distutils/setupscript.html#installing-additional-files

directory が相対パスの場合、インストール プレフィックス (純粋な Python パッケージの場合は Python の sys.prefix、拡張モジュールを含むパッケージの場合は sys.exec_prefix) に対して相対的に解釈されます。

これはおそらくそれを行います:

data_files   = [ ("my_module",  ["local/lib/python2.7/dist-package/my_module/data1",
                                 "local/lib/python2.7/dist-package/my_module/data2"])]

または、join を使用してプレフィックスを追加します。

data_dir = os.path.join(sys.prefix, "local/lib/python2.7/dist-package/my_module")
data_files   = [ ("my_module",  [os.path.join(data_dir, "data1"),
                                 os.path.join(data_dir, "data2")])]
于 2012-06-27T23:27:28.103 に答える