Apitore blog

Apitoreを運営していた元起業家のブログ

Poetry + Intellijで開発環境を整える

はじめに

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を触れるようにしてほしい・・・やり方を知っている方が居たら是非教えてほしい。