Closed11
Docker+Poetry+GitでPython開発環境を構築する
環境
- Windows 10 WSL 2 Ubuntu 20.04 + Docker 20.10.5
なにするか
- Jupyter でPython実行する
- Flask できる
- VSCodeで開発できる
Docker で環境つくる
# ディレクトリを作成する
$ mkdir python-dev && cd $_
# git を初期化
$ git init .
$ wget https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore --output-document=.gitignore
.-
├ Dockerfile
├ docker-compose.yml
└ app/
Dockerfile
FROM python:3.9.4-slim
USER root
WORKDIR /app
RUN apt update; apt -y upgrade
RUN apt install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install poetry
docker-compose.yml
version: '3.4'
services:
web:
build: .
volumes:
- .:/app
environment:
- FLASK_APP=index.py
ports:
- 127.0.0.1:5000:5000
command: "poetry run flask run --host=0.0.0.0"
note:
build: .
volumes:
- .:/app
ports:
- 127.0.0.1:8888:8888
command: "poetry run jupyter lab --no-browser --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True"
$ docker-compose run --rm web poetry init --no-interaction
$ docker-compose run --rm web poetry add jupyterlab flask
$ docker-compose run --rm web poetry git+https://github.com/python-kasa/python-kasa.git#master
お世話になったリンク
poetry をインストール
Linuxbrewをインストール済みなので、brew でインストールする。
$ brew install poetry
PATHを通す
test -r ~/.bashrc && echo "export PATH=${HOME}/.poetry/bin:${PATH}" >>~/.bashrc
プロジェクトの作成
# ディレクトリを作成する
$ mkdir python-dev && cd $_
Poetry の初期設定
対話式で設定。
$ poetry init
代わりに、poetry init --no-interaction
対話をスキップも可能。
pyproject.toml
ファイルが作成される。
パッケージの追加
add
でパッケージを追加する。
$ poetry add jupyterlab flask
# githubを直接参照する時。cloneしてbuildしてinstallしてくれる
poetry add git+https://github.com/xxxxxx/xxxxxx.git
pyproject.toml
[tool.poetry.dependencies]
python = "^3.9"
jupyterlab = "^3.0.14"
Flask = "^1.1.2"
python-xxxxx = {git = "https://github.com/xxxxxx/xxxxxx.git"}
Gitを初期化
gitignore.io
を使って.gitignore
ファイルを作成する。
Gitリポジトリを初期化して、commitしておく。
$ curl -L .gitignore https://www.gitignore.io/api/python,virtualenv
$ git init
$ git add .
$ git commit -m "initial commit"
仮想環境へ入る
$ poetry shell
(.venv)$ exit
Docker化する
.dockerignore を作成する
.dockerignore
.venv/
__pycache__/
Dockerfileを作成する
Dockerfile
FROM python:3.9.4-slim
WORKDIR /app
RUN apt-get update && apt-get install -y git
RUN pip install --upgrade pip && pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry config virtualenvs.create false --local
RUN poetry install
docker-compose.yml
version: '3.4'
services:
web:
build: .
volumes:
- .:/app
environment:
- FLASK_APP=index.py
ports:
- 127.0.0.1:5000:5000
command: "poetry run flask run --host=0.0.0.0"
note:
build: .
volumes:
- .:/app
ports:
- 127.0.0.1:8888:8888
command: "poetry run jupyter lab --no-browser --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.disable_check_xsrf=True"
index.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
$ docker-compose build
$ docker-compose up
$ docker-compose restart
Dockerfile
FROM python:3.9.4-slim as builder
WORKDIR /app
RUN apt-get update && apt-get install -y git
RUN pip install --upgrade pip && pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry export --without-hashes -f requirements.txt > requirements.txt
FROM python:3.9.4-slim
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY /app/requirements.txt .
RUN pip install -r requirements.txt
COPY . .
Poetry add する
$ poetry add pandas
$ poetry update
$ docker-compose ps -a
$ docker-compose stop
$ docker-compose build
$ docker-compose up
このスクラップは2023/11/03にクローズされました