![見出し画像](https://assets.st-note.com/production/uploads/images/139864465/rectangle_large_type_2_29684d6642c6fe9353bdd5d667955b63.png?width=1200)
【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デスクトップで新しくコンテナが作成されていることを確認
![](https://assets.st-note.com/img/1715087422041-quGwMGDL27.png?width=1200)
なお、Docker コンテナを停止するときは、以下のコマンド
docker-compose down
Dockerコンテナ仮想環境に入る
コンテナが無事作れたらCursor/VSCodeの左下のリモートウィンドウ
をクリックしてAttach to Running Container(実行中のコンテナにアタッチ)
をクリック
![](https://assets.st-note.com/img/1715087715337-WMGNMb0NQD.png?width=1200)
すると新しいCursor/VSCodeが立ち上がって仮想環境に入れる
![](https://assets.st-note.com/img/1715087780242-9MwjzG3OtW.png?width=1200)
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ファイルが生成される
![](https://assets.st-note.com/img/1715083237653-005JEg2Lxx.png?width=1200)
次に、下記コマンドで追加したいライブラリを指定
poetry add pandas seaborn
自動的にパッケージが追加され、poetry.lockファイルが生成される
![](https://assets.st-note.com/img/1715084015389-tpjWohPo1y.png?width=1200)
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してるだけで良い
![](https://assets.st-note.com/img/1715084988842-IFXaLbXrWs.png?width=1200)
コードがある程度作れる環境になったら
gitにcommitするとき用に.gitignoreを作っておくのが良い
ここからテンプレが作れるから便利