Pythonの活用で欠かすことのできないパッケージやライブラリ。
しかし、それらを社内やローカルネットワークが関わる環境でpipインストールしようとすると、セキュリティやプロキシなどの問題に阻まれることが少なくありません。
そこで本記事では、その解決方法を解説します。
※記事後半では、依存関係のパッケージファイルをフォルダにまとめて一括でインストールを行う方法も解説します!!
社内でpipインストールを行う流れ
1.PyPIの公式HPで欲しいパッケージファイルをダウンロード
2.コマンドプロンプトにて、ダウンロード先(保存先)に“cd”移動
3.コマンドを用いてオフライン インストール
4.(依存パッケージがあれば)依存確認用の“pipdeptree パッケージ”を1~3と同様にインストール
5.pipdeptreeで依存関係を確認
6.必要だと判明したパッケージを1~3の手順でインストール
手順の解説
PyPI公式からパッケージファイルをダウンロード
本記事では、例題として【人の姿勢を推定するためのパッケージ】である“mediapipe”をインストールしていきます。(もちろん、実際は読者の欲しいパッケージで構いません)
まずは、公式HPでパッケージを検索し、お使いのpython環境に合った【.whl】(wheelファイル)をダウンロードします。【DLページまでの行き方は下図の通りです】
【公式HPにて検索】 リンク: PyPI公式HP
【パッケージを選択】
【ダウンロードページに移動】
【ダウンロードページにてDL】
※ポイント! お使いのPythonバージョンとOSに適したファイルをダウンロードしてください。(仮に間違ってもインストールできないだけなのでご安心を)
例:Python 3.10 Windows 64bit ⇒ ファイル名称の末尾が cp310-win_amd64
【フォルダに保存】
場所は問いませんので、フォルダに保存してください。(ダウンロードフォルダでも構いません)
コマンドプロンプトで保存先に“cd”移動
ここからは、パッケージファイルを保存したフォルダで作業します。
コマンドプロンプトを開き、【 cd “保存先の絶対パス” 】を入力して実行してください。
例えば、デスクトップの“test_”というフォルダに保存した場合は以下の通りです。
cd C:\ユーザーグループ名\ユーザー名\Desktop\tests_ ### 例
コマンドを用いてオフラインインストール
以下のコマンドを実行することでオフラインでのpipインストールが開始されます。
pip install --no-deps xxxxx.whl
pip install --no-deps mediapipe-0.8.9.1-cp310-cp310-win_amd64.whl ### 例
※ pip自体のバージョンが足りなくて失敗する場合は、ここまでと同様の手順で最新のpipを再インストールしてください。
さて、以上の手順でパッケージが使用できれば完了ですが、mediapipeのように高機能なモノは必ずと言っていいほど依存パッケージが存在します。
そこで次項では、依存パッケージを一度に調べるためのパッケージをインストールします。
依存パッケージがあった場合 ⇒ pipdeptree のインストール
依存パッケージが存在するためにパッケージが動作しない場合は、ここまでと同様の手順で【 pipdeptree 】というパッケージをpipインストールします。 リンク:PyPI:pipdeptree ダウンロードページ
このパッケージは、pythonにpipインストールされているパッケージをツリー形式でコマンド上に表示してくれるパッケージです。(次項で実行します)
pip install --no-deps pipdeptree-2.2.1-py3-none-any.whl # 2022/02/13当時の最新
パッケージの依存関係を確認
コマンドプロンプトにて【 pipdeptree 】と入力、実行してください。
作業フォルダ(ディレクトリ)は問いませんが、上手くいかない場合はコマンドプロンプトを開き直してから実行してみてください。
ちなみに mediapipe の場合は以下のように表示されます。
mediapipe==0.8.6.2
- absl-py [required: Any, installed: 0.13.0]
- six [required: Any, installed: 1.12.0]
- attrs [required: >=19.1.0, installed: 19.1.0]
- matplotlib [required: Any, installed: 3.1.3]
- cycler [required: >=0.10, installed: 0.10.0]
- six [required: Any, installed: 1.12.0]
- kiwisolver [required: >=1.0.1, installed: 1.1.0]
- setuptools [required: Any, installed: 41.2.0]
- numpy [required: >=1.11, installed: 1.21.5]
- pyparsing [required: >=2.0.1,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.2]
- python-dateutil [required: >=2.1, installed: 2.8.0]
- six [required: >=1.5, installed: 1.12.0]
- numpy [required: Any, installed: 1.21.5]
- opencv-contrib-python [required: Any, installed: 4.2.0.34]
- numpy [required: >=1.14.5, installed: 1.21.5]
- protobuf [required: >=3.11.4, installed: 3.17.3]
- six [required: >=1.9, installed: 1.12.0]
- six [required: Any, installed: 1.12.0]
- wheel [required: Any, installed: 0.37.0]
うん、多いですね。
そして、これらの依存パッケージは、――たとえばnumpyがインストールされていなければ【 numpy [required: >=1.11, installed: ? 】となり、必要なパッケージが必要なバージョン以上で全てインストールしなければ、希望のパッケージは動作しません。
一番手っ取り早いのが、それら全てを本記事の方法でインストールしていくことです。(でも、面倒くさいですね?)
そこで、これらの依存パッケージを希望のパッケージ(筆者の場合 mediapipe)と同じフォルダにまとめることで一度にインストールしてくれるコマンドが存在するようです。 ⇒ 存在しましたので次項で解説します!!
以下に示します、がッッッ……、筆者の環境ではまだ成功していないので、自己の責任にてお願いいたします。(すみません(ペコリ) 頑張って検証します)(2022/02/13記入)
EX. パッケージファイルをフォルダにまとめて一括インストールする方法!!
今回筆者は、“spyder”というPythonの開発環境を新たに導入するため、この方法に挑戦しました。
やっとのことで成功したので、ここに改めて解説します!
1.まずは希望のパッケージ単体(.whl)をDL&インストール
2.pipdeptree にて、依存関係にあるパッケージを確認
3.依存関係にあったパッケージ全てと、(1)でDLしたパッケージを同じフォルダにまとめる
4.コマンドプロンプトにて、(3)で作成したフォルダの“一つ上”の階層まで“cd移動”
5.一括インストールコマンドを起動
手順1と2は、本記事の前半の通りです。
公式HPから .whlファイルをダウンロードして、インストール。その後、依存関係を確認してください。
3も、ご説明する必要はないでしょう。
4から説明します。
コマンドプロンプトにて、(3)で作成したフォルダの“一つ上”の階層まで“cd移動”
もしも全ての .whlファイルを C:\ユーザーグループ名\ユーザー名\Documents\packages に保存したとしたら、コマンドプロンプト上で、cd C:\ユーザーグループ名\ユーザー名\Documents を実行して、保存フォルダの一つ上の階層に移動してください。
コマンドで一括インストール
それでは、以下のコマンドを実行して、インストールを開始してください。
文字間の扱いや、上手くいかない場合は、その下のポイントを読んでみてください。
pip install --no-index --find-links=【全てを保存したフォルダの名前】 【パッケージの名前】
pip install --no-index --find-links=packages spyder_kernels ### 例
1. –findes-links= と保存したフォルダ名の間はスペースを空けないこと(本記事は表示上空いているように見えるかもしれません。すみません<(_ _)>ペコリ)
2. フォルダ名とファイル名は半角スペースで一つ開けること
3-1.パッケージの名前は、オンラインでpipインストールをする際の【 pip install xxx-xxx 】の xxx-xxx部分を入力すること (PyPI公式を参照)
3-2.ただし、中間のハイフン(-)が アンダーバー(_)で認識されることもあるので、試してみてください
最後に
いかがでしたでしょうか。
今の時代、社内でPythonやその他の言語を活用する機会も多くなっていますが、(というか、もっと活用していかなければならないと思うのですが)、それに対して、ネットなどの社内環境がすぐに追い付くかといえば、当然そうではありません。
そのような社会にあって、本記事のように、これからも“すきま的に”役立つ情報を発信していけたらと思います。
ブクマして頂いて備忘録として活用して頂けると幸いです。
個人的なことですが、当ホームページの記事やプロフィールを見て嗜好や趣味が合う方、募集しています。
肩肘張らないラフなメールから始めて、好きな時にチャットやネットで雑談でもして、もしスケジュールが合わなければまた今度、といったような、ゆったりしたコミュニケーションをしましょう。(詳しくはプロフィールにて)
それでは、良いプログラミングライフを!!