[解決済み] ホイールにファイルを追加する方法を教えてください。
質問
ホイールに含まれるファイルをどのように制御するのですか。 それは
MANIFEST.in
は使われないようです。
python setup.py bdist_wheel
.
アップデイト :
ソースtarballからインストールする場合とwheelからインストールする場合の違いについて、私は勘違いしていました。 ソース配布物には
MANIFEST.in
で指定されたファイルを含みますが、インストールされたパッケージには python ファイルしかありません。 インストールがソースディストリビューション、egg、wheelのいずれであっても、インストールすべき追加のファイルを特定するための手順が必要です。 すなわち
パッケージ_データ
は追加のパッケージファイルに対して必要であり
データファイル
は、コマンドラインスクリプトやシステム設定ファイルのようなパッケージ外のファイルに対して必要です。
オリジナルの質問
私は
プロジェクト
を使用しています。
python setup.py sdist
を使ってパッケージをビルドしています。
MANIFEST.in
で含まれるファイルや除外されるファイルを制御し
パイロマ
と
チェック・マニフェスト
を実行して、設定を確認します。
最近、Python 2 / 3 のデュアルコードに変換し、setup.cfg に
[bdist_wheel]
universal = 1
で車輪を作ることができる。
python setup.py bdist_wheel
でホイールを構築することができ、希望通りのユニバーサルホイールに見えます。 しかし、それは
MANIFEST.in
.
何がインストールされるの?
私はさらに深く掘り下げ、今ではパッケージングとホイールについてより多くを知っています。 以下は私が学んだことです。
私は2つのパッケージファイルを プロジェクトにアップロードします。 :
-
multigtfs-0.4.2.tar.gz
- にあるすべてのファイルを含むソース tar ball です。MANIFEST.in
. -
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 ball からインストールした場合、フォルダ
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.
include_package_data=True,
package_data={
'sample': ['package_data.dat'],
},
...
)
(でワイルドカードを選択した理由はよくわかりません)。
MANIFEST.in
でファイル名を
setup.py
. これらは同じファイルを参照しています)
これは、より単純であることに加えて、またもや
package_data
ルートが
MANIFEST.in
メソッドよりも優れています。まあ、2.6 をサポートする必要がなければの話ですが、その場合、私の祈りはあなたに届きます。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] setuptools/distutilsでパッケージデータをインクルードするには?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?