web-dev-qa-db-ja.com

setup.pyがデータファイルをインストールしない

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

残念ながら、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に開発しています。

22
Paul Nathan

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

ディレクトリが相対パスの場合、インストールプレフィックス(純粋な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")])]
4
monkut

[〜#〜]更新[〜#〜]package_data形式のdictを受け入れます{'package': ['list', 'of?', 'globs*']}、それを機能させるには、配布ルートからのファイルパスではなく、パッケージディレクトリからのシェルグロブを指定する必要があります。

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,
        ...
    )
18
podshumok

次の解決策は私にとってうまくいきました。 setup.pyがあるMANIFEST.inファイルが必要です。

マニフェストファイルに次のコードを追加します

recursive-include mypackage *.json *.md # can be extended with more extensions or file names. 

別の解決策は、次のコードをMANIFEST.inファイルに追加することです。

graft mypackage # will copy the entire package including non-python files. 
global-exclude __pyache__ *.txt # list files you dont want to include here. 

これで、pip installを実行すると、必要なすべてのファイルが含まれます。

お役に立てれば。

更新:セットアップファイルにinclude_package_data=Trueがあることを確認してください

0
user3108764