概要
Python
には多くのバージョン管理ツール,パッケージ管理ツールがあります.今回はバージョン管理にpyenv
,パッケージ管理にvenv
を使った方法をまとめます.
venv
の紹介記事では,多くの場合,ディレクトリごとに仮想環境を作っています.環境の複製はrequirements.txt
を使って簡単にできますが,同じような環境が複数のディレクトリにまたがって存在してしまう可能性があります.
今回は仮想環境を~/venvs/
にまとめて置くことで効率的な仮想環境の管理を目的とします.
(この「root
直下に仮想環境をまとめて管理する」記事を当初探していたのですがどうも見つからなかったので,もしかしたら致命的なNG行動なのかもしれません.もしそうでしたら教えて下さい.)
はじめに
はじめまして.初投稿の記事なので拙い部分は多分にあると思いますが,色々とご教授いただけると幸いです.
背景
さて,私がPython
をはじめて触ったのが2022年でした.当時先輩から「Anaconda
で環境作ったら良いよ」と言われたのでAnaconda
を入れて使っていました.当時は特に考えずに必要なパッケージがあれば手当たり次第にインストールしたため,環境は膨れ上がり,依存関係もごちゃごちゃになってしまいました.致命傷となったのはAnaconda-Navigator
が起動しなくなったことです.おそらくconda
コマンドとpip
コマンドを混合して使っていたためにおきました.これからAnaconda
で環境を作る方はconda
コマンドのみで管理するようにしましょう.
参考:https://qiita.com/dem_kk/items/74a3b14f949485ad56cb
2024年,Python
をちゃんと研究で使う可能性が出てきたのでここらで環境を整理しようと思いました.
まずAnaconda
のお掃除ですがこちらの記事を参考にしましたので貼っておきます.
https://weblabo.oscasierra.net/python-anaconda-uninstall-macos/
環境
name | version |
---|---|
MacBook Pro | Sonoma 14.3.1 |
Homebrew | 4.3.2 |
pyenv | 2.4.1 |
VSCode | 1.89.1 |
本題
pyenv
の導入
pyenv
はPython
の複数バージョン管理を目的に導入します.
Homebrew
を使ってインストールします.
brew install pyenv
インストールが終わったら以下の内容を.zshrc
に書き込みます.pyenv
を使うための事前準備です.
# pyenvの初期設定
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init --path)"
fi
書き終わったらターミナルで以下を実行し,.zshrc
の内容を反映させます.
source ~/.zshrc
pyenv
でPython
をインストール
以下のコマンドでインストールできるもののリストが表示できます.
pyenv install --list
いっぱい出てきてびっくりしますが,上の方にスクロールしていくと数字だけの部分が出てきます.これが素のPython
のバージョンです.
3.9.18
3.9.19
3.10.0
...
3.12.2
3.12.3
今回は3.12.3
と3.9.19
をインストールします.
インストールは以下のコマンドです.
pyenv install 3.12.3
pyenv install 3.9.19
これでインストールできました.実際に入ったか確認してみましょう.
pyenv versions
で確認できます.
username@somewhere ~ % pyenv versions
* system (set by /Users/username/.pyenv/version)
3.9.19
3.12.3
おそらくこのような表示になると思います.
(私の環境ではなぜかsystem
がMac標準のPython
へのパスを示さず彷徨っています.特に不都合はないので放置していますがなにかわかる方いらっしゃれば教えていただけると幸いです.)
*
がついているものが今選択されているPython
のバージョンです.
では先程入れた3.12.3
に変更してみましょう.
pyenv global 3.12.3
pyenv versions
を実行してもらえれば*
の位置が変わっていることがわかると思います.
試しにpython --version
やwhich python
を叩いてみてください.
ここまででpyenv
経由でインストールしたPython
を利用することができるようになりました.
次はvenv
での仮想環境の作成です.
venv
で仮想環境の作成
簡単です.
python -m venv [仮想環境名]
とするだけです.
今回はroot
直下に仮想環境をまとめていきたいので次の準備を行います.
cd //rootに移動
mkdir venvs //ディレクトリvenvsを作成
cd venvs //venvsに移動
以上を1行ずつ実行してください.
次に仮想環境base
を作成します.venvs
にいる状態で以下のコマンドを叩いてください.
python -m venv base
これでpython3.12.3
の仮想環境を作ることができました.
まだこの状態では仮想環境はアクティブでないので
source ./base/bin/activate
と打ってください.この状態でpip
を用いパッケージをインストールするとこのbase
仮想環境のみにパッケージが入ります.
python3.9.19
の仮想環境を作りたい場合はpyenv global 3.9.19
でグローバルのPythonを変更してから上記の手順を踏めばOKです.
仮想環境の切り方はターミナルでdeactivate
と叩いてください.
VSCodeの設定
設定という設定ではありませんが,~/Documents/SugoiProject
があるとします.SugoiProject
の中にはsugoi_program.py
が入っています.
- vscodeで
SugoiProject
を開きます -
shift
+command
+P
でコマンドパレットを開きます - 「python インタープリター」と入力すると「Python: インタープリターを選択」が出てくるのでクリック
- 作成した仮想環境へのパス,今回は
~/venvs/base/
を入力
これでvscodeがpython
を見つけてくれます.
~/venvs
でまとめて管理することでvscodeでの使い勝手もよく,どの環境になんのパッケージを入れたかも管理しやすいと思います.またrequirements.txt
で複製するケースと比べていつの段階で複製したか(複製先には追加で入れたけど複製元には入れてないケース)を気にする必要がない点もメリットです.
正直毎回グローバル設定するのだるい
執筆中に見つけました.仮想環境のPython
バージョンを指定して作成するにはグローバルのPython
を設定し直さなくてはいけません.いちいちpyenv global [version]
と打つのもだるいので,エイリアス登録してしまいましょう.
.zshrc
に
# alias
alias python3.9="$HOME/.pyenv/versions/3.9.19/bin/python3.9"
alias python3.12="$HOME/.pyenv/versions/3.12.3/bin/python3.12"
とかくだけです.(例によってsource ~/.zshrc
を忘れずに)
python3.9.19
で仮想環境を作りたければ
python3.9 -m venv [仮想環境名]
とすればOKというわけです.便利ですね.
おまけ
パッケージ追加したくて仮想環境をアクティブにするとき,source ~/venvs/base/bin/activate
と打つのもだるいですよね.短いコマンドに変えちゃいましょう.
alias actv_base="source /Users/{username}/venvs/base/bin/activate"
actv_base
と打つだけでbase
がアクティブになります.楽ですね.
その他の参考サイト