Pythonの環境について
当方Pythonぺーぺー何もわかっておらんの民です.
色々あってPythonを触ることになったのですが,Anacondaさん,どうにもよくわからんということで色々と調べた結果pyenv+venv環境が良いらしいということで実際に構築したので備忘録なり.
pyenvってなんだ
まずpyenvってなんだ.
Simple Python Version Management: pyenv
ということでPythonのバージョン管理システムらしいです.Pythonくんは良くバージョンがどうちゃらこうちゃらと問題が起こるってのをよく聞くので,Pythonのバージョン管理ができたら良さそう.
インストールとか
まずはGitHubからcloneする.
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
次にパスとかの設定.
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
この変は基本的にpyenvのGitHubのまんまなので不具合が起こっても私ぺーぺーにはわかりやせん.
pyenvの使い方
pyenvはpythonのバージョン管理システム.その使い方は
- 好きなバージョンのpythonをダウンロード
pyenv install "version" #versionには好きなPythonのバージョン
pyenv install --list #インストール可能なバージョンの確認
- 好きなディレクトリ使用するPythonのバージョンを指定
pyenv local "version"
これでlocalコマンドを叩いたディレクトリでpython -Vとかでバージョンを確認すると好きなバージョンになってるはずです.
私の場合(具体例)
私の場合はpyenvを使用するディレクトリを作成して,更にその中でバージョンごとにディレクトリを分けて使用しています.
mkdir /home/pyenv
cd /home/pyenv
でpyenv環境を使用するディレクトリ(/pyenv)を作成してそこをカレントディレクトリとします.
その中で例えばPython3.7の最新のものを使用するとするときは,
mkdir py37
cd py37
でPython3.7の最新バージョンを使用するディレクトリに移動.
pyenv local 3.7
これだけで使用するPythonバージョンごとにディレクトリを変えれば良いように設定できました.ちゃんと設定できてるかどうかは
pyenv local #python --verionでも可
venvってなんだ
まずvenvってなんだ.
The venv module supports creating lightweight “virtual environments”
仮想環境を作るのを手伝ってくれるやつらしいです.
インストールとか
apt使ってインストールしろとかそういうのはないです.もともとPythonに入ってたはず(入れたの昔なので覚えてない…たしかもともとあったはず).
venvの使い方
まずは仮想環境を作ります.
仮想環境を作っとくとpipとかで色々モジュールとかパッケージとかインストールするのを,プロジェクトごとに分けられます.なのでごちゃごちゃいろんなものが干渉することもないし,一個よくわからなくなったからと行ってPCのPython環境まるごと整理みたいなことはしなくて良くなります.
まあ良くて,とりあえず作り方.
python -m venv "venv name" #venv nameのところは作成する仮想環境の名前
これだけで仮想環境作れます.そんで
source "venv name"/bin/activate
これでOK.うまく立ち上がってたら,
("venv name")$
みたいになってるはず.各環境内でpip installとかして好きなように使えますわ.
pyenvとvenvの合わせ技.
pyenvでディレクトリごとに行って,venvでその小ディレクトリに仮想環境を作るとバージョンごとの仮想環境を構築できるのでオヌヌメです.
私の場合,
- pyenv
- py35
- venv name0
- py36
- venv name1
- venv name2
- py37
- venv name3
- py35
みたいな感じの構造を作って管理しています.こんなに色々バージョン使うほどPythonやってないけど…