ピップとは何ですか? 新しいPythonistaのガイド

ピップとは何ですか? 新しいPythonistaのガイド

+ pip +`とは何ですか? https://pip.pypa.io/en/stable/[+ pip `]は、https://www.python.org/[Python]の標準パッケージマネージャーです。 https://docs.python.org/3/py-modindex.html[Python標準ライブラリ]の一部ではない追加パッケージをインストールおよび管理できます。 このチュートリアルは、新しいPythonista向けの ` pip +`の紹介です。

このチュートリアルでは、以下について学習します:

  • 標準のPythonディストリビューションに含まれていない追加パッケージのインストール

  • Python Package Index(https://pypi.org/[PyPI])に公開されたパッケージの検索

  • スクリプトとアプリケーションの要件を管理する

  • パッケージとその依存関係のアンインストール

ご覧のとおり、Pythonコミュニティは非常に活発であり、このチュートリアルの後半で学習する `+ pip +`に代わるものを作成しています。

無料ボーナス: link:[5 Thoughts On Python Mastery]、Python開発者向けの無料コースで、Pythonのスキルを次のレベルに引き上げるのに必要なロードマップと考え方を示します。

`+ pip +`を使ってみる

それで、ピップとは何ですか? `+ pip +`はPythonのパッケージマネージャーです。 つまり、標準ライブラリの一部として配布されていない追加のライブラリと依存関係をインストールおよび管理できるツールです。

パッケージ管理は非常に重要であるため、Python 3ではバージョン+ 3.4 、Python 2ではバージョン+2.7.9+以降、Pythonインストーラーには pip +が含まれており、多くのPythonプロジェクトで使用されているため、すべてのPythonistaにとって不可欠なツールです。

パッケージマネージャーの概念は、他の言語を使用している場合は馴染みがあるかもしれません。 JavaScriptはパッケージ管理にhttps://www.npmjs.com/[+ npm +]を使用し、https://www.ruby -lang.org/en/[Ruby]はhttps://rubygems.org/[gem]を使用し、https://dotnet.microsoft.com/languages [.NET]はhttps://www.nuget.org/を使用します[NuGet]。 Pythonでは、 `+ pip +`が標準のパッケージマネージャーになりました。

Pythonインストーラーは `+ pip `をインストールするので、古いバージョンのPythonをインストールしていない限り、使用する準備ができているはずです。 コンソールで次のコマンドを実行すると、 ` pip +`が利用可能であることを確認できます。

$ pip --version

pip 18.1 from C:\Python37\lib\site-packages\pip (python 3.7)

Pythonの場所とバージョンだけでなく、 `+ pip `バージョンを表示する同様の出力が表示されるはずです。 ` pip +`を含まない古いバージョンのPythonを使用している場合は、https://pip.pypa.io/en/stable/installing/[`にあるシステムの指示に従ってインストールできます。 + pip + `インストールドキュメント]。

仮想環境内でこのチュートリアルの例を実行して、グローバルPythonインストールへのパッケージのインストールを回避することをお勧めします。 仮想環境については、https://realpython.com/python-virtual-environments-a-primer/[Python Virtual Environments:A Primer]で学ぶことができます。 この記事のhttps://realpython.com/python-virtual-environments-a-primer/#using-virtual-environments [仮想環境の使用]セクションでは、新しい仮想環境の作成の基本について説明しています。

`+ pip +`を使用したパッケージのインストール

Pythonはhttps://www.python.org/dev/peps/pep-0206/#id3[batteries included]言語と見なされます。 つまり、https://docs.python.org/3/py-modindex.html [Python標準ライブラリ]には、開発者がスクリプトとアプリケーションを使用する際に役立つ広範なパッケージとモジュールのセットが含まれています。

同時に、Pythonには非常に活発なコミュニティがあり、開発ニーズに役立つさらに大きなパッケージセットに貢献しています。 これらのパッケージは、https://pypi.org/[Python Package Index](https://pypi.org/[PyPI](_Pie Pea Eye_と発音))に公開されています。 PyPIは、開発フレームワーク、ツール、およびライブラリを含むパッケージの広範なコレクションをホストします。

これらのパッケージの多くは、標準ライブラリにすでに存在する機能への使いやすいインターフェースを提供することにより、Python開発を簡素化します。 たとえば、Pythonに含まれている標準ライブラリのみを使用して、Webページのコンテンツを取得するスクリプトを作成できます。

# In using-http.py

import cgi
import http.client

server = 'www.google.com'
url = '/'
conn = http.client.HTTPSConnection(server)
conn.request('GET', url)
response = conn.getresponse()
content_type = response.headers.get('Content-Type')
_, params = cgi.parse_header(content_type)
encoding = params.get('charset')
data = response.read()
text = data.decode(encoding)

print(f'Response returned: {response.status} ({response.reason})')
print('Body:')
print(text)

このスクリプトでは、 `+ cgi `と ` http.client `をインポートします。どちらもPython標準ライブラリに含まれています。 サーバーを指定する ` HTTPSConnection `オブジェクトを作成し、その ` .request()`と ` .getresponse()+`を呼び出して応答を取得します。

レスポンスから、 `+ Content-Type `ヘッダーを取得し、 ` cgi +`モジュールを使用して解析して、ページがエンコードされている文字セットを抽出できます。

https://docs.python.org/3/library/cgi.html#functions [+ cgi.parse_header()+]は、メイン値とパラメーターのディクショナリーを含むタプルを返します。 たとえば、 `+ Content-Type `ヘッダーには ` text/html;のような値が含まれる場合があります。 charset = ISO-8859-1 + `。

タプルには文字列 + text/html +`が最初の要素として含まれ、2番目の要素は `+ {'charset': 'ISO-8859-1'} +`の形式の辞書になります。 `+ charset +`パラメータのみに関心があるため、アンダースコアを使用してタプルの先頭を無視できます: `+ _、params = cgi.parse_header(content_type)+

注: Pythonでのアンダースコアの意味は、アンダースコアを使用してタプルから値をアンパックする方法を説明しています。

ページのエンコーディングを取得したら、応答を読み取ってテキストにデコードできます。 コンソールで例を実行して、その動作を確認できます。

$ python using-http.py

Response returned: 200 (OK)
Body:
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"
lang="en"><head><meta content="Search the world's information, including
webpages, images, videos and more. Google has many special features to help you
find exactly what you're looking for." name="description"><meta content="noodp"
name="robots">... Additional Output Omitted

これは、Webページのコンテンツを取得する小さなスクリプトでは多くの作業のようです。 幸いなことに、HTTPリクエストを単純化し、望みどおりのことをするための素晴らしいインターフェースを提供するPythonパッケージがあります。

基本的なパッケージのインストール

PyPIは、https://pypi.org/project/requests/[+ requests +]と呼ばれるHTTPリクエストを実行する非常に人気のあるライブラリをホストします。 公式のhttp://docs.python-requests.org/en/master/[ドキュメントサイト]でそれについてすべて学ぶことができます。

最初のステップは、 `+ requests `パッケージを環境にインストールすることです。 ` help `で実行することで、 ` pip +`がサポートするコマンドについて学ぶことができます:

$ pip help

Usage:
  pip <command> [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible
                              dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be
                              used up to 3 times (corresponding to WARNING,
                              ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form
                              [user:[email protected]]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host <hostname>   Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine
                              whether a new version of pip is available for
                              download. Implied with --no-index.

ご覧のとおり、 `+ pip `はパッケージをインストールするための ` install `コマンドを提供します。 それを実行して ` requests +`パッケージをインストールできます:

$ pip install requests

Looking in indexes: https://pypi.org/simple
Collecting requests
  Using cached
  https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests)
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting urllib3<1.25,>=1.21.1 (from requests)
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Installing collected packages: chardet, idna, urllib3, certifi, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8
  requests-2.21.0 urllib3-1.24.1
You are using pip version 18.1, however version 19.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip'
  command.

上記のような出力が表示されるはずです。 `+ install `コマンドに続けてインストールするパッケージの名前を指定して、 ` pip `を使用します。 ` pip `はPyPIでパッケージを探し、その依存関係を計算し、それらをインストールして ` requests +`が動作することを保証します。

また、現在の環境では `+ pip `バージョン ` 18.1 `が使用されていますが、バージョン ` 19.0.1 `が使用可能であることもわかります。 また、 ` pip +`を更新するために使用する必要があるコマンドも示しているため、次のようにします。

$ python -m pip install --upgrade pip

Looking in indexes: https://pypi.org/simple
Collecting pip
  Downloading https://files.pythonhosted.org/packages/46/dc/
  7fd5df840efb3e56c8b4f768793a237ec4ee59891959d6a215d63f727023/
  pip-19.0.1-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 2.0MB/s
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-19.0.1

`+ python -m `を使用して ` pip `を更新することに注意してください。 ` -m `スイッチは、モジュールを実行可能ファイルとして実行するようPythonに指示します。 ` pip +`を更新するには、新しいバージョンをインストールする前に古いバージョンをアンインストールする必要があり、ツールの実行中に削除するとエラーが発生する可能性があるため、これが必要です。

モジュールとして `+ pip `を実行すると、Pythonはモジュールをメモリにロードし、使用中にパッケージを削除できるようにします。 パッケージがhttps://docs.python.org/3/library/__main__.html [トップレベルスクリプト] ` main 。py +`を提供している場合、スクリプトのようにパッケージを実行できます。

`+ requests `をインストールし、 ` pip `をアップグレードしたので、 ` list +`コマンドを使用して、環境にインストールされているパッケージを確認できます。

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

ご覧のように、 + pip +`はバージョン `+ 19.0.1 +(現在の最新バージョン)にアップグレードされ、 `+ requests `バージョン ` 2.21.0 +`がインストールされています。

`+ pip install <package> +`コマンドは常に最新バージョンのパッケージを探してインストールします。 また、パッケージのメタデータにリストされている依存関係を検索し、それらの依存関係をインストールして、パッケージに必要なすべての要件があることを確認します。

ご覧のとおり、複数のパッケージがインストールされています。 `+ pip `の ` show +`コマンドを使用して、パッケージのメタデータを確認できます。

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: py37\lib\site-packages
Requires: certifi, chardet, idna, urllib3
Required-by:

メタデータには、依存関係として「+ certifi 」、「 chardet 」、「 idna 」、および「 urllib3 +」がリストされており、これらもインストールされていることがわかります。

`+ requests +`パッケージをインストールすると、上記の例を変更して、Webページのコンテンツを取得することがどれほど簡単かを確認できます。

# In using-requests.py

import requests

url = 'https://www.google.com'
response = requests.get(url)
print(f'Response returned: {response.status_code}, {response.reason}')
print(response.text)

現在、環境にインストールされているため、 `+ requests +`パッケージを他の標準パッケージとしてインポートできます。

ご覧のとおり、 `+ requests.get()+`はHTTP接続を処理し、元の例に似た応答オブジェクトを返しますが、インターフェースが改善されています。

ほとんどの場合、 + requests +`がそれを処理するため、ページのエンコードを処理する必要はありません。 それでも、 `+ requests +`は、http://docs.python-requests.org/en/master/user/quickstart/#response-content [+ requests.Response +`]オブジェクトを介して特別なケースを処理するための柔軟なインターフェースを提供します。

要件ファイルの使用

`+ pip install +`コマンドは常にパッケージの最新公開バージョンをインストールしますが、コードで動作することがわかっている特定のバージョンをインストールしたい場合があります。

アプリケーションの開発とテストに使用した依存関係とバージョンの仕様を作成したいので、実稼働環境でアプリケーションを使用しても驚くことはありません。

要件ファイルを使用すると、インストールするパッケージとバージョンを正確に指定できます。 `+ pip help `を実行すると、インストールされたパッケージを要件形式で出力する ` freeze +`コマンドがあることがわかります。 このコマンドを使用して、出力をファイルにリダイレクトして要件ファイルを生成できます。

$ pip freeze > requirements.txt
$ cat requirements.txt

certifi==2018.11.29
chardet==3.0.4
idna==2.8
requests==2.21.0
urllib3==1.24.1

`+ freeze `コマンドは、すべてのパッケージとそのバージョンを標準出力にダンプするため、出力をファイルにリダイレクトして、正確な要件を別のシステムにインストールできます。 慣例では、このファイルに「 requirements.txt +」という名前を付けますが、任意の名前を付けることができます。

別のシステムで環境を複製する場合、 `+ -r `スイッチを使用して要件ファイルを指定して ` pip install +`を実行できます。

$ pip install -r requirements.txt

Looking in indexes: https://pypi.org/simple
Collecting certifi==2018.11.29 (from -r .\requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Collecting chardet==3.0.4 (from -r .\requirements.txt (line 2))
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna==2.8 (from -r .\requirements.txt (line 3))
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting requests==2.21.0 (from -r .\requirements.txt (line 4))
  Using cached https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting urllib3==1.24.1 (from -r .\requirements.txt (line 5))
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8
  requests-2.21.0 urllib3-1.24.1

パッケージのバージョンは、 `+ requirements.txt +`にリストされているものと一致します。

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

`+ requirements.txt +`ファイルをソース管理に送信し、それを使用して他のマシンに正確な環境を作成できます。

微調整の要件

パッケージのバージョンとその依存関係を*ハードコーディング*することの問題は、パッケージがバグとセキュリティ修正で頻繁に更新されることであり、おそらく公開されるとすぐにそれらを活用したいでしょう。

要件ファイル形式を使用すると、論理演算子を使用して依存関係のバージョンを指定できます。これにより、パッケージの更新を保証するための柔軟性が少し高まりますが、パッケージの基本バージョンを定義できます。

お気に入りのhttps://realpython.com/python-ides-code-editors-guide/[editor]で `+ requirements.txt +`ファイルを開き、次の変更を行います。

certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0
urllib3>=1.24.1

論理演算子を「> = +」に変更して、「 pip 」に公開済みのバージョン以上をインストールするように指示できます。 ` requirments.txt `ファイルを使用して新しい環境を設定すると、 ` pip `は要件を満たす最新バージョンを探してインストールします。 要件ファイル内のパッケージをアップグレードするには、 `-upgrade `スイッチを指定して ` install +`コマンドを実行します。

$ pip install --upgrade -r requirements.txt

Looking in indexes: https://pypi.org/simple
Requirement already up-to-date: certifi==2018.11.29 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 1)) (2018.11.29)
Requirement already up-to-date: chardet==3.0.4 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 2)) (3.0.4)
Requirement already up-to-date: idna==2.8 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 3)) (2.8)
Requirement already up-to-date: requests==2.21.0 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 4)) (2.21.0)
Requirement already up-to-date: urllib3==1.24.1 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 5)) (1.24.1)

