ピップとは何ですか? 新しいPythonistaのガイド
pip
とは何ですか? pip
は、Pythonの標準パッケージマネージャーです。 これにより、Python standard libraryの一部ではない追加のパッケージをインストールおよび管理できます。 このチュートリアルは、新しいPythonistaのpip
の概要です。
このチュートリアルでは、以下について学習します。
-
標準のPythonディストリビューションに含まれていない追加パッケージのインストール
-
Python Package Index(PyPI)に公開されたパッケージの検索
-
スクリプトとアプリケーションの要件を管理する
-
パッケージとその依存関係のアンインストール
ご覧のとおり、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
を使用し、Rubyはgemを使用し、.NETはNuGetを使用します。 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には非常に活発なコミュニティがあり、開発ニーズに役立つさらに大きなパッケージセットに貢献しています。 これらのパッケージは、PyPI(Pie 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)
このスクリプトでは、cgi
とhttp.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.
上記のような出力が表示されるはずです。 pip
をinstall
コマンドで使用し、その後にインストールするパッケージの名前を続けます。 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
は、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の問題は、パッケージがバグとセキュリティの修正で頻繁に更新されることです。おそらく、公開されたらすぐにそれらを活用する必要があります。
要件ファイル形式を使用すると、論理演算子を使用して依存関係のバージョンを指定できます。これにより、パッケージの更新を保証するための柔軟性が少し高まりますが、パッケージの基本バージョンを定義できます。
お気に入りの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)
最新バージョンがあるため、何もアップグレードされませんでしたが、リストされたパッケージの新しいバージョンが公開された場合、パッケージはアップグレードされていました。
理想的な世界では、パッケージの新しいバージョンは後方互換性があり、新しいバグが発生することはありません。 残念ながら、新しいバージョンでは、アプリケーションを破壊するような変更が導入される可能性があります。 要件ファイルの構文は、要件を微調整するための追加の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.txt
とrequirements_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を選択できます。
探しているパッケージが見つかるまで、追加のフィルターを適用して検索語を調整できます。
結果はパッケージページへのリンクを提供します。パッケージページには、より多くの情報と、できればいくつかのドキュメントが含まれています。 requests-oauth2
の情報を見てみましょう。
プロジェクトページには詳細情報があり、プロジェクトホームページへのリンクがあるようです。 リンクをクリックすると、GitHubのproject repositoryに移動します。 そこには、プロジェクトに関する詳細情報と使用例が表示されます。
元のソースコードリポジトリを見つけることは、貴重なリソースになる可能性があります。 そこで、最新のコミットの日付、プルリクエストの数、未解決の問題などを調べることで、プロジェクトのステータスに関するヒントを見つけることができます。
パッケージを見つけるもう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を含む多くの言語のパッケージ、依存関係、および環境マネージャーです。 実際、その起源は、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と同様に、パッケージバージョン管理を簡素化し、開発と本番の依存関係を分離し、それらの依存関係を仮想環境に分離することで機能します。
JavaScriptとnpmから来ている場合、詩は非常に見覚えがあります。 パッケージ管理を超えて、アプリケーションとライブラリのディストリビューションを構築し、それらを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でいつでも詳細情報を入手できます。