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
自分のPCにPython環境を用意して_VSCodeでStreamlitアプリを動かすまでの8ステップ.pdf
mizzsugar
0
99
Colabのみで初心者向けPythonハンズオン.pdf
mizzsugar
0
83
厳しさとゆるさの間で迷う人に捧げる個人開発記
mizzsugar
0
75
SQLModel入門〜クエリと型〜
mizzsugar
3
1.6k
フルリモート向いてないと思っていた私が、なんだかんだ健やかに 1年半フルリモート出来ている話
mizzsugar
1
170
Djangoでのプロジェクトだって型ヒントを運用出来る!
mizzsugar
4
9.1k
「動くものは作れる」の一歩先へ 〜「自走プログラマー」の紹介〜
mizzsugar
0
660
pytestの第一歩 〜「テスト駆動Python」の紹介〜
mizzsugar
3
490
データ分析ツール開発でpoetryを使う選択肢
mizzsugar
1
1.2k
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
920
A better future with KSS
kneath
240
18k
Marketing to machines
jonoalderson
1
5.7k
HDC tutorial
michielstock
2
850
Ethics towards AI in product and experience design
skipperchong
2
360
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
470
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
30 Presentation Tips
portentint
PRO
1
390
Building Applications with DynamoDB
mza
96
7.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
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
ありがとうございました!