最新バージョンがあるため、何もアップグレードされませんでしたが、リストされたパッケージの新しいバージョンが公開された場合、パッケージはアップグレードされていました。

理想的な世界では、パッケージの新しいバージョンは後方互換性があり、新しいバグが発生することはありません。 残念ながら、新しいバージョンでは、アプリケーションを破壊するような変更が導入される可能性があります。 要件ファイルの構文は、要件を微調整するための追加のhttps://www.python.org/dev/peps/pep-0440/#version-specifiers [バージョン指定子]をサポートしています。

「+ requests 」の新しいバージョン「+3.0」が公開されたものの、互換性のない変更が導入され、アプリケーションが破損したとしましょう。 要件ファイルを変更して、「+ 3.0+」以上がインストールされないようにすることができます。

certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0, <3.0
urllib3>=1.24.1

`+ requests `パッケージのバージョン指定子を変更すると、 ` 3.0 `以上のバージョンがインストールされなくなります。 ` pip +`ドキュメントは、https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format [requirements file format]に関するすべての情報を提供します。詳細については、それを参照してください。それについて。

生産と開発の依存関係

アプリケーションの開発中にインストールするすべてのパッケージがアプリケーションの依存関係になるわけではありません。 PyPIには、開発プロセス中に活用したい開発ツールまたはライブラリである多くのパッケージが公開されています。

