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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
310
We Have a Design System, Now What?
morganepeng
55
8.2k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Technical Leadership for Architectural Decision Making
baasie
3
420
Everyday Curiosity
cassininazir
0
240
Thoughts on Productivity
jonyablonski
76
5.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
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
ありがとうございました!