pipとは

pipとは
Pythonのパッケージインストーラ
pip is the package installer for Python. You can use pip to install packages from the Python Package Index and other indexes.
3ヶ月ごとに新しいバージョンをリリースしているとのこと

Getting Started
pipがちゃんとインストールされているかの確認
まず、Pythonがインストールされているか確認します。
python3 --version
=> Python 3.N.N
次に、pipがインストールされているか確認します。
python3 -m pip --version
=> pip X.Y.Z from ... (python 3.N.N)
TODO: コマンド解説
パッケージのインストール
通常のインストール
python3 -m pip install sampleproject
Githubからのインストール
python3 -m pip install git+https://github.com/pypa/sampleproject.git@main
distribution fileからのインストール
python3 -m pip install sampleproject-1.0.tar.gz
python3 -m pip install sampleproject-1.0-py3-none-any.whl
requirementsファイルを使って複数パッケージをインストール
python3 -m pip install -r requirements.txt
パッケージのアップグレード
python3 -m pip install --upgrade sampleproject
パッケージのアンインストール
python3 -m pip uninstall sampleproject
=> Uninstalling sampleproject:
=> [...]
Proceed (Y/n)? y

Installation
通常、仮想環境やpython.orgからPythonをダウンロード済みの環境では、
pipはインストールされているみたいです。
(どっかしらのディストリビューターが修正したensurepip
を削除したPythonをインストールしてもpipは使えませんとのこと、あんまりないと思うけど)
pipのインストール
pipがインストールされていなかった場合は以下コマンドでインストール
pipのzipアプリケーションインストールや、他の方法でのインストール方法についても言及されていますが、割愛。
pipのアップグレード
python3 -m pip install --upgrade pip
Compatibilityについて
TODO: あとで読む
ちなみにpython
ではなくpython3
、pip
ではなくpip3
コマンドでないと使えませんでした。
これは、pythonのバージョンが2までと3以上でかなり違いがあることが原因のようです。
詳しくはこの記事がわかりやすかったです。
_

User Guide
pipの実行
pipがインストールされていれば、pipコマンドを使うことができます。
python3 -m pip <pip arguments>
python3 -m pip
というコマンドを使うと、自身のローカルで定義されているpythonのPythonインタープリタを使って、pipが実行されます。
なので、/usr/bin/python3.7 -m pip
を実行するのは、/usr/bin/python3.7
に置いてあるインタープリタを使ってpipを実行するということになります。
パッケージのインストール
pipでパッケージをインストールする際は、
PyPI、バージョン管理(?)、ローカルのプロジェクト、ディストリビューションファイルからインストールすることが可能です。
python3 -m pip install SomePackage # latest version
python3 -m pip install SomePackage==1.0.4 # specific version
python3 -m pip install 'SomePackage>=1.0.4' # minimum version
一番ポピュラーなやり方は、
Requirement Specifiersを使ってPyPIからインストールする方法です。
Proxy Serverを使う
TODO: あとで読む
Requirements Files
"Requirements Files"は、pipで一気にインストールしたいパッケージのリストを書くファイルです。
python3 -m pip install -r requirements.txt
論理的に、Requirements fileは、pip install
に渡す引数のリストです。
書いてある順番通りにインストールされるわけじゃないので気をつけてください。
例えば、"http://example.com/requirements.txt"みたいに、
URLを使ってRequirements filesにアクセスすることも可能なので、
ローカルのファイルだったり、共通の場所で管理することもできます。
Requirements Filesには、4つの使い方があります。
-
pip freeze
の結果を書き込む
繰り返しインストールできるよう、Requirements fileにpip freeze
の結果を持たせます。
そうすると、Requirements fileには、pip freeze
実行時の全パッケージの固定バージョンの情報が書き込まれます。
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
上記は、pip freeze
を実行してrequirements.txtに書き込み、
そのrequirements.txtをもとにパッケージをインストールしている例です。
- 依存関係を適切に解決する
Requirements filesは、pipに依存関係を適切に解決させるために使われます。
pipのバージョンが20.2以前のものは、真の依存関係解決の機能はありませんが、プロジェクト内で最初に読み込まれたバージョン指定を適用します。
例えば、pkg1
がpkg3>=1.0
を必要とし、pkg2
がpkg3>=1.0,<=2.0
を必要とする場合、pkg1
が先に解決されると、pipはpkg3>=1.0
のみを適用し、pkg2
バージョン指定と矛盾するバージョンのpkg3
をインストールしてしまう可能性があります。
この問題を解決するためには、以下の例のように
矛盾の起きないバージョン指定pkg3>=1.0,<=2.0
のみ記載し、他のパッケージにはバージョンを指定しないようにすることで解決できます。
pkg1
pkg2
pkg3>=1.0,<=2.0
- バージョン固定
Requirements filesは、インストールするパッケージのバージョンを指定できます。
例えば、ProjectA
はProjectB
に依存しているが、ProjectB
の最新バージョン(v1.3)にバグがあった場合、小さいバージョンのProjectB
をインストールさせることができます。
ProjectA
ProjectB<1.3
- ローカル内のパッケージ読み込み
依存先をローカルのパッチでオーバーライドすることができます。
例えば、PyPIからSomeDependency
パッケージをインストールしているとします。
SomeDependency
パッケージにバグが発見されましたが、修正を待つことができないので、コードをクローンし修正して、sometag
のタグをつけたものをgitで管理します。
その場合、Requirements fileでは、以下のように指定することができます。
git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency
元々SomeDependency
を使っていた場合は、上記のように置き換えます。
使っているパッケージの依存先でSomeDependency
がある場合は、上記を追加します。
pipは、requirements.txtファイルの中身によって依存関係を決定するのではなく、install_requires metadataを使って依存関係を決定しているということを忘れないようにしてください。
TODO: 上記を深掘りする

Constraints Files
TODO: 必要になったら読む