[解決済み] pip requirements ファイルと setup.py の install_requires はいつ使い分けるのか?
質問
私はいくつかのPythonライブラリをパッケージ化してインストールするためにvirtualenvでpipを使用しています。
私がやっていることは、かなり一般的なシナリオだと想像しています。 私は、依存関係を明示的に指定することができるいくつかのライブラリのメンテナです。 私のライブラリのいくつかは、私がコントロールできない推移的依存性を持つサード パーティ製ライブラリに依存しています。
私が実現しようとしているのは
pip install
を使用して、上流の依存関係をすべてダウンロード/インストールすることです。 pip のドキュメントで苦労しているのは、以下の場合/方法です。
要件ファイル
はそれ自体でこれを行うことができるのか、それとも本当に
install_requires
.
私は
install_requires
を使用して依存関係とバージョン範囲を指定し、競合を解決するため、および/または本番ビルド用にそれらをフリーズするために要件ファイルを使用するだけでしょうか?
私が架空の世界に住んでいて (わかってる、わかってる)、私の上流の依存関係は単純で、決して衝突したり後方互換性を壊したりしないことが保証されていると仮定しましょう。私は、pip requirements ファイルをまったく使用しないか、または、pip/setuptools/distribute に、すべてのインストールを
install_requires
?
ここには似たような質問がたくさんありますが、いつどちらかを使うか、あるいは両方を調和させて使うかといった基本的なものは見つかりませんでした。
どのように解決するのですか?
私の哲学は
install_requires
は最低限必要なものを示すべきだということです。 それは、もし
を知っている
しかし、確信が持てない場合は、バージョン要件を持つべきではありません(例えば、依存関係の将来のリリースがあなたのライブラリを破壊するかどうか確信が持てない場合)。
一方、要件ファイルでは、あなたが知っていることを示すべきです。 する を示すべきであり、あなたが推奨するオプションの依存関係を含むことができます。 例えば、あなたは SQLAlchemy を使っているが、MySQL を推奨しているので、MySQLdb を要件ファイルに入れるかもしれません)。
というわけで、まとめると
install_requires
は、うまくいかないとわかっているものから人々を遠ざけるためのものであり、一方、要件ファイルは、うまくいくとわかっているものへと人々を導くためのものです。 この理由の1つは
install_requires
要件は
常に
をチェックし、パッケージのメタデータを実際に変更しない限り無効にすることはできません。 そのため、新しい組み合わせを簡単に試すことはできません。 要件ファイルはインストール時にのみチェックされます。
関連
-
[解決済み] ローカルディレクトリからrequirements.txtファイルに従ってpipを使用してパッケージをインストールするにはどうすればよいですか?
-
[解決済み] pipと要件ファイルを使って、特定のパッケージをアップグレードするにはどうすればよいですか?
-
[解決済み] setuptools setup.py ファイルの install_requires kwarg 用の requirements.txt を参照する。
-
[解決済み】最小と最大のバージョン範囲を持つパッケージをpipでインストールする方法は?
-
[解決済み] PythonプロジェクトにMANIFEST.inは必要ですか、そして何を入れるべきですか?
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
最新
-
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 setup.py ファイルの install_requires kwarg 用の requirements.txt を参照する。
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?