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
自分のPCにPython環境を用意して_VSCodeでStreamlitアプリを動かすまでの8ステップ.pdf
mizzsugar
0
77
Colabのみで初心者向けPythonハンズオン.pdf
mizzsugar
0
67
厳しさとゆるさの間で迷う人に捧げる個人開発記
mizzsugar
0
67
SQLModel入門〜クエリと型〜
mizzsugar
3
1.6k
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
1
160
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
9.1k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
650
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
490
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
1.2k
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
First, design no harm
axbom
PRO
2
1.2k
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
910
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
ありがとうございました!