Pythonの開発環境構築

# はじめに
個人的なメモです。
更新していく予定です。

# 対象者
- python の環境をdevcontainer を使って作りたい人

# 使用したマシンについて
- macOS Monterey
- MacBook Pro 
- Vscode ver 1.70.1

# Pythonの開発環境を構築する
1.  ディレクトリ作成
1.  Dockerfile & devcontainer.json 作成
1.  poetry の追加, python 周辺の設定など

## 1.ディレクトリの作成
今回は, `python-dev-template` と言う名称でディレクトリを作成しました。
github にも残しておこうと思うので, リポジトリの作成も行いました。
作成後, リポジトリの初期案内に沿ってREADME を作成しただけのリポジトリです。

![スクリーンショット 2022-10-11 22.10.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298059/0e12a0fc-450d-20b3-11f0-d07c5fa05728.png)


## 2. Dockerfile & devcontainer.json 作成
Vscode の 拡張機能 devcontainer を使うため,`Dockerfile` と `devcontainer.json` を作成します。

`.devcontainer` ディレクトリを作成して ディレクトリ内に以下の内容で`Dockerfile` と `devcontainer.json` を追加していきます. 
 

```:Dockerfile
FROM python:3.11-slim-bullseye
RUN apt-get update && apt-get install -y \
    git
```

```:devcontainer.json
{
    "name": "Python 3.11 dev",
    "context": "..",
    "dockerFile": "Dockerfile",
    "customizations": {
        "vscode": {
            "settings": {
                "terminal.integrated.profiles.linux": {
                    "zsh": {
                        "path": "zsh"
                    }
                },
                "python.pythonPath": "/usr/local/bin/python"
            },
            "extensions": [
                "ms-python.python",
                "kevinrose.vsc-python-indent",
                "editorconfig.editorconfig"
            ]
        }
    }
}

```

ここで devcontainerを起動してコンテナ内に入れることを確認したら, コミットしておきます。

差分を追いやすいように, PR出しました。

~~https://github.com/syokoysn/python-dev-template/pull/1~~

https://github.com/syokoysn/python-dev-template/pull/3


## 3. poetry の追加, python 周辺の設定など

poetry を使えるようにするため, Dockerfile に変更を入れます.
まず poetry の追加です. 
以下のように`Dockerfile`を書き換えて,devcontainer を再度 build しなおします。


```:Dockerfile
FROM python:3.11-slim-bullseye
RUN apt-get update && apt-get install -y \
    git

ENV PYTHONDONTWRITEBYTECODE 1 \
    PYTHONUNBUFFERED 1 \
    POETRY_VERSION=1.4.2

RUN apt-get update && apt-get install -y \
    git \
    curl 

RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python3 - && \
    ln -s /opt/poetry/bin/poetry /usr/local/bin/poetry

```

立ち上げた後に,
```
poetry init 
```
とコマンドを打って,いくつかの質問に答えて`pyproject.toml`を作成します。

`pyproject.toml` 内の`packages`の部分は使わないので削除します。
以下の一行を削除

```:pyproject.toml
packages = [{include = "python_dev_template"}]
```

気になる方は, 以下のリンクで確認してみてください。

https://python-poetry.org/docs/pyproject/#packages

次に開発時に使用するパッケージをインストールします。
ここでは, black と flake8をインストールしました。

```
poetry add --group dev black flake8
```
上記のコマンド入力後, `poetry.lock` が作成されているはずです。

`pyproject.toml`と `poetry.lock` の二つのファイルができたので,
コンテナ立ち上げ時に 必要なパッケージをインストールするように, `Dockerfile` の更新も行います。
以下のように変更しました。

```:Dockerfile
FROM python:3.11-slim-bullseye
RUN apt-get update && apt-get install -y \
    git

ENV PYTHONDONTWRITEBYTECODE 1 \
    PYTHONUNBUFFERED 1 \
    POETRY_VERSION=1.4.2

RUN apt-get update && apt-get install -y \
    git \
    curl 

RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python3 - && \
    ln -s /opt/poetry/bin/poetry /usr/local/bin/poetry

COPY pyproject.toml poetry.lock ./
RUN poetry config virtualenvs.create false \
    && poetry install
```


最後に, `black`と `flake8`のための設定を devcontainer に反映させるため変更をおこなっていきます。

`devcontainer.json`を以下のように変更します。
```:devcontainer.json
{
    "name": "Python 3.11 dev",
    "context": "..",
    "dockerFile": "Dockerfile",
    "customizations": {
        "vscode": {
            "settings": {
                "terminal.integrated.profiles.linux": {
                    "zsh": {
                        "path": "zsh"
                    }
                },
                "python.pythonPath": "/usr/local/bin/python",
                "python.linting.enabled": true,
                "python.linting.pylintEnabled": false,
                "python.linting.flake8Enabled": true,
                "python.linting.lintOnSave": true,
                "python.formatting.provider": "black",
                "editor.formatOnSave": true
            },
            "extensions": [
                "ms-python.python",
                "kevinrose.vsc-python-indent",
                "editorconfig.editorconfig"
            ]
        }
    }
}

```


ここまでできたら, 再度 build し直して動くこと確認してコミットします。
変更内容は, PRにしてわかりやすくしておきました。

~~https://github.com/syokoysn/python-dev-template/pull/2~~

https://github.com/syokoysn/python-dev-template/pull/4




pythonの開発環境の構築ができたのではないでしょうか.

この内容に加えて、拡張機能などを追加したりして自分好みにカスタマイズできると思いますので是非試してみてください。



---


### 参考

https://python-poetry.org/docs/#installing-with-the-official-installer

https://code.visualstudio.com/docs/terminal/profiles

https://qiita.com/tsu_0514/items/2d52c7bf79cd62d4af4a