ホイールに含まれるファイルをどのように制御しますか? _MANIFEST.in
_は_python setup.py bdist_wheel
_によって使用されていないようです。
[〜#〜] update [〜#〜]:
ソースtarballからのインストールとホイールからのインストールの違いについては間違っていました。ソース配布には_MANIFEST.in
_で指定されたファイルが含まれますが、インストールされたパッケージにはpythonファイルのみがあります。インストールがソース配布経由であるかどうかにかかわらず、インストールする追加ファイルを識別する手順が必要です、卵、またはホイール。つまり、追加のパッケージファイルには package_data が必要であり、コマンドラインスクリプトやシステム構成ファイルなどのパッケージ外のファイルには data_files が必要です。
プロジェクト パッケージをビルドするために_python setup.py sdist
_を使用している場所、含まれるファイルと除外するファイルを制御するために_MANIFEST.in
_を使用する場所、および pyroma と check-manifest 設定を確認します。
私は最近それをデュアルPython 2/3コードに変換し、setup.cfgを追加しました
_[bdist_wheel]
universal = 1
_
_python setup.py bdist_wheel
_を使用してホイールを作成できますが、必要に応じてユニバーサルホイールのように見えます。ただし、_MANIFEST.in
_で指定されたすべてのファイルが含まれているわけではありません。
私はより深く掘り下げ、今ではパッケージングとホイールについてより多くを知っています。私が学んだことは次のとおりです。
2つのパッケージファイルを PyPiのmultigtfsプロジェクト にアップロードします。
multigtfs-0.4.2.tar.gz
_-_MANIFEST.in
_内のすべてのファイルを含むソースtarボール。multigtfs-0.4.2-py2.py3-none-any.whl
_-問題のバイナリ配布。Python 2.7.5)で2つの新しい仮想環境を作成し、各パッケージ(_pip install multigtfs-0.4.2.tar.gz
_)をインストールしました。2つの環境はほぼ同じです。異なる_.pyc
_があります「コンパイルされた」ファイルPythonファイル。ディスク上のさまざまなパスを記録するログファイルがあります。ソースtarボールからのインストールには、フォルダー_multigtfs-0.4.2-py27.Egg-info
_が含まれます。インストール、ホイールインストールには_multigtfs-0.4.2.dist-info
_フォルダーがあり、そのプロセスの詳細が記載されていますが、multigtfsプロジェクトを使用するコードの観点からは、2つのインストール方法に違いはありません。
明示的に、どちらも私のテストで使用される.Zipファイルがないため、テストスイートは失敗します。
_$ Django-admin startproject demo
$ cd demo
$ pip install psycopg2 # DB driver for PostGIS project
$ createdb demo # Create PostgreSQL database
$ psql -d demo -c "CREATE EXTENSION postgis" # Make it a PostGIS database
$ vi demo/settings.py # Add multigtfs to INSTALLED_APPS,
# Update DATABASE to set ENGINE to Django.contrib.gis.db.backends.postgis
# Update DATABASE to set NAME to test
$ ./manage.py test multigtfs.tests # Run the tests
...
IOError: [Errno 2] No such file or directory: u'/Users/john/.virtualenvs/test/lib/python2.7/site-packages/multigtfs/tests/fixtures/test3.Zip'
_
回答からの提案を使用して、いくつかの追加のディレクティブを_setup.py
_に追加しました。
_from __future__ import unicode_literals
# setup.py now requires some funky binary strings
...
setup(
name='multigtfs',
packages=find_packages(),
package_data={b'multigtfs': ['test/fixtures/*.Zip']},
include_package_data=True,
...
)
_
これにより、Zipファイル(およびREADME)がフォルダーにインストールされ、テストが正しく実行されるようになります。提案をありがとう!
package_data
でsetup.py
を使用してみましたか? MANIFEST.in
はpythonバージョン<= 2.6をターゲットにしているようです。上位バージョンでもそれを見ているかどうかはわかりません。
https://github.com/pypa/sampleproject を探索した後、彼らのMANIFEST.in
はこう言います:
# If using Python 2.6 or less, then have to include package data, even though
# it's already declared in setup.py
include sample/*.dat
この方法は時代遅れであると思われます。その間、setup.py
で宣言します:
setup(
name='sample',
...
# If there are data files included in your packages that need to be
# installed, specify them here. If using Python 2.6 or less, then these
# have to be included in MANIFEST.in as well.
package_data={
'sample': ['package_data.dat'],
},
...
)
(MANIFEST.in
でワイルドカードを選択し、setup.py
でファイル名を選択した理由はわかりません。同じファイルを参照しています)
これは、単純であることに加えて、package_data
ルートがMANIFEST.in
メソッドよりも優れていることを暗示しているようです。まあ、あなたが2.6をサポートする必要がない限り、その場合、私の祈りはあなたに行きます。
変更を行う前にMANIFEST.in
またはsetup.py
で、古い出力ディレクトリを削除する必要があります。 Setuptoolsは一部のデータをキャッシュしているため、予期しない結果が生じる可能性があります。
rm -rf build *.Egg-info
これを行わない場合、何も正しく動作しないことを期待してください。
今ではそれは邪魔です。
ソース配布(sdist
)を構築している場合、以下の任意の方法を使用できます。
wheel(bdist_wheel
)を構築している場合、include_package_data
とMANIFEST.in
は無視され、package_data
とdata_files
を使用する必要があります。
これは良いオプションですが、bdist_wheel
はそれを尊重しません。
setup(
...
include_package_data=True
)
# MANIFEST.in
include package/data.json
リポジトリの任意のファイルをsdist
またはbdist_wheel
に追加できるため、これは最も柔軟なオプションです
setup(
....
data_files=[
('output_dir',['conf/data.json']),
]
# For sdist, output_dir is ignored!
#
# For bdist_wheel, data.json from conf dir in root of your repo
# and stored at `output_dir/` inside of the sdist package.
)
上記と似ていますが、bdist_wheel
の場合は、パッケージ内にデータファイルを入れましょう。 sdist
でも同じですが、ファイルはパッケージのサブディレクトリからしか取得できないため、data_files
よりも多くの制限があります。
setup(
...
package_data={'package':'data.json'},
# data.json must be inside of your actual package
)
_package_data
_で_data_files
_と_setup.py
_を使用して追加のファイルを指定できますが、それらは 正しく取得するのはとてつもなく難しい(そしてバグがある) です。
別の方法としては、_MANIFEST.in
_を使用し、_include_package_data=True
_のsetup()
に_setup.py
_を ここに示す として追加することです。
このディレクティブでは、_MANIFEST.in
_を使用して、ソースtarball/Zipだけでなく、wheelおよびwin32インストーラーにも含めるファイルを指定します。これは、任意のpythonバージョン(py2.6からpy3.6のプロジェクトでテスト済み)でも機能します。
data_files ディレクティブを使用して、インストールする追加のファイルを指定できます。それはあなたが探しているものですか?以下に小さな例を示します。
from setuptools import setup
from glob import glob
setup(
name='extra',
version='0.0.1',
py_modules=['extra'],
data_files=[
('images', glob('assets/*.png')),
],
)
JSONファイルを含むconfig /ディレクトリがあり、これをwheelパッケージに追加する必要がありました。そこで、これらの行をMANIFEST.in
に追加しました。
recursive-include config/ *.json
setup.py
への次のディレクティブ:
setup(
...
include_package_data=True,
)
そして、何もうまくいきませんでした。 __init__.py
ディレクトリ内にconfig/
という空のファイルを作成するまで。
(Python 3.6.7、wheel 3.6.7、setuptools 39.0.1)