Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
poetryでパッケージ管理 on Docker
Search
mizzsugar
August 08, 2019
760
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
poetryでパッケージ管理 on Docker
mizzsugar
August 08, 2019
More Decks by mizzsugar
See All by mizzsugar
厳しさとゆるさの間で迷う人に捧げる個人開発記
mizzsugar
0
62
SQLModel入門〜クエリと型〜
mizzsugar
3
1.5k
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
1
160
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
9.1k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
640
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
480
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
1.2k
unittest.mockを使ってテストを書こう
mizzsugar
5
7k
変数に変数を代入したら?
mizzsugar
1
2.7k
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
For a Future-Friendly Web
brad_frost
183
10k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
Between Models and Reality
mayunak
4
350
How to train your dragon (web standard)
notwaldorf
97
6.7k
Exploring anti-patterns in Rails
aemeredith
3
420
Mobile First: as difficult as doing things right
swwweet
225
10k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Design in an AI World
tapps
1
250
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
Transcript
Poetryでパッケージ管理 on Docker @mizzsugar0425 2019/08/08 Stapy
お前誰よ ・みずきと申します。 ・先月、Pythonを始めて1年が経過しました。 ・仕事:DjangoでWeb開発 ・仕事外:Pyramid/Nuxt/TypeScriptを頑張っている ・美味しい水出しコーヒーが飲みたい
pip install -r requirements.txt
以前はpip installのみで パッケージ管理していました。
パッケージ同士の依存関係を 管理できない問題
Docker上で Pipenvやpoetryを使いたい
Poetryやるぞお! poetryにした理由 ・lockがPipenvより早い ・(個人的な理由だけど)pyproject.tomlとsetup.pyを自動生成してくれ るので今後のPyPIデビューに備えて使いこなしたい
ディレクトリ構成 ├── app │ ├── poetry.lock │ ├── project │
│ ├── アプリケーションコード諸々 │ └── pyproject.toml ├── docker │ ├── app │ │ ├── Dockerfile │ │ └── start-server.sh │ ├── etc │ │ └── gunicorn.conf │ ├── db │ └── Dockerfile └── docker-compose.yaml
docker-compose.yaml version: "3" services: app: build: context: ./docker/app dockerfile: Dockerfile
env_file: .env volumes: - ./app:/home/app - ./docker/app:/home/docker - ./docker/etc/gunicorn.conf:/etc/gunicorn.conf - ./docker/var/log/gunicorn:/var/log/gunicorn working_dir: /home/app entrypoint: "/bin/sh" command: "/home/docker/start-server.sh" ports: - "8080:8080" tty: true depends_on: - db db: build: context: ./docker/db dockerfile: Dockerfile env_file: .env ports: - 5432:5432 volumes: - ./docker/postgres/pgsql-data:/var/lib/postgresql/data PythonコンテナとDBコンテナの 2つでアプリケーションを動かすとい う設定です。
pyproject.tomlとpoetry.lockどこにおく? 案1:docker/app以下 案2:app以下 →案1でやってたけど、パッケージインストールしたりアップデー トするたびにdocker/app以下に移動するのが 面倒なので案2の方が楽だな・・・と思った
コンテナ立ち上がると同時に色々してほしい! →シェルスクリプトにやってもらおう
シェルスクリプトにやってもらう #!/bin/bash cd /home/app poetry install cd project if [
"${DJANGO_ENV}" = 'production' ]; then poetry run python manage.py migrate --settings config.settings poetry run python manage.py collectstatic --noinput poetry run gunicorn config.wsgi:application -c /etc/gunicorn.conf -b :8080 else poetry run python manage.py migrate poetry run python manage.py runserver 0.0.0.0:8000 fi
シェルスクリプトにやってもらう #!/bin/bash cd /home/app poetry install cd project if [
"${DJANGO_ENV}" = 'production' ]; then poetry run python manage.py migrate --settings config.settings poetry run python manage.py collectstatic --noinput poetry run gunicorn config.wsgi:application -c /etc/gunicorn.conf -b :8080 else poetry run python manage.py migrate poetry run python manage.py runserver 0.0.0.0:8000 fi poetryでインストールしたパッ ケージをインストールします。 poetry run を頭につけると poetryが作ってくれる仮想環境で 操作がされる動きになります。
docker-compose.yamlにコマンド追加 (次のスライドへ)
docker-compose.yaml version: "3" services: app: build: context: ./docker/app dockerfile: Dockerfile
env_file: .env volumes: - ./app:/home/app - ./docker/app:/home/docker - ./docker/etc/gunicorn.conf:/etc/gunicorn.conf - ./docker/var/log/gunicorn:/var/log/gunicorn working_dir: /home/app entrypoint: "/bin/sh" command: "/home/docker/start-server.sh" ports: - "8080:8080" tty: true depends_on: - db db: build: context: ./docker/db dockerfile: Dockerfile env_file: .env ports: - 5432:5432 volumes: - ./docker/postgres/pgsql-data:/var/lib/postgresql/data
Docker環境内での操作 poetryでインストールしたパッケージを使った操作をしたい場 合、 poetryが用意した仮想環境に入る必要がある。
docker-compose exec app bash まずPythonコンテナに入って cd project poetry run python
manage.py shell poetryが作成してくれる仮想環境にて実行! poetry shell cd project poetry run python manage.py shell こちらでも可
パッケージの追加・アップデート poetry add [パッケージ名] まずPythonコンテナに入ってから・・・ 新しくパッケージを追加 poetry update [パッケージ名] パッケージのアップデート
リポジトリはこちら https://github.com/mizzsugar/poetry_on_docker
ブログもあるよ http://mizzsugar.hatenablog.com/entry/2019/08/ 08/191318
おまけ 〜Pipenv編〜 (ぶっちゃけやることはあんま変わらなかった) https://github.com/mizzsugar/pipenv_on_docke r
ありがとうございました!