venvで立ち上げた仮想環境の中で指定したバージョンのPythonを起動させる方法


直面した事象

ローカルのTerminalでpyenv localで設定したPythonのバージョンが、python -m venvで立ち上げた仮想環境の中で引き継がれない。

やりたいこと

  • venv仮想環境野中で、Python 3.7.9系を使いたい。(Python 3.9.6ではなく)
  • Pyenv localで3.7.9に変えたのに、そのディレクトリでvenvコマンドを叩いて仮想環境を作ると、仮想環境野中では3.7.9が立ち上がらない。

成功した解決策

(参考)

解決方法

https://github.com/pyenv/pyenv#homebrew-on-mac-os-x を読み直してみたら、「pyenv initを使うように!」とあったので、早速実行。

$ pyenv init
# Load pyenv automatically by appending
# the following to ~/.bash_profile:

eval "$(pyenv init -)"

指示通り、~/.bash_profileにeval "$(pyenv init -)"を追記して、source ~/.bash_profileを実行したところ…

$ python -V
Python 3.5.6

解決!
ドキュメントはきちんと読めということですね(反省)

書いてあるとおり、bash_profileに1行追記したところ解決しましたsunny:

Terminal
electron@diynoMacBook-Pro ~ % ls ~/.bash_profile
/Users/electron/.bash_profile
electron@diynoMacBook-Pro ~ % cat ~/.bash_profile
eval OPAM_SWITCH_PREFIX='/Users/electron/.opam/default'; export OPAM_SWITCH_PREFIX; CAML_LD_LIBRARY_PATH='/Users/electron/.opam/default/lib/stublibs:Updated by package ocaml'; export CAML_LD_LIBRARY_PATH; OCAML_TOPLEVEL_PATH='/Users/electron/.opam/default/lib/toplevel'; export OCAML_TOPLEVEL_PATH; PATH='/Users/electron/.opam/default/bin:/Users/electron/.pyenv/shims:/Users/electron/.pyenv/bin:/Users/electron/.nodebrew/current/bin:/Users/electron/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/electron/.cargo/bin'; export PATH;
export PATH=~/bin:$PATH
electron@diynoMacBook-Pro ~ % 
  • Vimで編集
Terminal
electron@diynoMacBook-Pro ~ % vi ~/.bash_profile
  • 最終行に、eval "$(pyenv init -)"を追記した。
Terminal
electron@diynoMacBook-Pro ~ % cat ~/.bash_profile
eval OPAM_SWITCH_PREFIX='/Users/electron/.opam/default'; export OPAM_SWITCH_PREFIX; CAML_LD_LIBRARY_PATH='/Users/electron/.opam/default/lib/stublibs:Updated by package ocaml'; export CAML_LD_LIBRARY_PATH; OCAML_TOPLEVEL_PATH='/Users/electron/.opam/default/lib/toplevel'; export OCAML_TOPLEVEL_PATH; PATH='/Users/electron/.opam/default/bin:/Users/electron/.pyenv/shims:/Users/electron/.pyenv/bin:/Users/electron/.nodebrew/current/bin:/Users/electron/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/electron/.cargo/bin'; export PATH;
export PATH=~/bin:$PATH
eval "$(pyenv init -)"
electron@diynoMacBook-Pro ~ %
  • sourceで、bash_profileを再読み込み。
Terminal
electron@diynoMacBook-Pro ~ % source ~/.bash_profile

Pythonが3.7.9系に切り替わった

Terminal
electron@diynoMacBook-Pro ~ % python -V           
Python 3.7.9
electron@diynoMacBook-Pro ~ % python3 -V          
Python 3.7.9
electron@diynoMacBook-Pro ~ % 

vemv仮想環境の中でも、Pythonが3.7.9系に切り替わっている

Terminal
electron@diynoMacBook-Pro ~ % python3 -m venv venv-test
electron@diynoMacBook-Pro ~ % source venv-test/bin/activate
(venv-test) electron@diynoMacBook-Pro ~ % python -V
Python 3.7.9
(venv-test) electron@diynoMacBook-Pro ~ % python3 -V
Python 3.7.9
(venv-test) electron@diynoMacBook-Pro ~ % 