例として、おそらくアプリケーションの単体テストが必要になるため、単体テストフレームワークが必要です。 単体テストの一般的なフレームワークはhttps://docs.pytest.org/en/latest/[+ pytest +]です。 開発環境にインストールしたいが、アプリケーションの依存関係ではないため、実稼働環境にはインストールしたくない。

2番目の要件ファイル( + requirements_dev.txt +)を作成して、開発環境をセットアップする追加のツールをリストします。

# In requirements_dev.txt
pytest>=4.2.0

これには、「+ pip 」を使用して、両方の要件ファイル「 requirements.txt 」と「 requirements_dev.txt 」をインストールする必要があります。 幸いなことに、pipを使用すると、要件ファイル内で追加のパラメーターを指定できます。 ` requirements_dev.txt `を変更して、本番環境の ` requirements.txt +`ファイルから要件をインストールすることもできます。

# In requirements_dev.txt
-r requirements.txt
pytest>=4.2.0

プロダクションの `+ requirements.txt `ファイルをインストールするのにまったく同じ ` -r +`スイッチを使用していることに注意してください。 requirements file formatを使用すると、要件ファイルで追加の引数を指定できます。

生産の凍結要件

本番および開発要件ファイルを作成し、ソース管理に追加しました。 ファイルは、柔軟なバージョン指定子を使用して、依存関係によって公開されたバグ修正を確実に活用します。 また、アプリケーションをテストしており、本番環境にデプロイする準備ができています。

