GitHub CodespacesでPoetryによるPython開発環境を作る
今更ながらCodespacesを使って、PoetryによるPythonの開発環境を作ったりしてみました。
準備
リポジトリを作成
まずはGitHubでリポジトリを作成しましょう。
今回は空のリポジトリから作っていきます。
記事内ではリポジトリ名をtutorial
とします。
別名にする場合は適宜置き換えてください。
また、まったく空のリポジトリではCodespacesを使用できないので、リポジトリ作成時にADD a README file
にチェックを入れておきましょう(initial commitさえできれば良いので何でも良い)
READMEを追加
環境設定
Codespacesを開く
早速Codespacesを開いていきましょう。
リポジトリのトップページ右上に緑色のCode
ボタンがあるので押しましょう。
押すとメニューが開くので、Create codespace on main
ボタンを押しましょう。
押してしばらくするとCodespaceが起動し、通常のVSCodeと同様の画面が表示されます。
Codespace
ターミナルに
👋 Welcome to Codespaces! You are on our default image.
- It includes runtimes and tools for Python, Node.js, Docker, and more. See the full list here: https://aka.ms/ghcs-default-image
- Want to use a custom image instead? Learn more here: https://aka.ms/configure-codespace
とあるようにこのままでもある程度の環境は勝手に用意されています。
が、今回はPoetryを使用したいので、環境のセットアップをこの後していきます。
Dockerfileを作成
まずはDockerfileを作成します。
Codespaces上でDockerfile
をtutorialディレクトリ直下に作成してください。
Dockerイメージは今回python:3.11
にしました。
FROM python:3.11
WORKDIR /workspaces/tutorial
# install python package
COPY ./pyproject.toml* ./poetry.lock* ./
RUN pip install poetry \
&& poetry config virtualenvs.create false
RUN poetry install
DockerfileでPoetry本体のインストールとライブラリのインストールをするよう指定します。
poetry config virtualenvs.create false
の設定はPoetryが仮想環境を作成するかを設定する項目です。
今回はDocker上とすでに切り離された環境であるため今回はfalseとしておきます。
現時点でのディレクトリ構成
/workspaces/tutorial
|--README.md
|--Dockerfile
devcontainer.jsonを作成
作成したDockerfileを使って、環境のセットアップを行うよう設定していきます。
新しく.devcontainer
ディレクトリを作成して、その下にdevcontainer.json
を作成します。
{
"name": "Python 3",
// 先程作ったDockerfileを指定する
"dockerFile": "../Dockerfile",
"customizations": {
// vscodeの設定や拡張機能を指定できる。お好みで。
}
}
現時点でのディレクトリ構成
/workspaces/tutorial
|--.devcontainer
| |--devcontainer.json
|--README.md
|--Dockerfile
poetry init
最後にPoetryの設定ファイルpyproject.toml
とpoetry.lock
を作成していきます。
まずはpoetry本体をインストール。
➜ /workspaces/tutorial (main) $ pip install poetry
からのpoetryの初期化をします。
色々聞かれますが、基本はEnterで飛ばしていけばOKです。
Would you like to define your development dependencies interactively?
と聞かれますが、記事的に分かりにくくなるので一旦no
としておきます。
➜ /workspaces/tutorial (main) $ poetry init
This command will guide you through creating your pyproject.toml config.
Package name [tutorial]:
Version [0.1.0]:
Description []:
Author [hoge <fuga@example.com>, n to skip]:
License []:
Compatible Python versions [^3.10]:
Would you like to define your development dependencies interactively? (yes/no) [yes] no
Generated file
[tool.poetry]
name = "tutorial"
version = "0.1.0"
description = ""
authors = ["hoge <fuga@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes]
完了したらpyproject.toml
が作成されているはずです。
次になにか適当なライブラリを追加しておきましょう。
ここではblackを追加します。
➜ /workspaces/tutorial (main) $ poetry add black
追加が完了したらpoetry.lock
が作成されるはずです。
現時点でのディレクトリ構成
/workspaces/tutorial
|--.devcontainer
| |--devcontainer.json
|--README.md
|--Dockerfile
|--poetry.lock
|--pyproject.toml
コンテナのリビルド
さて、設定ファイルの記載が完了したので、コンテナを再度ビルドしていきます。
(現在はまだデフォルトで用意された環境)
Ctrl
+Shift
+P
でVSCodeのメニューを開き、>rebuild
と入力すると、
Codespaces: Rebuild Container
と候補が出てくるので選択し、リビルドを開始します。
これで今まで作成した設定ファイルからコンテナが再生成されます。
リビルドが完了したら動作確認としてblackのコマンドを動かしてみます。
root@codespaces-d96b10:/workspaces/tutorial# black --version
black, 24.1.0 (compiled: yes)
Python (CPython) 3.11.7
以上で開発環境の完成です。
所感
開発をGitHub上のみで行うことができ、ローカルの環境が汚れないのがとても良いです。
ローカルの環境を汚すのが嫌で個人開発に手が伸びない場面が多かったので、今後ガシガシと活用していきたいところです。
Discussion