失敗した方法

この固定されたPythonバージョンを変更するにはどうすればよいかというと、結論としては、仮想環境内のPythonバージョンを切り替えるためには、venvの--オプションを利用して仮想環境を一度クリアする必要があります。

実際にやってみます。ローカル環境でpython -m venv [venvディレクトリ] --を実行し、作成済みの仮想環境をクリアします。

Terminal
electron@diynoMacBook-Pro ~ % python3 -m venv test
electron@diynoMacBook-Pro ~ % source test/bin/activate
(test) electron@diynoMacBook-Pro ~ % python --version
Python 3.9.6
(test) electron@diynoMacBook-Pro ~ % pip --version
pip 21.1.3 from /Users/electron/test/lib/python3.9/site-packages/pip (python 3.9)
(test) electron@diynoMacBook-Pro ~ % 
Terminal
(test) electron@diynoMacBook-Pro ~ % deactivate                  
electron@diynoMacBook-Pro ~ % python -m venv test --
/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: No module named venv
electron@diynoMacBook-Pro ~ % 
electron@diynoMacBook-Pro ~ % pyenv versions
  system
  2.7.16
  3.6.0
  3.6.1
  3.6.3
  3.6.3/envs/gpt2_ja
  3.6.6
  3.7.0
  3.7.4
* 3.9.0 (set by /Users/electron/.python-version)
  gpt2_ja
electron@diynoMacBook-Pro ~ % pyenv local 3.7.9
pyenv: version `3.7.9' not installed
electron@diynoMacBook-Pro ~ % pyenv install 3.7.9
python-build: use [email protected] from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.9.tar.xz...
-> https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz
Installing Python-3.7.9...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

Installed Python-3.7.9 to /Users/electron/.pyenv/versions/3.7.9

electron@diynoMacBook-Pro ~ % 
electron@diynoMacBook-Pro ~ % pyenv versions
 electron@diynoMacBook-Pro ~ % pyenv local 3.7.9
electron@diynoMacBook-Pro ~ % pyenv versions 
  system
  2.7.16
  3.6.0
  3.6.1
  3.6.3
  3.6.3/envs/gpt2_ja
  3.6.6
  3.7.0
  3.7.4
* 3.7.9 (set by /Users/electron/.python-version)
  3.9.0
  gpt2_ja
electron@diynoMacBook-Pro ~ %
Terminal
electron@diynoMacBook-Pro ~ % python3 -m venv test       
electron@diynoMacBook-Pro ~ % source test/bin/activate   
(test) electron@diynoMacBook-Pro ~ % python --version
Python 3.9.6
(test) electron@diynoMacBook-Pro ~ % deactivate
Terminal
electron@diynoMacBook-Pro ~ % pyenv global 3.7.9
electron@diynoMacBook-Pro ~ % python3 -m venv test    
electron@diynoMacBook-Pro ~ % source test/bin/activate
(test) electron@diynoMacBook-Pro ~ % python --version 
Python 3.9.6
(test) electron@diynoMacBook-Pro ~ % python -V
Python 3.9.6
(test) electron@diynoMacBook-Pro ~ % 
(test) electron@diynoMacBook-Pro ~ % pyenv versions
  system
  2.7.16
  3.6.0
  3.6.1
  3.6.3
  3.6.3/envs/gpt2_ja
  3.6.6
  3.7.0
  3.7.4
* 3.7.9 (set by /Users/electron/.python-version)
  3.9.0
  gpt2_ja
(test) electron@diynoMacBook-Pro ~ % 
(test) electron@diynoMacBook-Pro ~ % python3 --version
Python 3.9.6
(test) electron@diynoMacBook-Pro ~ % python --version
Python 2.7.16
(test) electron@diynoMacBook-Pro ~ % 
(test) electron@diynoMacBook-Pro ~ % pyenv local 3.7.9
(test) electron@diynoMacBook-Pro ~ % python -V
Python 2.7.16
(test) electron@diynoMacBook-Pro ~ % pyenv shell 3.7.9
(test) electron@diynoMacBook-Pro ~ % python -V        
Python 2.7.16
(test) electron@diynoMacBook-Pro ~ % deactivate