すべてのテストに合格し、アプリケーションが動作することがわかっているため、実稼働環境に展開する依存関係のバージョンが、統合パイプラインまたはビルドプロセスで使用したものとまったく同じバージョンであることを確認する必要があります。

現在のバージョン指定子は、同じバージョンが実稼働環境にデプロイされることを保証していません。したがって、前に見たように実稼働環境の要件を凍結する必要があります。

クリーンな実稼働仮想環境を作成し、 `+ requirements.txt `ファイルを使用して実稼働要件をインストールします。 要件がインストールされたら、特定のバージョンをフリーズし、本番環境で使用する ` requirements_lock.txt `ファイルに出力をダンプできます。 ` requirements_lock.txt +`ファイルには正確なバージョン指定子が含まれ、環境の複製に使用できます。

使用するパッケージを見つける

あなたがより経験豊富なPythonistaになると、あなたが心から知っていて、ほとんどのアプリケーションで使用するパッケージのセットがあります。 `+ requests `および ` pytest +`パッケージは、Pythonツールボックスの便利なツールになるための良い候補です。

ただし、別の問題を解決する必要がある場合があり、それを支援できる別のツールまたはライブラリを探す必要があります。 上記のように、 `+ pip help `は、PyPIに公開されたパッケージを検索する ` search +`コマンドがあることを示しています。

