はじめに
Poetryを使ってパッケージ管理しつつ、IDEはIntellijを使いたい。今回はそんな開発環境を整えました。
最新情報
背景
Pipenvの開発が止まっていて、色々とパッケージ管理がうまくいかなくなってきたことがあり、メンバーがPoetryに移行しました。それに伴い、現状の私の開発環境(Docker+Intellij)が動かなくなりました。原因はデフォルトではPoetryを使うと以下のようなコマンドを期待するからです。
$ poetry run python hoge.py
現在(2020/3/6)、IntellijではDockerであろうがなんであろうが上記のコマンドを受け付けることができない(やり方を知っている方がいれば教えてほしい)ので、別のやり方を模索しました。
別のやり方を見つけました。ヒントは poetry config virtualenvs.create false
IntellijへのFeature Requestはあるので、そのうち対応してくれるはず。 https://youtrack.jetbrains.com/issue/PY-30702
前提条件
- Poetry 1.0.5
- Poetryでライブラリ管理を既にしている
- Intellijを使っている
IntellijからPoetryの環境を見る方法
プロジェクト配下に venv
を作る
Poetryはデフォルトではユーザーディレクトリ配下に仮想環境を作ります。しかし我々は複数のプロジェクトを持っているので、このままだと容易にライブラリのバージョンがコンフリクトします(だからDockerを使っているわけで)。なので、ベスプラであるvenvやvirtualenvと同じように使えるようにします。 現在の設定を確認します。
$ poetry config --list
cache-dir = "/Users/keigohtr/Library/Caches/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /Users/keigohtr/Library/Caches/pypoetry/virtualenvs
virtualenvs.in-project = true
になれば、プロジェクト配下に仮想環境を作ります。下記コマンドを実行します。
$ poetry config virtualenvs.in-project true
Poetryを一度でも実行していると、既に仮想環境が作られています。それを削除します。 virtualenvs.path
が仮想環境なので、各々の環境に読み替えてください。
$ rm -rf /Users/keigohtr/Library/Caches/pypoetry/virtualenvs/
作業用のプロジェクトに移動します。既にIntellij等で venv
を作っていた場合は削除しておきます。
$ cd path/to/your/project
$ rm -rf .venv/
Poetryで仮想環境を作成します。
$ poetry install
Intellijから venv
を参照する
"Project Structure" (ctrl + ;) から "Platform Settings" -> "SDKs" と移動し、 "+" ボタンから新規のPython Interpreter追加画面を開いてください。"Existing environment"を選択し、先程作成したvenvのpython interpreterを指定すれば完了です。
おわりに
厳密なProduction環境の再現のために、Intellij環境でDockerからPoetryのPython Interpreterを触れるようにしてほしい・・・やり方を知っている方が居たら是非教えてほしい。