一昨日、Windows 10 上に pypiserver で立てたプライベートリポジトリから pip
コマンドでパッケージをインストールできたので、今日は Poetry が使えるか試してみた。
まずは pypi-server
コマンドでサーバを起動してプライベートリポジトリを作っておく。
takatoh@montana: Documents > pypi-server -p 8080 ./py-packages
別のターミナルを開いて、Poetry で新しいプロジェクトを作って中に移動する。
takatoh@montana: Documents > poetry new py-sample Created package py_sample in py-sample takatoh@montana: Documents > cd py-sample
Poetry にプライベートリポジトリを登録する。
takatoh@montana: py-sample > poetry config repositories.local http://localhost:8080/simple/
リポジトリの名前が local
で、その URL が http://localhost:8080/simple/
だ。
つづいて pyproject.toml ファイルにプライベートリポジトリを参照するように次を追記する。
[[tool.poetry.source]] name = "local" url = "http://localhost:8080/simple/"
これで準備は完了。poetry install
や poetry add
でパッケージをインストールできるはず。あと、キャッシュを削除しておくのを忘れずに(まだ直ってない)。今回は PyPI.org には公開してない、自作の outputdatareader っていうパッケージを追加してみた。
takatoh@montana: py-sample > poetry add outputdatareader Using version ^0.1.0 for outputdatareader Updating dependencies Resolving dependencies... Writing lock file Package operations: 11 installs, 0 updates, 0 removals • Installing pyparsing (2.4.7) • Installing atomicwrites (1.4.0) • Installing attrs (21.2.0) • Installing colorama (0.4.4) • Installing more-itertools (8.10.0) • Installing packaging (21.0) • Installing pluggy (0.13.1) • Installing py (1.10.0) • Installing wcwidth (0.2.5) • Installing outputdatareader (0.1.0) • Installing pytest (5.4.3)
無事インストールできた。
ちなみに、プライベートリポジトリには outputdatareader パッケージしか置いてないから、ほかのパッケージは PyPI.org からインストールしてる。
サーバ側のターミナルにはこんなふうに出力されている。
127.0.0.1 - - [22/Oct/2021 22:41:31] "GET /simple/outputdatareader/ HTTP/1.1" 200 353 127.0.0.1 - - [22/Oct/2021 22:41:33] "GET /simple/outputdatareader/ HTTP/1.1" 200 353 127.0.0.1 - - [22/Oct/2021 22:41:36] "GET /simple/pyparsing/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/atomicwrites/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/packaging/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/more-itertools/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/py/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/attrs/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/pluggy/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/colorama/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:42] "GET /simple/wcwidth/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:48] "GET /simple/outputdatareader/ HTTP/1.1" 200 353 127.0.0.1 - - [22/Oct/2021 22:41:48] "GET /simple/pytest/ HTTP/1.1" 303 0 127.0.0.1 - - [22/Oct/2021 22:41:50] "GET /packages/outputdatareader-0.1.0-py3-none-any.whl HTTP/1.1" 200 2016
outputdatareader 以外のパッケージではステータスコードが 303 (See Other)になってる。つまりプライベートリポジトリには無いってことで、そうすると Poetry は PyPI.org に探しに行く。最後の行から、プライベートリポジトリからは outputdatareader-0.1.0-py3-none-any.whl ファイルだけがダウンロードされてるのがわかる。
というわけで、今日はここまで。