pip(改)

投稿者: | 2022-12-10

目次

pip install と python -m pip install の違い

  • 結論
    • python -m pip install を利用する
    • 基本、python -m pip ●● とすればよい
  • 理由
    • pip install だと
      • 複数の python バージョンがあった場合、pipコマンドで実行される pip モジュールが属する python 側にしかインストールされない可能性があるため
      • つまり、python 3.8 にパッケージをインストールするつもりで、pip install を使っても、実行される pip の所属先が python 3.9 だと、3.9 側にインストールされてしまうため。
      • pip -V で表示される pip モジュールが属する python のバージョンに対してインストールされる
    • python -m pip install だと
      • python コマンドで実行されるバージョンの Python に対してインストールが行われる

pipのインストール状況

  • pythonのバージョンも確認
# Mac
$ python --version
Python 3.N.N
$ python -m pip --version
pip X.Y.Z from...(python 3.N.N)

# Windows
C:>py --version
Python 3.N.N
C:>py -m pip --version
pip X.Y.Z from...(python 3.N.N)

pipのアップグレード

  • pipのバージョンが古いという警告メッセージが出たときもこれでよい
  • アップグレードする前に、pip -V で現バージョンを確認しておくとよい
# Mac
$ python -m pip install --upgrade pip

# Win
C:>py -m pip install --upgrade pip

pipによるパッケージインストール

# Mac
$ python -m pip install pkgname # latest version
$ python -m pip install pkgname=1.0.4 # specific version
$ python -m pip install 'pkgname>=1.0.4' # minimum version

# Win
C:>py -m pip install pkgname # latest version
C:>py -m pip install pkgname=1.0.4 # specific version
C:>py -m pip install 'pkgname>=1.0.4' # minimum version

パッケージのアップデート

python -m pip install pkgname --upgrade

# 新しいバージョンの有無をチェックするには
pip list --outdated

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

  • pipは新しいバージョンにアップグレードする前に、古いバージョンのパッケージの自動アンインストールも実行する
# Mac
$ python -m pip uninstall pkgname

# Win
C:¥>py -m pip uninstall pkgname

パッケージのリスト

# Mac
$ python -m pip list

# Win
C:¥>py -m pip list

パッケージの検索(ローカル)

pip show pkg_name

パッケージの検索(PyPI)

  • pipは、次のコマンドを使用してPyPIでパッケージを検索できる
# Mac
$ python -m pip search "query"

# Win
C:¥>py -m pip search "query"

オフラインでpipを実施する方法

会社などの環境の場合、プロキシで pip が使えない場合がある。この場合の対処方法を説明している。

参考HP:

整理するとこんなイメージ


まず最初に

  • 会社のPCにおいても、pip は最新バージョンにしておく。ただし pip のアップグレードもプロキシでブロックされるため、これも手動でダウンロード、インストールする必要がある
  • pip は他との以前関係はないと思われるため、単体でダウンロード、インストールしてもよいであろう
  • 下部の「別PCでパッケージ(一式)をダウンロードする」のやり方で取り込んでもよい
# 現在のpipバージョンを確認
$ pip -V または python -m pip -V(Winの場合)
  • PyPI より最新の pip の whlファイルを手動でダウンロードし、ローカルに保存する
    • 左欄の「ファイルをダウンロード」から進み、プラットフォームにあったものをダウンロードする(tar と whl があるが whl ファイルでよい)
  • 最新を入れる前に、既存の pip はアンインストールしなければならない
pip uninstall pip

# /binの中にあるpip関連ファイルが削除される
  • pip は使えないため、「easy install」を使って pip をインストールする
    • Webには easy install となっているがたぶん見え方の問題でアンダーバーがない
    • Macでは easy_install で存在しているため、これが正しいはず
easy_install pip-22.3.1-py3-none-any.whl(ローカルにDLしたファイルを指定)
または
python -m easy_install 〜 (Win?)
  • これでpipのアップデートが完了する

