web-dev-qa-db-ja.com

バージョン番号をPipfileに固定しないのはなぜですか?

私はpipenvの使用とドキュメントのここを探しています
https://pipenv.readthedocs.io/en/latest/basics.html#importing-from-requirements-txt

(強調鉱山)と言う

要件ファイルをインポートする場合、バージョン番号が固定されていることが多いため、不要になる可能性が高いことに注意してください

どうしてこれなの?

Pipfile.lockファイルには、インストールする依存関係の特定のバージョンとハッシュが保存されることを理解していますが、Pipfileにインストールされているものの特定のバージョンを表示したくないのですか? (requirements.txtを使用するときと同じ方法ですか?)

16
w--

ドキュメントは、要件ファイルにバージョンを固定した可能性の高い理由について非常に意見が多く、おそらく_pip freeze > requirements.txt_に由来します。

もちろん、Pipfileの一部またはすべてのバージョン範囲を指定する必要があります。多くの人が_requirements.txt_に固定しているのは、それが一種の_Pipfile.lock_、直接的な依存関係でもないパッケージのバージョンを指定します。当然、この慣習に従わなかった場合、その警告について心配する必要はありません。

これは、Kenneth Reitz(Pipenvの作成者)自身が以前にそれを行った結果である可能性が非常に高いです。彼のブログ投稿 A Better Pip Workflow で述べています。この問題についての明確化は、公式の リポジトリ で既に彼によって尋ねられ、回答されています。

2018年6月更新

そのメッセージはpipenvコマンドでも警告として出力されていましたが、次のように置き換えられました

_requirements.txt found, instead of Pipfile! Converting…
Warning: Your Pipfile now contains pinned versions, if your requirements.txt did.
We recommend updating your Pipfile to specify the "*" version, instead.
_

少し友好的ですが、Pipfileにバージョンを固定することは理想的ではないと暗黙に言っていると思いますが、これは真実ではありません。まったく問題ありません。

8
villasv

以前はどのようなケースだったのかわかりませんが、 最新のドキュメント は、パッケージをインストールするときに、次のようにパッケージのバージョン番号を指定できることを示しています。

pipenv install requests==2.13.0

これにより、Pipfileのパッケージも更新され、次のようなバージョン番号が含まれます。

requests = "==2.13.0"

これは、バージョン番号を指定するパッケージごとに実行できます(以前にインストールしたことがある場合も含む)。

これを行うためにPipfileを手動で編集できるかもしれませんが、それが正しいかどうかはわかりません。

6
dspacejs

pipfileにインストールされているものの特定のバージョンを見たいと思いませんか?

ロックファイルは、実際にインストールされているものを追跡するためのものであり、確定的なビルドを生成するための鍵です。 Pipfile.lockは、Pipfileとともにプロジェクトにコミットすることを目的としています。理想的なワークフローは、「pipenv lockを使用して開発環境の依存関係をコンパイルし、コンパイル済みのPipfile.lockをすべての実稼働環境に展開して再現可能なビルドを作成する」という考え方もあります。

Pipfileで指定するいくつかのバージョン。たとえば、特定のメジャーバージョン以下のDjangoのすべてのバージョンは、良いアイデアです。

また、現在のところ、pipenvはまだ活発に開発されているため、これらのアイデアの一部はまだ解決されていることを理解してください。いくつかの変更がある可能性があります。

2
Hemm