【Pyenv】MacOS:できるだけシンプルにPython環境構築

MacOS

Pythonの導入はありとあらゆるサイトで説明がありますが、新規のMacOSにPython環境構築をし直す機会があったため、できるだけシンプルに導入する方法を記載します。

2020.12.2 現在の最新versionは Python ver 3.9.0ですが、機械学習ライブラリを使用するならver 3.8あたりを使用するのが良いでしょう。対応しているVersionを随時確認してください。MacOS Catalina ver 10.15.7に環境構築します。

結論を先に記載すると、前ページで記載したHomebrewが導入されていれば、Homebrew経由でPyenvをインストールし、Pyenvから最新VersionのPythonに変更することが最もシンプルだと感じました。

MacOSにはPython ver 2.7 とver 3.7 はプリインストールされています。ver 3.7.0 は2018.6.27 のリリースで時間が経っておりアップデートする必要があります。

Pyenvとは?

Pyenvは異なるversionのPythonをインストールし簡単に切り替えられるようにするツールです。Homebrewから直接、最新versionのPythonをインストールすることも可能ですが、機械学習で有名なScikit-learnやTensorflowといったパッケージは最新versionに対応していないことも多く、versionによるエラーが出た際にも切り替えで解消できることがあるため、Pyenv経由でのインストールを行った方が良いと思います。

Pyenvの導入方法

前ページを参照しHomebrewがインストールされている前提で話を進めます。Homebrewが最新版でない場合はアップデートしておきましょう。

$ brew update

Homebrewが準備できたら、下記コマンドでPyenvをインストールします。

$ brew install pyenv

インストールが完了したらprofileに設定を記載しましょう。以前のページで画像解析ソフトは bashにPATHを通していたので、同様にbash_profileに記載します。Catalinaのデフォルトシェルであるzshでも良いですが、どちらかに統一した方が良いと思います。

下記コマンドでbash_profile内に設定を入力します。source ~/.bash_pofile で読み込むのを忘れないようにしましょう。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

.bash_profileを開いて記載があるか確認してみましょう。

$ open ~/.bash_profile

インストールが完了したらPyenvでインストール可能なPythonのVersionを確認します。

$ pyenv install --list

ここでは最新Versionであるver 3.9.0と念のためにver 3.8.0をインストールしましょう。pyenv install 3.X.Xで任意のVersionがインストールできます。

$ pyenv install 3.9.0
$ pyenv install 3.8.0

pyenv versionsでpyenvによって切り替えられるversionの確認ができます。

$ pyenv versions

インストールするだけではデフォルトのPython versionを参照してしまうため、Pyenvを用いて任意のインストールしたVersionを利用するよう設定しましょう。python –versionでアクティブなVersionが確認できます。pyenv global 3.X.X で利用するVersionを設定した後に再度、python –version を使用して変更されたことを確認します。利用するversion を変更したい場合も pyenv global 3.X.X を再度使用してください。

$ python --version
$ pyenv global 3.9.0

ローカルでversion切り替えをしたい場合は pyenv local 3.X.Xと入力してください。current directryに .python-version ディレクトリが作成され、指定したverisonになります。

$ pyenv local 3.9.0

これでPythonのインストールは完了です。しかしPythonで解析を行うためには、ライブラリ同士の干渉を防ぐために仮想環境を作成する必要があります。こちらについても有名なツールであるAnacondaではなくvenv か virtualenv のどちらかを推奨します。導入法は別ページに記載します。

補足1:pyenv globalが反映されない

pyenv global 3.X.X を使用してもpython -version が変化しない場合は Pythonの参照先が usr/bin/python のデフォルトのままになっている可能性があります。 which python と入力して確認してください。

$ which python

PATHが通っていても pyenv global で versionを変更できない場合は、pyenv versionsで確認した中に、 [ set by  /Users/【ユーザー名】/.python-version ]と表示がないか確認してください。Homeフォルダで作業している場合、Homeフォルダにあるlocal環境に引っ張られてしまっている場合があります。rmでフォルダを削除しましょう。

$ rm ~/.python-version

それでも反映されない場合は下記コマンドでPATHに任意のversionをコピーし直すことで解決する場合があります。

eval "$(pyenv init -)"

補足2:Python 2系をインストールできない

またPython 2系をインストールする際に「ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?」という表示が出てVersionのインストールができない場合があります。

Python 3.X はインストール可能ですが、上記のエラーが出る原因はOpen SSLにあるようです。現在Open SSL 1.1を使用していますが、Python 2.XのインストールのタイミングだけはOpen SSL 1.1に変更する必要があるようです。こちらのサイトが参考になりました。brewからOpenSSLを一度アンインストールしますが、そのままbrew uninstall opensslとすると「Error: Refusing to uninstall /usr/local/Cellar/openssl@1.1/1.1.1h because it is required by pyenv, which is currently installed.」と言われてアンインストールできません。そのため下記のコードでアンインストールします。

$ brew uninstall --ignore-dependencies openssl

その後、Python 2.Xをインストールすると、自動でOpen SSL 1.0をインストールしてくれます。今回はFSL使用のために version 2.7.0をインストールします。

$ Pyenv install 2.7.0

OpenSSL 1.0のインストールも行われているのがわかります。実際にインストールが完了できたか pyenv versionsで確認してみましょう。このままOpenSSL 1.0.0のままだとPython 3.Xを使用した際にエラーが起きることがあるので、OpenSSL 1.1にインストールし直す必要があるようです。こちらもPyenv 3.Xをインストールすると自動でインストールされます。OpenSSL 1.1.0でもPython 2.Xの使用は問題ありません。

コメント

タイトルとURLをコピーしました