pythonとrubyの仮想環境

自分の仕事環境のメモ。

Ruby

結論

rbenv + bundler(Gemfile)

rbenv + rbenv-gemsetなども試したが、仮想環境のスコープではなく、rbenvのバージョン直下のgemsにgemがインストールされるので、結論はrbenv + bundlerにした。

プロジェクトの作成

$ mkdir my-project
$ cd my-projects

rubyバージョンのfix

$ rbenv local 3.0.2

#=> カレントに、.ruby-versionが作成される。
$ cat .ruby-version
3.0.2

Gemfileの作成

$ rbenv exec bundle init

#=> 空のGemfileが作成される
$ cat Gemfile

以降、このプロジェクトで使いたいgemをGemfileに書いて、その度に以下のコマンドでgemをインストールする。

インスールしたgemは、〜~/.rbenv/<rubyバージョン>/lib/ruby/gems/<rubyバージョン>/gemsにインストールされる。

$ rbenv exec bundle install

結局これも、仮想環境のスコープではなく、rbenvで指定しているrubyバージョンの下にgemが保存されるが、Railsなどでもよく慣れ親しんだ方法なので、これを利用していく。

Python

結論

pyenv + pipenv

事前に必要なものをインストール

$ sudo apt-get update
$ sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev

pyenvのインストール

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc
$ exec "$SHELL"

pipenvのインストール

$ pip install --user pipenv
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc

pyenvで指定したバージョンのpythonをインストール

$ pyenv install 3.9.7

プロジェクトフォルダを作成して、pythonのバージョンをfix

$ mkdir hoge
$ pyenv local 3.9.7

.python-versionが作成される。rbenvと同じ。

$ cat .python-version
3.9.7

仮想環境を作成する。ちなみに仮想環境に名前を付けることはできない。名前は現在いるフォルダ名が仮想環境となる。

$ pipenv --python $(pyenv which python)

#=> Pipfileが作成されている
$ ls
Pipfile

#=> 作成された仮想環境の作成
$ ls ~/.local/share/virtualenvs 
py-H90aLKcr

#=> このカレントディレクトリがどの仮想環境に紐付いているか確認。一致してる。
$ ls ~/.local/share/virtualenvs 
py-H90aLKcr

必要なライブラリのインストール

$ pipenv install numpy

#=> ロックファイルが出来ている。rubyで言うGemfile.lock
$ ls
Pipfile  Pipfile.loc

#=> Pipfileにもnumpyが追加されている。
$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
numpy = "*"

[dev-packages]

[requires]
python_version = "3.9"

最後に作成したフォルダで、仮想環境をアクティベート。これをしないと、Systemのpythonが参照される。

感想

Gemfileの場合は必要なgemを先にGemfileに追記して、bundle installをする。しかし、Pipfileの場合は仮想環境で、pipenv installしたものがPipfileに書かれる。手順は逆だけど、ポイントとなるファイルや、ロックファイルの構成が一緒なので解りやすい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です