$ 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へのインストールとなる
System Python をそのまま使うと
- OSパッケージで入ってくるライブラリと衝突する
- プロジェクト間でライブラリが干渉する
- どのライブラリがどのプロジェクトに必要なのかわからなくなる
$ 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を実行する
- python3.3 以降、
virtualenvと同様の環境を作る仕組みがvenvという名前で導入された。 - virtualenvは環境作成時に
pipなどのインストールも行う - venvは3.4以降で
ensurepipを使ってpipなどのツールをインストールする - 今後の主流になるはずだがubuntuなどのディストリビューションに含まれる
ensurepipの動作が怪しいためお勧めしにくい
(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がついている preやa,rcなどがついているものはpre-releaseとなるため、 バージョン指定するか--preオプションをつけないとインストールされない。
(venv) $ pip list
- インストール済パッケージを確認するためには
listコマンドを使う --format=freezeでpip freezeと同様のフォーマットとなる。今後はこちらの実装になる予定(pip freezeはpip 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を更新する
- 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に接続しなくなる