Poetryについて Today(※最近) I learnedです
Poetry、開発者が作った仮想環境があれば、.venvという名前に限るけど、使ってくれるんだなhttps://t.co/4FhBrsyluF
— nikkie / にっきー 技書博 け-04 Python型ヒント本 (@ftnext) 2024年8月17日
>If not set explicitly, poetry by default will create a virtual environment under {cache-dir}/virtualenvs or use the {project-dir}/.venv directory if one already exists.
目次
- 目次
- virtualenvsの下に仮想環境を作るPoetry
- Poetryは.venvという名前の仮想環境があったら使う
- 設定項目virtualenvs.in-project
- 感想(終わりにに代えて)
virtualenvsの下に仮想環境を作るPoetry
先日Poetryを導入したDjangoプロジェクトを例にします1。
https://github.com/ftnext/django-bad-apps/tree/dd70560bd9f9fb26ec7630d7462f6bf45e8f2959/sql-injection
.
└── sql-injection/
├── bad_sql_injection/
├── poetry.lock
└── pyproject.toml
poetry.lockがあるsql-injectionディレクトリでpoetry installを実行すると2、Poetryはvirtualenvsの下に仮想環境を作って管理します。
macOSでの実行ログです。
% poetry --version Poetry (version 1.8.2) % poetry install Creating virtualenv sql-injection-FRKQhDpu-py3.10 in /Users/<ユーザ名>/Library/Caches/pypoetry/virtualenvs
Poetryが管理する仮想環境はpoetry envで確認・操作できます。
% poetry env list sql-injection-FRKQhDpu-py3.10 (Activated) % poetry env remove sql-injection-FRKQhDpu-py3.10 Deleted virtualenv: /Users/<ユーザ名>/Library/Caches/pypoetry/virtualenvs/sql-injection-FRKQhDpu-py3.10
削除しておきました。
Poetryは.venvという名前の仮想環境があったら使う
sql-injectionディレクトリに人力で仮想環境を作ってからpoetry installしてみましょう。
% python -V Python 3.10.9 % python -m venv .venv --upgrade-deps % poetry install
Poetryは.venvを使ってくれるんです!
% poetry env list .venv (Activated)
依存が入ったことの確認です
% .venv/bin/pip list Package Version ----------------- ------- asgiref 3.8.1 Django 4.2.15 django-environ 0.11.2 pip 24.2 psycopg2 2.9.9 setuptools 72.2.0 sqlparse 0.5.1 typing_extensions 4.12.2
設定項目virtualenvs.in-project
この動きはドキュメントにも記載されていました。
https://python-poetry.org/docs/configuration#virtualenvsin-project
virtualenvs.in-projectのデフォルト値はNoneです。
If not set explicitly, poetry by default will create a virtual environment under
{cache-dir}/virtualenvsor use the{project-dir}/.venvdirectory if one already exists.
(意訳)virtualenvs.in-projectを明示的に設定しない場合、poetryはデフォルトで
{cache-dir}/virtualenvsの下に仮想環境を作る- または、すでに存在するならば
{project-dir}/.venvディレクトリを使う
Today I learnedは、この後者の振る舞いです。
例えば(Poetryに慣れた方は別の方法をとるのかもしれませんが)VS Codeのpython.defaultInterpreterPathと相性がよさそうに思いました。
感想(終わりにに代えて)
Poetryの実装、気になりますね。
- .venvがあったらそれを使う
- 名前が.venv縛りなのは、なんでなんだろう
- 執筆に当たりvirtualenvsの下の仮想環境を何回か作ってみたが、ランダムな文字列に見える部分は再現した。どうやってるんだろう
意地悪してみたところ、魔法が起きました
% python -m venv .venv --without-pip % .venv/bin/pip list zsh: no such file or directory: .venv/bin/pip % poetry install
インストールできてるううう!!
poetry run pip listで内訳が見られるんですが、いったいぜんたいどうやったのか。
Ryeのような魔法を使ったのかな