見出し画像

【Mac】Cursor/VSCodeでDocker + poetryを用いた仮想環境構築

はじめに

最近仕事でjsonやyamlファイルを編集する時間が増えたので
テキストエディタをJupyter Labから話題のCursorに切り替えようと思ったが
仮想環境構築について簡単にまとめたものがなかったので自分用にまとめた

ディレクトリ構造

base/
├ dockerfile
├ docker-compose.yaml
├ README.md
└ work/
└ test.py
└ test.ipynb
└ pyproject.toml
└ poetry.lock

Docker設定ファイル作成

まずプロジェクトディレクトリ配下に拡張子なしの’dockerfile’作成

## base image
FROM python:3.12

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

# Poetryのインストール
RUN curl -sSL https://install.python-poetry.org | python -

# Poetryのパスの設定
ENV PATH /root/.local/bin:$PATH

# Poetryが仮想環境を生成しないようにする
RUN poetry config virtualenvs.create false

次に起動時の初期設定をする docker-compose.yaml を作成

 #Docker のバージョン
version: '20.10.23'
#Dockerのコンテナの情報(なんでもいい)
services:
  poetrytest:
    restart: always
    build: .
    # コンテナの名前
    container_name: 'base'
    # 仮想環境に入ったあとの作業ディレクトリ名
    working_dir: '/work/'
    tty: true
    # ローカルに存在するディレクトリ(./work)とコンテナ内のディレクトリ(/root/work)を同期させるための設定
    volumes:
      - ./work:/root/work

Dockerコンテナ起動

Docker を起動するには docker-compose.yaml がある階層で下記コマンドを実行

docker-compose up -d --build

そしたらdockerデスクトップで新しくコンテナが作成されていることを確認

なお、Docker コンテナを停止するときは、以下のコマンド

docker-compose down

Dockerコンテナ仮想環境に入る

コンテナが無事作れたらCursor/VSCodeの左下のリモートウィンドウ
をクリックしてAttach to Running Container(実行中のコンテナにアタッチ)
をクリック

すると新しいCursor/VSCodeが立ち上がって仮想環境に入れる

poetryでライブラリ追加/管理

仮想環境に入ったら基本poetryでライブラリを追加したり管理したりする
試しに下記のようなtest.pyを作成してpoetryを活用してみる

import pandas as pd
import seaborn as sns

def main():
    df = pd.DataFrame({
        "name" :["Alice", "Bob", "Carol"],
        "role" : ["CEO", "CTO", "PM"],
        "height" : [174, 182, 169]
        })
    print(df)

if __name__ == "__main__":
    main()

test.pyを実行すると下記のように
seabornが入ってないエラーが出るのでpoetryでseabornを追加する

root@ef35341934fd:~/work# python3 test.py
Traceback (most recent call last):
File "/root/work/test.py", line 2, in <module>
import seaborn as sns
ModuleNotFoundError: No module named 'seaborn'

まず、下記コマンドでpyproject.tomlファイルを作成

poetry init --no-interaction

するとpyproject.tomlファイルが生成される

次に、下記コマンドで追加したいライブラリを指定

poetry add pandas seaborn

自動的にパッケージが追加され、poetry.lockファイルが生成される

docker内の仮想環境ではpoetry installは新たに必要ないので
これで先ほどのtest.pyを実行すると下記のように正常に実行される

root@ef35341934fd:~/work# python3 test.py
name role height
0 Alice CEO 174
1 Bob CTO 182
2 Carol PM 169

またnotebook形式での実行も正常にされるので
つどつどdockerを再起動しなくてもpoetry addしてるだけで良い

コードがある程度作れる環境になったら
gitにcommitするとき用に.gitignoreを作っておくのが良い
ここからテンプレが作れるから便利

参考文献:


この記事が気に入ったらサポートをしてみませんか?