別PCでパッケージ(一式)をダウンロードする

  • まず pip は最新バージョンに更新しておく
    • ここでの作業は、プロキシがない自宅などの環境で行う前提のため、pipは使える前提
  • あるパッケージ(例:pikepdf )とそれに依存関係にあるパッケージを、カレント配下の package(仮)フォルダにまとめてダウンロードしたい場合は
    • pip download -d (フォルダPATH)(パッケージ名)
  • パッケージ取得の前に、既存環境を汚さないように仮想環境を作成してから作業をしたほうがよいし、わかりやすい(終わった後は削除すればよい)
$ pip download -d ./package pikepdf

仮想環境の指定したフォルダに、pikepdf とその依存関係にあるパッケージがダウンロードされている

複数のパッケージをダウンロードしたいとき

  • 複数のパッケージファイルを一括で取得したい場合、 requirements.txt に一覧を記載すると一括指定できて便利
  • テキストエディタで、事前に requirements.txt ファイルを作成しておく
  • 参考)書き出すこともできる pip freeze > requirements.txt
  • pip download コマンドに -r オプションを付けると、requirements.txt に記載のパッケージファイルがダウンロードされる
$ pip download -d ./packages -r ./packages/requirements.txt
  • この一式をオフラインのPCへ圧縮しておくればよい

パッケージのローカルインストール

  • 別PCでダウンロードしたパッケージ一式(必要なwhlファイル、依存関係にあるwhlファイル、必要に応じてrequirements.txt)をデスクトップ等に保存する

仮想環境に切り替える

  • 既存環境を汚さないように仮想環境を作成し、切り替える
  • TODO 既存の仮想環境をコピーしたもので一度インストールして問題なければ、既存のものへインストールすればよいのだろうか?
$ python3 -m venv .testenv
$ source .testenv/bin/activate

作業手順

要は、普通に pip を使うとデフォルトで PyPI に接続にいきパッケージを探そうとする(依存関係にあるパッケージの検索とインストールを含む)。これがプロキシにストップされる。そのため、その挙動を止めさせて、ローカルからインストールしてね、と指示してあげるとよい

  • –no-index–find-links=DIR のオプションを使う
  • --no-index
    • デフォルトのパッケージインデックス(検索方法)を無視する。代わりに、--find-links で指定されたURLやローカルディレクトリのみを参照する
  • -f, --find-links=
    • ここでは、ローカルのディレクトリを指定。そこからアーカイブ(裸のwhlでよいと思うが)を探してくれる

個別インストール

Windows:
$ py -m pip install --no-index --find-links=ディレクトリ パッケージ名

Mac:
$ python -m pip install --no-index --find-links==ディレクトリ パッケージ名

一括インストール

  • 複数のパッケージファイルを一括でインストールする場合、requirements.txt を指定する
Windows:
$ py -m pip install --no-index --find-links=DIR -r requirements.txt

Mac:
$ python -m pip install --no-index --find-links=DIR -r requirements.txt

インストール済みパッケージの確認

$ pip list

参考)インストールされたパッケージは lib > python3.8 > site-packages に格納される(Macの場合)


依存関係を確認したい

問題の有無を確認したい場合

$ pip check
  • 正常な場合:「No broken requirements found.」
  • 問題があった場合
    • 例「pandas 1.4.2 requires numpy, which is not installed.」など

依存関係を可視化したい場合

  • pipdeptree パッケージで可視化することができる

インストール

$ python -m pip install pipdeptree

pipdeptree コマンドで依存関係が表示される

  • pipdeptree では、インストールされているパッケージについての依存関係がわかる
  • [ required: 〜 要求されるバージョン、installed:〜 実際にインストールされているバージョン ]
    • packaging もパッケージ(ライブラリ)のこと(毎行表示されている?)
    • 例だと、pikepdfの依存関係にあるパッケージは、deprecation, lxml(4.8以上), packaging, Pillow(9.0以上)ということがわかる