仕事で使うちょっとしたツール(大抵はテキスト処理のツール)を Python で書いたりしてるんだけど、一つ不便なことがある。職場のネットワークから PyPI にアクセスできないんだ。
まぁ、セキュリティだの何だの考えるとインターネットへのアクセスを制限するのもわからないではない。
幸いブラウザでは繋がるので、ファイルを一つずつダウンロードしてからインストールすることは可能で、今までそうやってたんだけど不便なことこの上ない。パッケージがファイル一つで済むならまだいいんだけど、他のパッケージに依存してたりすると、正直やる気が失せてくるし、同僚に使ってもらおうというときにもハードルが高い。
さて、今日になって pip install
コマンドの --find-links
オプションでパッケージ置き場の URL を指定できることを知った。pypiserver みたいな PyPI クローンのサーバじゃなくて、ディレクトリにパッケージファイルを置いておくだけでいい。
早速、自宅の HTTP サーバにディレクトリを公開して試してみた。こんな感じ。
takatoh@apostrophe:~$ pip install filtre --find-links http://nightschool/py-packages/ --trusted-host nightschool Looking in links: http://nightschool/py-packages/ Collecting filtre Downloading http://nightschool/py-packages/filtre-0.1.0-py3-none-any.whl (1.9 kB) Installing collected packages: filtre Successfully installed filtre-0.1.0
http://nightschool/py-packages/
がパッケージファイルを置いてあるディレクトリの URL。--trusted-host nightschool
オプションを指定してるのは HTTPS
じゃなくて HTTP
だから。filtre ってのは自作のパッケージね。
さらに、Windows なら file:
スキーマでも行ける。上のディレクトリは Samba で共有フォルダにしてあって file://nightschool/shared/py-packages/
でアクセスできるので、こうすればいい。
takatoh@montana: Documents > pip install filtre --find-links file://nightschool/shared/py-packages/ --user Looking in links: file://nightschool/shared/py-packages/ Processing \\nightschool\shared\py-packages\filtre-0.1.0-py3-none-any.whl Installing collected packages: filtre Successfully installed filtre-0.1.0
やぁ、これでだいぶ楽になるぞ。
ちなみに、パッケージファイルをダウンロード(インストールじゃなくて)するには pip download
コマンドを使えば依存パッケージも含めてダウンロードしてくれる。使いそうなパッケージを自宅でダウンロードしたら、職場に持っていってまとめて適当な共有フォルダに放り込んでおけばいい。
[追記]
pip install
コマンドの --find-links
オプションや --trusted-host
オプションは、pip の設定ファイルに書いておけばいちいち指定しなくてもいい。こんな感じ。
[install] find-links = http://nightschool/py-packages/ trusted-host = nightschool
pip の設定ファイルは、Linux なら ~/.conf/pip/pip.conf、Windows なら %APPDATA%\pip\pip.ini。