このコマンドがどのように役立つかを見てみましょう。

$ pip help search

Usage:
  pip search [options] <query>

Description:
  Search for PyPI packages whose name or summary contains <query>.

Search Options:
  -i, --index <url>           Base URL of Python Package Index
                              (default https://pypi.org/pypi)

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be
                              used up to 3 times (corresponding to WARNING,
                              ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form
                              [user:[email protected]]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host <hostname>   Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine
                              whether a new version of pip is available for
                              download. Implied with --no-index.
  --no-color                  Suppress colored output

このコマンドは、上記の一連のオプションと `+ <query> +`を取ります。 クエリは検索する文字列であり、パッケージとその説明に一致します。

注意: `+ pip help <command> +`を使用して、サポートされているコマンドに関する追加情報を取得できます。

アプリケーションがhttps://oauth.net/2/[OAuth2]を認証に使用しているサービスにアクセスする必要があるとしましょう。 理想的には、 `+ requests `または私たちを助けることができる同様のインターフェースで動作するライブラリがあります。 ` pip +`を使用してPyPIを検索しましょう:

$ pip search requests oauth

requests-oauth (0.4.1)             - Hook for adding Open Authentication
                                     support to Python-requests HTTP library.
oauth (1.0.1)                      - Library for OAuth version 1.0a.
pmr2.oauth (0.6.1)                 - OAuth PAS Plugin, OAuth 1.0 provider for
                                     Plone.
oauth-proxy (1.0.5)                - OAuth HTTP proxy
django-oauth (1.1)                 - Support of OAuth in Django.
intuit-oauth (1.2.0)               - Intuit OAuth Client
brubeck-oauth (0.1.11)             - Brubeck OAuth module
guillotina-oauth (2.0.0)           - guillotina oauth support
httpie-oauth (1.0.2)               - OAuth plugin for HTTPie.
paytm-oauth (0.2)                  - Consumer for paytm oauth
plurk-oauth (0.9.2)                - Plurk OAuth API
oauth-flow (1.0.3)                 - Authenticate and make calls to OAuth 1.0,
                                     OAuth 2.0 services
... Additional Output Omitted

検索語は、非常に広範なパッケージのコレクションを生成します。 それらのいくつかは、 `+ django-oauth `のようなサービスまたは技術に固有のようです。 「 requests-oauth +」のように、他のものは有望に見えます。 残念ながら、簡単な説明以外の情報はあまりありません。

ほとんどの場合、https://pypi.org/[PyPI] Webサイトでパッケージを直接検索する必要があります。 PyPIは、インデックスの検索機能と、フレームワーク、トピック、開発ステータスなどのパッケージで公開されているメタデータで結果をフィルタリングする方法を提供します。

PyPIで同じ用語を検索すると多くの結果が得られますが、異なるカテゴリでフィルター処理できます。 たとえば、アプリケーションの開発に役立つライブラリが必要な場合は、[対象ユーザー]を展開して[開発者]を選択できます。 また、おそらく安定した、本番環境に対応したパッケージが必要です。 _Development Status_カテゴリを展開し、_Production/Stable_を選択できます。

探しているパッケージが見つかるまで、追加のフィルターを適用して検索語を調整できます。

結果はパッケージページへのリンクを提供します。パッケージページには、より多くの情報と、できればいくつかのドキュメントが含まれています。 `+ requests-oauth2 +`の情報を見てみましょう:

プロジェクトページには詳細情報があり、プロジェクトホームページへのリンクがあるようです。 リンクをクリックすると、GitHubのhttps://github.com/maraujop/requests-oauth2 [プロジェクトリポジトリ]に移動します。 そこには、プロジェクトに関する詳細情報と使用例が表示されます。

元のソースコードリポジトリを見つけることは、貴重なリソースになる可能性があります。 そこで、最新のコミットの日付、プルリクエストの数、未解決の問題などを調べることで、プロジェクトのステータスに関するヒントを見つけることができます。

パッケージを見つけるもう1つのオプションは、Googleを使用することです。 広く使用されているPythonライブラリがGoogle検索の上部に表示され、PyPIまたはそのソースコードリポジトリでパッケージへのリンクを見つけることができるはずです。

適切なパッケージを見つけるには時間がかかり、調査する必要がありますが、それを見つけたら開発プロセスをスピードアップすることもできます。

パッケージのアンインストール

時々、パッケージをアンインストールする必要があります。 あなたはそれを置き換えるより良いライブラリを見つけたか、それはあなたが本当に必要としないものです。 パッケージのアンインストールは少し注意が必要です。

`+ requests `をインストールすると、 ` pip `が他の依存関係もインストールすることに注意してください。 インストールするパッケージが多いほど、複数のパッケージが同じ依存関係に依存する可能性が大きくなります。 これは、 ` pip `の ` show +`コマンドが便利な場所です。

パッケージをアンインストールする前に、必ずそのパッケージに対して `+ show +`コマンドを実行してください:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: c:\users\isaac\projects\virtualenv\py37\lib\site-packages
Requires: urllib3, certifi, chardet, idna
Required-by:

最後の2つのフィールド `+ Requires `と ` Required-by `に注目してください。 「 show 」コマンドは、「 requests 」には「 urllib3 」、「 certifi 」、「 chardet 」、および「 idna 」が必要であることを示しています。 おそらくこれら2つをアンインストールする必要があります。 また、 ` requests +`は他のパッケージでは必要ないため、アンインストールしても安全であることがわかります。

すべての `+ requests `依存関係に対して ` show `コマンドを実行して、他のライブラリもそれらに依存しないことを確認する必要があります。 アンインストールするパッケージの依存関係の順序を理解したら、 ` uninstall +`コマンドを使用してそれらを削除できます。

$ pip uninstall certifi

Uninstalling certifi-2018.11.29:
  Would remove:
    \py37\lib\site-packages\certifi-2018.11.29.dist-info\*
    \py37\lib\site-packages\certifi\*
Proceed (y/n)? y
  Successfully uninstalled certifi-2018.11.29

パッケージをアンインストールすると、削除されるファイルが表示され、確認を求められます。 依存関係を確認したためにパッケージを削除することが確実で、他に何も使用していないことがわかっている場合は、ファイルリストと確認を抑制するために `+ -y +`スイッチを渡すことができます。

$ pip uninstall urllib3 -y

Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

$ pip uninstall chardet -y

Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4

$ pip uninstall idna -y

Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8

$ pip uninstall requests -y

Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0

アンインストールするすべてのパッケージを1回の呼び出しで指定できます: + pip uninstall -y urllib3 chardet idna requests +

`+ -r <requirments file> `オプションを提供することで、要件ファイルにリストされているすべてのパッケージをアンインストールすることもできます。 このコマンドは個々のパッケージごとに確認を求めますが、「-y +」スイッチを使用して、実行内容がわかっている場合はそれを抑制することができます。

$ pip uninstall -r requirements.txt -y

Uninstalling certifi-2018.11.29:
  Successfully uninstalled certifi-2018.11.29
Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4
Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8
Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0
Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

アンインストールするパッケージの依存関係を常に確認することを忘れないでください。 おそらくすべての依存関係をアンインストールする必要がありますが、他のユーザーが使用しているパッケージをアンインストールすると、アプリケーションが破損します。

`+ pip +`の代替

`+ pip `はすべてのPythonistaにとって不可欠なツールであり、パッケージ管理のために多くのアプリケーションやプロジェクトで使用されています。 このチュートリアルは基本的な作業に役立ちましたが、Pythonコミュニティは、他の開発者が使用できる優れたツールとライブラリを提供することに非常に積極的です。 これらには、パッケージ管理の簡素化と改善を試みる「 pip +」のその他の代替手段が含まれます。

このセクションでは、Pythonで利用可能な他のパッケージ管理ツールについて学習します。

コンダはそれをすべて行う

Condaは、Pythonを含む多くの言語のパッケージ、依存関係、および環境マネージャーです。 実際、その起源はhttps://www.anaconda.com/[Anaconda]から来ています。これはPythonのデータサイエンスパッケージとして始まりました。

Condaはデータサイエンスおよび機械学習アプリケーションに広く使用されており、独自のhttps://repo.continuum.io/[index]を使用して互換性のあるパッケージをホストしています。

Condaを使用すると、パッケージの依存関係を管理できるだけでなく、アプリケーションの仮想環境を管理し、互換性のあるPythonディストリビューションをインストールし、本番環境に展開するためにアプリケーションをパッケージ化できます。

Windowsでの機械学習のためのPythonのセットアップは、パッケージと環境の管理を探るCondaの優れた紹介です。 Windows固有の情報はインストールに関するもののみであるため、別のOSプラットフォームを使用する場合にも関連があります。

Pipenv

Pipenvは、「すべてのパッケージングの世界で最高のものをPythonにもたらす」ことを目的とした別のパッケージ管理ツールです。 仮想環境とパッケージ管理を単一のツールに統合するため、Pythonコミュニティの間で大きな注目を集めています。

また、パッケージのバージョン、開発と本番の依存関係の分離、本番用のバージョンのロックなど、 `+ pip +`を使用して依存関係を手動で管理するときに発生する最も一般的な問題も解決します。

Pipenv:新しいPythonパッケージングツールのガイドは、Pipenvとパッケージ管理へのアプローチについて学ぶための素晴らしいスタートです。 記事に「+ intermediate +」というタグが付けられていても、著者は、Pythonを始めた人ならだれでも記事にアクセスできることを読者に案内するという素晴らしい仕事をしています。

Poetryは、多くの注目を集めている別の「+ pip +」の代替手段です。 Pipenvと同様に、パッケージバージョン管理を簡素化し、開発と本番の依存関係を分離し、それらの依存関係を仮想環境に分離することで機能します。

JavaScriptおよびhttps://www.npmjs.com/[npm]からアクセスしている場合、Poetryは非常に馴染みがあります。 パッケージ管理を超えて、アプリケーションとライブラリのディストリビューションを構築し、それらをPyPIにデプロイするのに役立ちます。 オープンソースPythonパッケージをPyPIに公開する方法にはhttps://realpython.com/pypi-publish-python-package/#poetryがあります[詩の紹介]そしてあなたが始めるのを助けることができます。

結論:「+ pip +」とは何ですか?

このチュートリアルでは、pipとは何ですか? 「+ pip +」はPythonのパッケージマネージャーであり、依存関係を管理するために多くのプロジェクトで使用されています。 Pythonインストーラーに含まれているため、すべてのPythonistaが使用方法を知るのに不可欠なツールです。

Pythonは、あらゆる種類のアプリケーションの開発に適した広範な標準ライブラリを提供しますが、アクティブなPythonコミュニティは、Pythonアプリケーションの開発を高速化するさらに大きなツールとライブラリのセットを提供します。

これらのツールとライブラリはhttps://pypi.org/[Python Package Index](PyPI)に公開されており、開発者はそれらをアプリケーション環境にインストールできます。

このチュートリアルでは、次のことを学びました。

  • コマンドラインで「+ pip +」を使用し、要件ファイルを使用して新しいパッケージをインストールする

  • 依存関係の管理、開発要件と実稼働要件の分離、およびロックされた要件ファイルの作成

  • `+ pip +`とPyPIを介してパッケージを見つける

  • パッケージをアンインストールする前にパッケージの依存関係を評価し、 `+ pip +`がパッケージをアンインストールする方法

さらに、依存関係を最新の状態に保つことの重要性と、それらの依存関係を管理するのに役立つ「+ pip +」の代替手段についても学びました。

ご質問がある場合は、下のコメントセクションでお気軽にお問い合わせください。https://pip.pypa.io/en/stable/[`+ pip +`ドキュメントページ]でいつでも詳細情報を入手できます。