PipfileとPipfile.lockはどのように使用されますか?


131

Pipfile / Pipfile.lockは、Pythonパッケージングのコンテキストでは、requirements.txtの代替となるように意図されているようです。ただし、これらが実際にどのように機能するかについてのドキュメントはあまりありません。ここで PythonウェブサイトのPyPiセクションでpipfileの進化する説明を見つけましたが、それはかなり面倒で、ファイルのさまざまなセクションのセマンティクスを説明していません。

これらのファイルを理解するための指針はありますか?


2
これは、直接の類縁体であるGemfileGemfile.lockRubyの世界から:.lockファイルには、各依存関係のための特定のバージョンを持っています。その拡張子のないものは、既知の制御人間バージョンのみを持っています。そうは言っても、まだ発展途上で、明確に定義されていない標準化から遠く離れた何かについての説明を求めるのは、おそらく時期尚早です。
Charles Duffy

(同様に、との違いPipfileとはrequirements.txtすなわち、旧試みはRubyの世界から機能を採用することを主としている。複数の環境のための条件/オプションの/ etcと依存セットを指定することができるという。単一ファイル内)。
Charles Duffy

1
Herokuの「Python 入門」リポジトリ(github.com/heroku/python-getting-started.git)にすでにデプロイされているようで、製品化されているようです。
Stephen

ゴッチャ。つまり、ドキュメントは私にはかなり堅固に見えます。私はそれらを単に言い換えているだけではない答えで何を書けばいいのかわかりません。
Charles Duffy

1
OPで作成したリンクを参照している場合、省略されていることがいくつかあります。たとえば、ソースと呼ばれるセクションに何かが存在するというのは実際にはどういう意味ですか。
Stephen

回答:


165

RubyのバンドラーまたはノードのNpmについてある程度理解している場合、これらのファイルの背後にある概念は、他の既存のツールと同様でシンプルです。Pipenvこれらの目標を達成するためにPipfileおよびPipfile.lockファイルを使用するパッケージおよび仮想環境管理ツールです。

Pipenvは、1つのデフォルトの標準的な方法で仮想環境を処理します(アクティブ化と非アクティブ化は不要です)。以下、始めるためのいくつかの基本事項、詳細についてはpipenvのWebサイトを参照してください。

入門

プロジェクトフォルダータイプでpipenvの使用を開始するのは簡単です...

$ pipenv install

...すでにrequirements.txtファイルがある場合Pipfileは、要件と仮想環境フォルダーを含むPipfileファイルを生成します。それ以外の場合は、空のファイルを生成します。インストールしたものが気に入らなかった、または気が変わった場合は、次のように入力してください...

$ pipenv uninstall <package>

...そして、あなたは行ってもいいです。pipenvがすでに生成している仮想環境をアクティブ化するには、次のようにします...

$ pipenv shell

...仮想環境がアクティブになります。環境から離れるには...

$ exit

...そして、元のターミナルセッションに戻ります。

ピップファイル

Pipfileのファイルは、両方の開発と実行に、Pythonアプリケーションやライブラリのパッケージ要件を指定することを意図しています。あなたは単に使用してパッケージをインストールすることができます...

$ pipenv install flask

...展開と実行の依存関係として、または...を使用して追加されます

$ pipenv install --dev pytest

...そして、それは開発時間の依存関係として使用されます。次のように、ファイルの構文は非常に単純です。

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lockは、内のパッケージの存在に基づいて、指定することを意図しているPipfile自動的に相互依存のパッケージをアップグレードして、プロジェクトの依存関係ツリーを破壊するリスクを回避、これらの特定のバージョンを使用する必要があります。

次を使用して、現在インストールされているパッケージをロックできます...

$ pipenv lock

...そして、ツールは仮想環境フォルダーを検索して、現在インストールされているバージョンに基づいて、自動的にロックファイルを生成します。ファイルの構文はPipfileほど明確ではないため、簡潔にするために、ここでは表示しません。


これは興味深い答えですが、私が尋ねたとき[[source]]、実際にが何を意味するのかを十分に理解できなかったと思います。たとえば、pipenvなどによってダウンロードされるパッケージのソースはどうでしょうか。2つのファイルの残りの部分は十分に明白だと思います。
スティーブン

1
[package] / [dev-package]の違いが重要かどうか、またはすべてを[package]に入れるかどうかを決定する必要があるチュートリアルに取り組んでいるので、私は認めます。(このためにグーグルすることがこのページに私を導いたものです。)しかし、両方を開発パッケージに入れて[パッケージ]に入れると、私は一種の感動を与えました。なぜリクエストが[package]にあるべきかがわかりました。
Al Sweigart

1
要求に応じて、開発パッケージでの混乱を避けるために変更しました。コメントをありがとうございます。混乱を防いでください:)
danieldeveloper001 '21

1
ほとんどのパッケージはにスターが付けられているバージョンであるため、ソースコードの進化に沿ってパッケージのバージョンを追跡したい場合、それは良い考えだと思いますPipfile。パッケージのアップグレードで何か問題が発生した場合は、パッケージのバージョン履歴を確認することで修正できるはずです。実際、リクエストライブラリの作成者の1人は、ここでそれを行うことを推奨しています
danieldeveloper001 2018

1
@Stephen、それは実際には逆です。pipenvインストールドキュメントで述べられているように、--skip-lockフラグを指定して、Pipfile.lockファイルを強制的に使用するのではなく、ファイルを無視するように強制できます;)
danieldeveloper001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.