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に開発しています。
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")])]
[〜#〜]更新[〜#〜]:package_data
形式のdictを受け入れます{'package': ['list', 'of?', 'globs*']}
、それを機能させるには、配布ルートからのファイルパスではなく、パッケージディレクトリからのシェルグロブを指定する必要があります。
data_files
の意味は異なります。一般に、このパラメーターの使用は避けてください。
Setuptoolsを使用すると、必要なのはinclude_package_data=True
ただし、データファイルはsetuptoolsで認識されているバージョン管理システムの下にある必要があります(デフォルトでは、CVSとSVNのみを認識します。インストールsetuptools-git
またはsetuptools-hg
gitまたはhgを使用する場合...)
setuptoolsでできること:
-MANIFEST.im内:
include my_module/data*
--setup.py内:
setup(
...
include_package_data = True,
...
)
次の解決策は私にとってうまくいきました。 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
があることを確認してください