Skip to content

Instantly share code, notes, and snippets.

@aodag
Last active January 22, 2019 06:31
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aodag/bea141d255e22d204a2140fba658ebf2 to your computer and use it in GitHub Desktop.
Save aodag/bea141d255e22d204a2140fba658ebf2 to your computer and use it in GitHub Desktop.

pipやvirtualenvをインストールする

$ export PATH="~/.local/bin/:$PATH"
$ python get-pip.py --user
$ pip install virtualenv --user
  • OSパッケージの pip などに上書きしないよう user site-packages にインストールする
  • get-pip.py で最新の pip をインストールできる
  • --user オプションで user site-packages へのインストールとなる

virtualenvを使う意味

System Python をそのまま使うと

  • OSパッケージで入ってくるライブラリと衝突する
  • プロジェクト間でライブラリが干渉する
  • どのライブラリがどのプロジェクトに必要なのかわからなくなる

virtualenvでプロジェクト用のPython環境を作成する

$ virtualenv venv
$ echo "venv" > .gitignore
  • venv ディレクトリの下にプロジェクト専用のライブラリディレクトリや python インタプリタができあがる
  • ライブラリパスは System Python (/usr/bin などに入ってる python) と完全に分離される
$ . venv/bin/activate
(venv) $
  • activate を読み込むと環境変数 PATH が調節されて venv/bin が入る。この状況で python を実行すると venv/bin/python が実行される
  • activate はコマンド実行ではなく .source で実行中のシェルに読み込ませることに注意
(venv) $ deactivate
$
  • virtualenvの環境から抜けるには deactivate を実行する

venvについて

  • python3.3 以降、 virtualenv と同様の環境を作る仕組みが venv という名前で導入された。
  • virtualenvは環境作成時に pip などのインストールも行う
  • venvは3.4以降で ensurepip を使って pip などのツールをインストールする
  • 今後の主流になるはずだがubuntuなどのディストリビューションに含まれる ensurepip の動作が怪しいためお勧めしにくい

pip でライブラリをインストールする

(venv) $ pip install pyramid
  • ライブラリをインストールには install コマンドを使う
  • virtualenv環境内であればインストール先はその環境の site-packages となる
  • バージョン指定なしの場合は安定板バージョンの最新版がインストールされる
  • 安定板のバージョンなどについては PEP 440 を参照のこと。
(venv) $ pip install pyramid==1.8.1
  • バージョン指定
(venv) $ pip install pyramid==1.9b1
  • バージョンに b などの pre-release suffix がついている
  • prea, rc などがついているものは pre-release となるため、 バージョン指定するか --pre オプションをつけないとインストールされない。
(venv) $ pip list
  • インストール済パッケージを確認するためには list コマンドを使う
  • --format=freezepip freeze と同様のフォーマットとなる。今後はこちらの実装になる予定( pip freezepip list --format=freeze のエイリアスとなる )
(venv) $ pip freeze > requirements.txt
(venv) $ pip install -r requirements.txt
  • 一括してライブラリをインストールする場合はファイルに一行ずつインストール対象を記述し、 --requirement オプション(短縮形は -r)で指定する
  • requirementのファイルの内容は pip freeze の結果と同じフォーマット
  • ライブラリの構成管理を行う素朴な方法として pip freeze の内容を保存したrequirements.txt をgitリポジトリなどで共有する

ライブラリのバージョンを管理する

$ touch constraints.txt requirements.txt
  • pip 7.1 から使えるようになった constraints オプションはバージョンなどの制約を記述できる
  • バージョン管理の constraints.txt と 依存性管理の requirements.txt を用意する
$ pip install -r requirements.txt -c constraints.txt
  • ライブラリ追加時はrequirements.txtに対象のライブラリを追記する
  • requirements.txt にはライブラリ名だけを記述し、バージョンは指定しない
  • pip install では --requirement--constraints オプションを利用する
  • requirements.txt に記述されたライブラリがインストールされる。
  • constraints.txt にバージョン指定がある場合そのバージョンがインストールされる
  • バージョン指定がなければ安定板の最新バージョンがインストールされる
$ pip freeze -r constraints.txt
  • インストール済のライブラリがconstraints.txtでバージョン指定されているか確認する
$ pip freeze > constraints.txt
  • インストール済のライブラリのバージョンでconstraints.txtを更新する

wheelhouseを活用する

  • pythonのパッケージはsdistとwheelがある
  • wheelはバイナリパッケージでsdistよりもファイルサイズが小さくインストールが早い
  • 依存ライブラリをすべてwheel形式でgitリポジトリにバンドルすればpypiに接続できない環境へのデプロイが簡単になる
$ pip wheel -r requirements.txt -c constraints.txt -w wheelhouse
  • wheelhouseディレクトリを作るにはwheelコマンドを利用する
  • 前述のとおりrequirements.txtに直接依存を書き、constraints.txtで間接依存まで含めたバージョンを指定する
  • --wheel-dir (-w) オプションでディレクトリを指定する
$ pip install -r requirements.txt -c constraints.txt -f wheelhouse --no-index
  • --find-links (-f) でwheelhouseディレクトリを指定すればそこから優先してインストールされる
  • --no-index オプションでpypiに接続しなくなる

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment