Python + Docker + Poetry開発環境を構築してみる

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

こんにちは!たぬきうどんです!

私は2018年に非IT業界から未経験でエンジニアに転職し、現在までエンジニアとして働いています。

この記事ではPython + Docker + Poetry開発環境の構築方法について書いています。

Dockerを使用することで、環境を汚染することなくPython + Poetry環境を構築できるので、Docker環境でPython + Poetryを使ってみたいと思っている方はぜひご覧ください!

Poetryとは

PoetryPythonのパッケージ管理ツールです。

Poetryを使用することでプロジェクトが依存しているライブラリの管理が楽になります。

環境構築方法

環境

今回の実行環境&エディタは下記です。

  • Windows OS
  • Docker
  • Visual Studio Code

また、下記のVisual Studio Codeの拡張を使用します。

  • Remote-Containers(ms-vscode-remote.remote-containers
  • Python(ms-python.python
  • Pylance(ms-python.vscode-pylance

1.Dockerfile作成

まず、Dockerfileを作成しましょう。

Dockerfile
FROM python:3.9-buster

RUN apt-get update &&\
    apt-get -y install locales &&\
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN pip install --upgrade pip
RUN curl -sSL https://install.python-poetry.org | python -

ENV PATH /root/.local/bin:$PATH

Poetryはcurl -sSL https://install.python-poetry.org | python -でインストールするようにします。

インストール後にはENV PATH /root/.local/bin:$PATHにて環境変数PATHにPoetryのパスを設定しておきます。

2024/05/25追加

Poetry の公式ドキュメントでは、Docker コンテナ使用時も仮想環境を有効にすることが推奨されているようです。  

詳しくはPoetry の公式ドキュメントを参照してください。

そのため、以下の仮想環境のOFF化については行わないようにします。

また、仮想環境については実行環境がコンテナ環境であるため特に必要がありません。

poetry config virtualenvs.create falseをコンテナ内で実行するようにしておき、Poetryが仮想環境を作成しないようにしておきましょう。

2.コンテナを起動し、コンテナ内に入る

それではコンテナを起動しましょう。

上記のDockerfileを起点にRemote-Containersを使用して、コンテナを起動しましょう。

VS Codeのステータスバー左部にある緑の><のところを押して、

Reopen in Containerを選択。

From 'Dockerfile'を選択します。

コンテナのビルド&起動に成功すれば、VS Codeのステータス左部が

に変わり、コンテナ内に入ります。

また、作業フォルダ下にコンテナ内のVS Codeの設定ファイルである.devcontaine/devcontainer.jsonが作成されます。

3.プロジェクトの初期化

それではプロジェクトを初期化します。

今回はexample-appというプロジェクト名で初期化します。

以下のコマンドを実行します。

$ poetry new example-app

初期化に成功すると以下のようなプロジェクトが生成されます。

example-app
├── pyproject.toml
├── README.rst
├── example-app
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_example_app.py

パッケージを入れたい場合は作業ディレクトリをexample-appを移し、

poetry add 入れたいパッケージ名

で入れることができます。

4.拡張機能のインストールとVS Codeの設定

続いてVS Codeの拡張機能をイントールします。

前述したPython用の拡張機能Pylanceをコンテナ内にインストールしてください。

インストールが終了したら、拡張機能等の適応をするためにVS Codeの左下部の緑の部分を押下し、Rebuild Containerを選択し、VS Codeの再読み込みしましょう。

拡張機能のインストールが終了したら、Pylanceの設定をしておきます。

ルートディレクトリに.vscodeディレクトリを作成し、その下にsettings.jsonファイルを作成します。

作成が終了したら、以下の設定を定義します。

settings.json
{
    "python.analysis.typeCheckingMode": "strict",
    "python.analysis.extraPaths": [
        "/path/to/poetry/cache/virtualenvs/test-example-py3.10/lib/python3.10/site-packages"
    ],
    "python.languageServer": "Pylance"
}

"python.analysis.typeCheckingMode": "strict"とすることで厳格な型チェックをするようにします。

また、インポートしたモジュールのパス解決のためにpython.analysis.extraPathsでインポート先を明示的に定義しておきます。

インポート先の確認方法はpoetry env infoコマンドを使用し、仮想環境の場所を確認します。

実行結果は下記の例のとおりになります。

$ poetry env info

Virtualenv
Python:         3.10.1
Implementation: CPython
Path:           /path/to/poetry/cache/virtualenvs/test-example-py3.10
Valid:          True

Base
Platform: darwin
OS:       posix
Python:   /path/to/main/python 

Path項目のパスの下層にlib/python3.10/site-packagesがあると思うので、確認してください。

このディレクトリがパッケージのインストール先になりますので、"python.analysis.extraPaths"に定義してImport解決できるようにしておきます。

また、上記の設定はワークスペースのみが影響範囲となっていますが、コンテナ全体に設定を適応させたい場合は.devcontaine/devcontainer.jsonsettings内に上記の設定を定義します。

以上でPython + Docker + Poetry開発環境の構築は終了です。

お疲れ様でした!

さいごに

以上がPython + Docker + Poetry開発環境構築方法でした。

Dockerを使用することで、環境を汚すことなくPython + Poetry実行環境が構築できます。

「Poetryを更に知りたい!」というかたは公式のドキュメントを見てみてください。

この記事が皆さんの助けになれば幸いです!

最後まで読んでいただき、ありがとうございました!

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です