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

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

pipとは何ですか? pipは、Pythonの標準パッケージマネージャーです。 これにより、Python standard libraryの一部ではない追加のパッケージをインストールおよび管理できます。 このチュートリアルは、新しいPythonistaのpipの概要です。

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

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

  • Python Package IndexPyPI)に公開されたパッケージの検索

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

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

ご覧のとおり、Pythonコミュニティは非常に活発で、このチュートリアルの後半で学習するpipの代わりとなる優れた方法をいくつか作成しています。

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

pip入門

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

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

パッケージマネージャーの概念は、他の言語を使用している場合は馴染みがあるかもしれません。 JavaScriptはパッケージ管理にnpmを使用し、Rubygemを使用し、.NETNuGetを使用します。 Pythonでは、pipが標準のパッケージマネージャーになりました。

Pythonインストーラーはpipをインストールするため、古いバージョンのPythonをインストールしていない限り、すぐに使用できるようになっているはずです。 コンソールで次のコマンドを実行することにより、pipが使用可能であることを確認できます。

$ pip --version

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

pipのバージョン、およびPythonの場所とバージョンを表示する同様の出力が表示されます。 pipを含まない古いバージョンのPythonを使用している場合は、pip installation documentationのシステムの指示に従ってインストールできます。

仮想環境内でこのチュートリアルの例を実行して、グローバルPythonインストールへのパッケージのインストールを回避することをお勧めします。 Python Virtual Environments: A Primerで仮想環境について学ぶことができます。 その記事のUsing Virtual Environmentsセクションでは、新しい仮想環境を作成するための基本について説明しています。

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

Pythonはbatteries included言語と見なされます。 つまり、Python standard libraryには、開発者がスクリプトやアプリケーションを使用するのに役立つパッケージとモジュールの広範なセットが含まれています。

同時に、Pythonには非常に活発なコミュニティがあり、開発ニーズに役立つさらに大きなパッケージセットに貢献しています。 これらのパッケージは、PyPIPie Pea Eyeと発音)とも呼ばれるPython Package Indexに公開されます。 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)

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

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

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)を使用してタプルの先頭を無視できます。

Note:The Meaning of Underscores in Pythonは、アンダースコアを使用してタプルから値をアンパックする方法を説明しています。

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

$ python using-http.py

Response returned: 200 (OK)
Body:
... Additional Output Omitted

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

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

PyPIは、requestsと呼ばれるHTTPリクエストを実行するための非常に人気のあるライブラリをホストします。 公式のdocumentation siteですべてを学ぶことができます。

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

$ pip help

Usage:
  pip  [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 to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --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.

上記のような出力が表示されるはずです。 pipinstallコマンドで使用し、その後にインストールするパッケージの名前を続けます。 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>コマンドは、常にパッケージの最新バージョンを検索してインストールします。 また、パッケージのメタデータにリストされている依存関係を検索し、それらの依存関係をインストールして、パッケージに必要なすべての要件があることを確認します。

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

$ 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:

メタデータには、依存関係としてcertifichardetidna、および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は、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ファイルをソース管理に送信し、それを使用して他のマシンに正確な環境を作成できます。

微調整の要件

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

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

お気に入りのeditorrequirements.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)

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

理想的な世界では、パッケージの新しいバージョンは後方互換性があり、新しいバグが発生することはありません。 残念ながら、新しいバージョンでは、アプリケーションを破壊するような変更が導入される可能性があります。 要件ファイルの構文は、要件を微調整するための追加の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のドキュメントには、requirements file formatに関するすべての情報が記載されており、詳細については、pipを参照してください。

生産と開発の依存関係

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

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

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

# In requirements_dev.txt
pytest>=4.2.0

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

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

まったく同じ-rスイッチを使用して、本番のrequirements.txtファイルをインストールしていることに注意してください。 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] 

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

Search Options:
  -i, --index            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 to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --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>を取ります。 クエリは検索する文字列であり、パッケージとその説明に一致します。

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

アプリケーションが、承認に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のように、他のものは有望に見えます。 残念ながら、簡単な説明以外の情報はあまりありません。

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

PyPIで同じ用語を検索すると多くの結果が得られますが、異なるカテゴリでフィルター処理できます。 たとえば、アプリケーションの開発に役立つライブラリが必要なため、Intended Audienceを展開してDevelopersを選択できます。 また、おそらく安定した、本番環境に対応したパッケージが必要です。 Development Statusカテゴリを展開して、Production/Stableを選択できます。

PyPi Search Results for Requests OAuth

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

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

PyPi Package Page for Requests OAuth 2

プロジェクトページには詳細情報があり、プロジェクトホームページへのリンクがあるようです。 リンクをクリックすると、GitHubのproject repositoryに移動します。 そこには、プロジェクトに関する詳細情報と使用例が表示されます。

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

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

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

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

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

requestsをインストールすると、pipが他の依存関係もインストールしたことに注意してください。 インストールするパッケージが多いほど、複数のパッケージが同じ依存関係に依存する可能性が大きくなります。 ここで、pipshowコマンドが役立ちます。

パッケージをアンインストールする前に、そのパッケージに対して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つのフィールドRequiresRequired-byに注目してください。 showコマンドは、requestsにはurllib3certifichardet、および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を含む多くの言語のパッケージ、依存関係、および環境マネージャーです。 実際、その起源は、Pythonのデータサイエンスパッケージとして始まったAnacondaに由来しています。

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

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

Setting Up Python for Machine Learning on Windowsは、パッケージと環境の管理を探求するCondaの優れた入門書です。 Windows固有の情報はインストールに関するもののみであるため、別のOSプラットフォームを使用する場合にも関連があります。

Pipenv

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

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

Pipenv: A Guide to the New Python Packaging Toolは、Pipenvとそのパッケージ管理へのアプローチについて学ぶための素晴らしいスタートです。 記事はintermediateとしてタグ付けされていますが、作成者は、Pythonから始めて誰でも記事にアクセスできることを読者に案内する素晴らしい仕事をしています。

Poetryは、多くの牽引力を獲得しているもう1つのpipの代替手段です。 Pipenvと同様に、パッケージバージョン管理を簡素化し、開発と本番の依存関係を分離し、それらの依存関係を仮想環境に分離することで機能します。

JavaScriptnpmから来ている場合、詩は非常に見覚えがあります。 パッケージ管理を超えて、アプリケーションとライブラリのディストリビューションを構築し、それらをPyPIにデプロイするのに役立ちます。 How to Publish an Open-Source Python Package to PyPIには優れたintroduction to Poetryがあり、始めるのに役立ちます。

結論:pipとは何ですか?

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

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

これらのツールとライブラリはPython Package Index(PyPI)に公開されており、pipを使用すると、開発者はそれらをアプリケーション環境にインストールできます。

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

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

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

  • pipとPyPIを介してパッケージを検索する

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

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

ご不明な点がございましたら、下のコメントセクションでお気軽にお問い合わせください。pip documentation pageでいつでも詳細情報を入手できます。