$ 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に接続しなくなる