先月同じようなタイトルの記事を書いたけど……
pip
コマンドの --find-links
オプションを使えば、パッケージファイルを放り込んだディレクトリを指定するだけでインストールすることができた。のだけれど、poetry を使うときにはこの方法ではダメだった。結局のところ PyPI.org 相当のプレイべートなリポジトリサーバを立ててやる必要がある。
選択肢としては pypiserver っていうパッケージがあって、それは知ってたんだけど、設定とか面倒そうだと勝手に思ったので今までやってみなかった。ところが今日試してみたら存外に簡単にできたのでメモしておくことにする。記事のタイトルにもあるように環境は Windows。
pypiserver 自体は pip
コマンドでインストールできる。
takatoh@montana: Documents > pip install pypiserver Looking in links: http://nightschool/py-packages/ Collecting pypiserver Using cached pypiserver-1.4.2-py2.py3-none-any.whl (77 kB) Installing collected packages: pypiserver Successfully installed pypiserver-1.4.2
これで完了。以下のようにインストールされてるのが確認できる。
takatoh@montana: Documents > pip list | grep pypiserver pypiserver 1.4.2
つぎに、パッケージファイルを置いておくフォルダを作る。
takatoh@montana: Documents > mkdir py-packages Directory: C:\Users\takatoh\Documents Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2021/10/19 20:32 py-packages
で、ここに自作のパッケージファイルを放り込んだ。
takatoh@montana: Documents > ls py-packages Directory: C:\Users\takatoh\Documents\py-packages Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2021/10/17 18:51 4035 brs-0.8.1-py3-none-any.whl
あとは pypi-server
コマンドで起動すれば準備は完了。
takatoh@montana: Documents > pypi-server -p 8080 ./py-packages
-p 8080
オプションでポートを、引数でパッケージファイルの入っているフォルダを指定している。
さて、別のコンソールを立ち上げて pip install
してみる。--extra-index-url http://localhost:8080/simple/
オプションでローカルホストに立てた pypiserver の URL を指定している。
takatoh@montana: takatoh > pip install --extra-index-url http://localhost:8080/simple/ brs Looking in indexes: https://pypi.org/simple, http://localhost:8080/simple/ Looking in links: http://nightschool/py-packages/ Collecting brs Downloading http://localhost:8080/packages/brs-0.8.1-py3-none-any.whl (4.0 kB) Requirement already satisfied: click<9.0.0,>=8.0.1 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from brs) (8.0.1) Requirement already satisfied: PyYAML<6.0.0,>=5.4.1 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from brs) (5.4.1) Requirement already satisfied: requests<3.0.0,>=2.26.0 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from brs) (2.26.0) Requirement already satisfied: colorama in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from click<9.0.0,>=8.0.1->brs) (0.4.4) Requirement already satisfied: idna<4,>=2.5 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from requests<3.0.0,>=2.26.0->brs) (3.2) Requirement already satisfied: certifi>=2017.4.17 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from requests<3.0.0,>=2.26.0->brs) (2021.5.30) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from requests<3.0.0,>=2.26.0->brs) (1.26.7) Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\takatoh\appdata\local\programs\python\python39\lib\site-packages (from requests<3.0.0,>=2.26.0->brs) (2.0.6) Installing collected packages: brs Successfully installed brs-0.8.1
Looking in indexes:
で始まる行で、PyPI.org とローカルに立てた pypiserver を見に行ってるのがわかる。つづく Looking in links:
で始まる行では、先日の記事で設定したパッケージファイルの置いてある場所を探しに行っている。結果として、ローカルの pypiserver からダウンロードしてインストールしてるのがわかる。
サーバ側にはこんなふうに出力されていた。
127.0.0.1 - - [19/Oct/2021 20:35:27] "GET /simple/ HTTP/1.1" 200 207 127.0.0.1 - - [19/Oct/2021 20:35:27] "GET /favicon.ico HTTP/1.1" 404 711 127.0.0.1 - - [19/Oct/2021 20:36:42] "GET /simple/brs/ HTTP/1.1" 200 301 127.0.0.1 - - [19/Oct/2021 20:36:45] "GET /packages/brs-0.8.1-py3-none-any.whl HTTP/1.1" 200 4035
というわけで、Windows でもローカルに pypiserver を立てるのは簡単だということが分かった。
あとはこれをサービスとしてバックグラウンドで動かせれば、poetry からも使えるようになる(はず)。それはまた今度。