以下は、コード以外のものを削除した、削除されたsetup.pyスクリプトです。
#!/usr/bin/env python
from distutils.core import setup
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = ['whyteboard', 'whyteboard.gui', 'whyteboard.lib', 'whyteboard.lib.pubsub',
'whyteboard.lib.pubsub.core', 'whyteboard.lib.pubsub.utils', 'whyteboard.misc'],
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
MANIFEST.in:
include *.txt
include whyteboard-help/*.*
recursive-include locale *.mo
recursive-include images *.png
「python setup.py install sdist」を実行すると、「whyteboard-0.41」ルートフォルダーと、locale/images /およびwhyteboard-help /フォルダーが含まれたNice .tar.gzが取得されます。これには、whyteboardソースパッケージ内からプログラムを起動するwhyteboard.pyスクリプトも含まれています。
そう:
whyteboard/
├── locale/
├── images
├── whyteboard-help/
├── whyteboard/
│ ├── __init__.py
│ └── other packages etc
├── whyteboard.py
├── README
├── setup.py
└── CHANGELOG
これは私のプログラムのソースを反映し、すべてがどうあるべきか、そして正しいことです。
しかし、「python setup.py install」を実行すると、データファイルは一切書き込まれません-「whyteboard」ソースパッケージのみが、whyteboard.pyは/usr/local/lib/python2.6/dist-packages/に配置されます。
理想的には、.tar.gzファイルで生成されたものと同じディレクトリ構造をdist-packagesに作成したいと思います。これは私のプログラムがリソースを探すことを期待する方法です。
このディレクトリ構造を作成するために「インストール」を取得するにはどうすればよいですか?私の知る限り、マニフェストファイルを無視しているようです。
なぜMANIFEST.in
を実行したときにファイルが無視されていたpython setup.py install
-include_package_data=True
は問題を解決します。 package_data
オプションは実際には必要ありません。
python 2.6.1をMac OSXで実行すると、setup.pyでdata_filesパラメーターを使用する以外、運がまったくありませんでした。MANIFEST.inのすべてが単純にファイルになりました他のいくつかのパッケージをチェックしたところ、実際に追加のファイルを指定するためにdata_filesを使用していました。
のディレクトリツリーからすべてのファイルを列挙するのに役立つ短い関数を作成しました
(target_dir、[file list]) data_filesが期待する形式:
def gen_data_files(*dirs):
results = []
for src_dir in dirs:
for root,dirs,files in os.walk(src_dir):
results.append((root, map(lambda f:root + "/" + f, files)))
return results
これで、セットアップコール内でこれを呼び出すことができます。
setup(... data_files = gen_data_files("docs", "lib") ...
そして、それらのツリーのすべてがインストールされます。
Setuptoolsを使用する必要があります。
#!/usr/bin/env python
from setuptools import setup, find_packages
from whyteboard.misc import meta
setup(
name = 'Whyteboard',
version = meta.version,
packages = find_packages(),
include_package_data=True,
py_modules = ['whyteboard'],
scripts = ['whyteboard.py'],
)
これは実際にMANIFESTファイルを使用してジョブを実行しているわけではありませんが、必要なすべてのファイルが含まれています。