はじめに
venv/virtualenv などのような表記を見かけますが、
venv は virtualenv の省略表記ではありません。
それぞれの概要は以下です。
- venv
- パッケージ切り替えに使用できる
- Python標準(組み込みモジュール)
- virtualenv のサブセット
- https://docs.python.org/ja/3/library/venv.html
- virtualenv
- パッケージ切り替え + Python version の切り替え に使用できる
- venv は標準だが、virtualenv は 3rd party (PyPA)
- https://virtualenv.pypa.io/en/latest/index.html
- pepに高度な分離を行ってくれる旨が書かれています
前提
mac で挙動確認を行いました。
https://www.python.org/downloads/ のインストーラーを用いて、
3.8 と 3.9 を install してあります。
python3 は 3.8 のバージョンを向いています。
$ ls /Library/Frameworks/Python.framework/Versions
3.8/ 3.9/ Current@
$ which python3
/Library/Frameworks/Python.framework/Versions/3.8/bin/python3
virtualenv で 3.8 と 3.9 の環境を作成する
virtualenv を install します。
virtualenv は 3.8 のディレクトリに install されました。
$ pip3 install --user virtualenv
$ which virtualenv
/Users/<user_name>/Library/Python/3.8/bin/virtualenv
まずは python3.9 の仮想環境を作ります。
(python3.9 の環境ができたことが分かります。)
$ virtualenv -p python3.9 venv39
$ tree -L 3 venv39
venv39
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── activate.ps1
│ ├── activate.xsh
│ ├── activate_this.py
│ ├── pip
│ ├── pip-3.9
│ ├── pip3
│ ├── pip3.9
│ ├── py.test
│ ├── pytest
│ ├── python -> /usr/local/bin/python3.9
│ ├── python3 -> python
│ ├── python3.9 -> python
│ ├── wheel
│ ├── wheel-3.9
│ ├── wheel3
│ └── wheel3.9
├── lib
│ └── python3.9
│ └── site-packages
└── pyvenv.cfg
$ . venv39/bin/activate
$ python3 --version
Python 3.9.1
続いて python3.8 の仮想環境を作ります。
(python3.8 の環境ができたことが分かります。)
$ virtualenv -p python3.8 venv38
$ tree -L 3 venv38
venv38
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── activate.ps1
│ ├── activate.xsh
│ ├── activate_this.py
│ ├── pip
│ ├── pip-3.8
│ ├── pip3
│ ├── pip3.8
│ ├── python -> /Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8
│ ├── python3 -> python
│ ├── python3.8 -> python
│ ├── wheel
│ ├── wheel-3.8
│ ├── wheel3
│ └── wheel3.8
├── lib
│ └── python3.8
│ └── site-packages
└── pyvenv.cfg
$ . venv38/bin/activate
$ python3 --version
Python 3.8.6rc1
以上で異なる Python バージョンの環境を作成することができました。
お疲れさまでした。