GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

jazzband

pip-tools – 固定されたPython依存関係を新鮮に保つためのツールセット

投稿日:

固定されたPython依存関係を新鮮に保つためのツールセット。

pip-tools = pip-compile + pip-sync

pipベースのパッケージを固定しているときでも、 pipベースのパッケージを新鮮に保つのに役立つ一連のコマンドラインツール。 あなたはそれらをピン止めしますよね?

インストール

Pythonプロジェクトの環境ツール( pip似ていpip )の一環として、各プロジェクトの仮想環境に pip-toolsをインストールすることをお勧めします

$ source /path/to/venv/bin/activate
(venv)$ pip install pip-tools

:残りのすべてのコマンド例は、プロジェクトの仮想環境を有効にしたことを前提としています。

pip-compile使用例

setup.py要件

あなたがFlaskプロジェクトを持っていて、それを生産のためにピン止めしたいとします。 install_requires=['Flask']を持つsetup.pyをお持ちの場合は、引数なしでpip-compileを実行してください:

$ pip-compile
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements.txt setup.py
#
click==6.7                # via flask
flask==0.12.2
itsdangerous==0.24        # via flask
jinja2==2.9.6             # via flask
markupsafe==1.0           # via jinja2
werkzeug==0.12.2          # via flask

pip-compileは、すべてのFlask依存関係(およびすべての基本依存関係)が固定されたrequirements.txtを生成します。 requirements.txtをバージョン管理下に置くべきです。

setup.pyなし

setup.py使用しない場合( 簡単に書くことができます)、Flaskの依存関係を宣言するためのrequirements.inファイルを作成することができます:

# requirements.in
Flask

今度は、 pip-compile requirements.in実行してください:

$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements.txt requirements.in
#
click==6.7                # via flask
flask==0.12.2
itsdangerous==0.24        # via flask
jinja2==2.9.6             # via flask
markupsafe==1.0           # via jinja2
werkzeug==0.12.2          # via flask

そして、それはあなたのrequirements.txtを生成し、すべてのFlask依存関係(およびすべての基礎となる依存関係)が固定されます。 requirements.inrequirements.txt両方をバージョン管理下に置くrequirements.inありrequirements.txt

ハッシュの使用

バージョン8.0からpip利用可能なハッシュチェックモードを使用したい場合、 pip-compile--generate-hashesフラグを提供します:

$ pip-compile --generate-hashes requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --generate-hashes --output-file requirements.txt requirements.in
#
click==6.7 \
    --hash=sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d \
    --hash=sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b \
    # via flask
flask==0.12.2 \
    --hash=sha256:0749df235e3ff61ac108f69ac178c9770caeaccad2509cb762ce1f65570a8856 \
    --hash=sha256:49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1
itsdangerous==0.24 \
    --hash=sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519 \
    # via flask
jinja2==2.9.6 \
    --hash=sha256:2231bace0dfd8d2bf1e5d7e41239c06c9e0ded46e70cc1094a0aa64b0afeb054 \
    --hash=sha256:ddaa01a212cd6d641401cb01b605f4a4d9f37bfc93043d7f760ec70fb99ff9ff \
    # via flask
markupsafe==1.0 \
    --hash=sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665 \
    # via jinja2
werkzeug==0.12.2 \
    --hash=sha256:903a7b87b74635244548b30d30db4c8947fe64c5198f58899ddcd3a13c23bb26 \
    --hash=sha256:e8549c143af3ce6559699a01e26fa4174f4c591dbee0a499f3cd4c3781cdec3d \
    # via flask

要件の更新

すべてのパッケージを更新するには、 pip-compile --upgrade定期的に再実行pip-compile --upgrade

特定のパッケージを最新バージョンまたは特定のバージョンに更新するには、 – --upgrade-packageまたは-Pフラグを使用し--upgrade-package

$ pip-compile --upgrade-package flask  # only update the flask package
$ pip-compile --upgrade-package flask --upgrade-package requests  # update both the flask and requests packages
$ pip-compile -P flask -P requests  # same as above, but shorter

複数のPythonバージョンを使用している場合、 py -XY -m piptools compile ...としてpip-compileことができます。WindowsではpythonX.Y -m piptools compile ...します。他のシステムではpythonX.Y -m piptools compile ...します。

構成

pip-compileコマンドを別のスクリプトでラップしているかもしれません。 カスタムスクリプトのコンシューマを混乱させないために、 CUSTOM_COMPILE_COMMAND環境変数を設定して、要件ファイルの先頭に生成された更新コマンドを上書きできます。

$ CUSTOM_COMPILE_COMMAND="./pipcompilewrapper" pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    ./pipcompilewrapper
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask

pip-sync使用例

requirements.txtpip-syncので、 pip-syncを使用して仮想環境を更新し、そこにある内容を正確に反映させることができます。 これは、 requirements.txt内容に一致するために必要なものすべてをインストール/アップグレード/アンインストールします。

注意pip-syncは、 pip-compileによって生成されたrequirements.txtのみ使用されpip-compile

$ pip-sync
Uninstalling flake8-2.4.1:
  Successfully uninstalled flake8-2.4.1
Collecting click==4.1
  Downloading click-4.1-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 65kB 1.8MB/s
  Found existing installation: click 4.0
    Uninstalling click-4.0:
      Successfully uninstalled click-4.0
Successfully installed click-4.1

複数の*.txt依存関係リストを同期するには、コマンドライン引数を使用してそれらを渡します。

$ pip-sync dev-requirements.txt requirements.txt

空の引数を渡すと、デフォルトのrequirements.txt

複数のPythonバージョンを使用している場合は、 py -XY -m piptools sync ...とWindowsでpythonX.Y -m piptools sync ...ようにpip-syncを実行できます。

pip-syncは、 setuptoolspippip-toolsなどのパッケージツールをアップグレードまたはアンインストールしません。 これらのパッケージをアップグレードするには、 pip install --upgradeを使用してください。

pipについての注意

v2.0.0以降、pip-toolsはコードベースでpip v9.0.3しています。 これはpip v10.0.0を使用しているユーザーのためにpip-toolsするために行われました。 pip-syncコマンドだけがvirtualenvで見つかったpip使用し、 pip-syncによってshell- virtualenvとして発行されたpip installコマンドとpip uninstallコマンドに対してのみpip uninstallます。

その他の便利なツール

  • pipdeptree実行すると、インストールされているパッケージの依存関係ツリーが表示されます。







-jazzband

執筆者: