1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python でも Composer や NPM みたいに依存パッケージをプロジェクトごとにインストールしたい

Last updated at Posted at 2021-06-06

はじめに

PHP だと ComposerJavaScript だと NPM といったパッケージマネージャーがあります。
Python だとそれが、 pip になるわけですが、ComposerNPMと違い、(標準では)プロジェクト別のパスにパッケージをインストールしないので、複数プロジェクトを管理するのが難しくなったりします。  
この記事では、Pythonプロジェクトの依存パッケージをプロジェクト別のパスにインストールし、Docker化する方法について記載します。

構成

シンプルなFlaskのアプリをビルド、起動します。

docker-compose.yml

version: "3"

services:
  app:
    build: .
    working_dir: /app
    volumes:
      - ./app:/app:cached
      - ./vendor:/vendor:cached
    expose:
      - 5000
    ports:
      - 127.0.0.1:5000:5000
    environment:
      PYTHONUSERBASE: /vendor
      PATH: $PATH:/vendor/bin

Dockerfile

FROM python:3-slim

RUN apt-get update && apt-get install -y build-essential aptitude
# その他、必要なものをインストール

app/requirements.txt

boto3
Flask

vendor/.gitignore

*
!.gitignore

app/main.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello !!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Makefile

install:
	docker-compose build --no-cache
	docker-compose run --rm app pip install -r requirements.txt --user

run:
	docker-compose run --rm --service-ports app python main.py

 ローカルで、プロジェクトをビルドし、Flaskアプリを起動するには、以下のコマンドを実行します。

$ make install && make run

ポイント

ポイントは以下の2点です。

  • pip install する際に --user オプションを付与
  • 環境変数 PYTHONUSERBASE にプロジェクトごとのパッケージをインストールするパスを指定する

参考にしたリンク

おわりに

Composer だと vendorJavaScript だと、 node_modules ようにサブディレクトリに依存パッケージがインストールされるので、Python もそういう風にできないかなと思って調べていたら、やり方が見つかったので、記事にしてみました。

誰かのお役に立てれば幸いです。
ではでは。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?