acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

あんちょこ》venvで仮想環境構築 から終了まで

venv で仮想環境を作るとき、よくつかう操作のあんちょこ。

venv の使いどころ

venvとは、Python仮想環境を作成するツール。
そのプロジェクト専用に、隔離され、独自のパッケージ構成のPython実行環境を用意したい場合に使う。

AWS Lambdaで Boto3以外のライブラリ依存がある関数を使う場合にも、仮想環境で開発してデプロイパッケージを作成する。
ref.》 Python の AWS Lambda デプロイパッケージ > 仮想環境がある場合 - AWS Lambda

venvで仮想環境構築、終了のしかた

【注意】
記載のコマンドは、MacOS環境で、かつ pyenvでpythonのバージョンを管理しており、 $ python ほにゃらら で 3系のpythonが起動する前提です。他の環境では微妙に異なるかもしれない。
自分専用の あんちょこ なのであしからず。

新しい仮想環境を作成

$ cd [project dir]
$ python -m venv [仮想環境名]

仮想環境名でディレクトリが生成される。

例えば仮想環境名を venv20190914 にした場合、
venv20190914/ 配下はこんな感じ:

$ ls -la venv20190914
total 8
drwxr-xr-x   6 acokikoy  staff  192  9 14 12:11 .
drwxr-xr-x   5 acokikoy  staff  160  9 14 12:11 ..
drwxr-xr-x  12 acokikoy  staff  384  9 14 12:11 bin
drwxr-xr-x   2 acokikoy  staff   64  9 14 12:10 include
drwxr-xr-x   3 acokikoy  staff   96  9 14 12:11 lib
-rw-r--r--   1 acokikoy  staff  102  9 14 12:10 pyvenv.cfg

pyenvが入っているからか、pyenv.cfgができてる。
venv20190914/pyvenv.cfgの中身はこんな感じ:

$ cat venv20190914/pyvenv.cfg
home = /Users/acokikoy/.pyenv/versions/3.7.4/bin
include-system-site-packages = false
version = 3.7.4

activate(有効化)

$ source venv20190914/bin/activate
(venv20190914)$ 

環境変数($PATH)が更新され、仮想環境が有効になる。
プロンプトが環境名付きに変わる。

仮想環境にパッケージをインストール

activateした状態で、pip installすると仮想環境にインストールされる。

# パッケージをインストール
(venv20190914)$ pip install flask

flask や jinja2 が venv20190914/lib/python3.7/site-packages 配下にインストールされた。

インストール済みパッケージを一覧

(venv20190914)$ pip freeze
Click==7.0
Flask==1.1.1
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.6

仮想環境のパッケージ情報を書き出して共有

パッケージ情報を requirements.txtファイルに書き出す。

(venv20190914)$ pip freeze > requirements.txt

別の場所に、pip install で同じ環境を作る。

引用元》 https://bootcamp-text.readthedocs.io/textbook/6_venv.html

プロジェクトの他のメンバーは、ソースコードをダウンロードした後、以下の手順で仮想環境に 同じパッケージをインストールします。このようにして、同一の環境をプロジェクトメンバー 全体で共有します。

$ git clone some-project-source-code
$ cd some-project
$ python -m venv env
$ source env/bin/activate
(env) $ pip install -r requirements.txt
Collecting certifi==2017.4.17 (from -r hoge.txt (line 1))
  Using cached certifi-2017.4.17-py2.py3-none-any.whl
(中略)
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2017.4.17 chardet-3.0.4 idna-2.5 requests-2.18.1 urllib3-1.21.1
(env) $

deactivate(無効化)

仮想環境を抜ける。

$ deactivate