Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

macOSでPython2.x系が必要になった場合の対処

この記事ではCogbot勉強会!in 名古屋 ~Cogbotええがゃ!~ - connpassで筆者が直面した問題の対処方法について述べます。

Update

現在は下記の対応は不要で、基本的に特別なことをしなければ、brew install pythonでPython 3.x系統をインストールしてもpythonコマンドでは2.x系が呼び出されるようになっているはずです。

詳しくは次の記事をご参照ください。

Homebrewでインストールされる/usr/local/bin/pythonが再びPython2に変更

TL;DR

  • Homebrewでpython3系をインストールしているとnode-gypで困ることがある
  • virtualenvでpython2系の仮想環境を作ることでpythonの2系と3系が切り替えられる
  • 2系の仮想環境を作って利用することで回避可能

発生した問題

久しぶりにnodeの開発環境を作ってnpm installしようとしたところ次のエラーが発生しました。

qiita.rb
> node-gyp rebuild || node suppress-error.js

gyp ERR! configure error
gyp ERR! stack Error: Python executable "/usr/local/bin/python" is v3.6.4, which is not supported by gyp.
gyp ERR! stack You can pass the --python switch to point to Python >= v2.5.0 & < 3.0.0.

エラーの原因は2つあります。

1つ目の原因はHomebrewでのpythonパッケージが3.x系を指すようになったことです。経緯についてはHomebrewでインストールされるPython(2)の変更についてに詳しく記載されています。現在、brew install pythonとするとpythonでPython3.x系が呼び出されるようになります。これはbrew info pythonで確認できます。

$ brew info python
python: stable 3.6.4 (bottled), devel 3.7.0b2, HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
(中略)
==> Caveats
Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/bin

If you need Homebrew's Python 2.7 run
  brew install python@2

If you wish to have python@2's python and python2 executables in your PATH then
add the following to ~/.bash_profile:
  export PATH="/usr/local/opt/python@2/libexec/bin:/usr/local/opt/python@2/bin:$PATH"

Pip, setuptools, and wheel have been installed. To update them run
  pip3 install --upgrade pip setuptools wheel

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.6/site-packages

See: https://docs.brew.sh/Homebrew-and-Python

2つ目の原因はnodejs/node-gypがpython3系に対応していないことです。

python (v2.7 recommended, v3.x.x is not supported)

根本的な解決はnode-gypをpython3系に対応させることですが、ここでは回避策としてpythonコマンドで呼び出すPythonのバージョンを切り替えることにします。

Pythonのバージョンの切替方法

Pythonのバージョンの切替を実現する手段は、例えば次のようなものがあります。

  1. pyenvの導入
  2. Anacondaの利用
  3. virtualenvvenvの利用

今回はvirtualenvを利用して解決してみます。

Python2系のインストール

必須ではありませんが、Python2系のインストールを行います。これによりPython2系のpippip2コマンドで呼び出せるようになります。

$ brew install python@2

また、.bash_profileに次の内容を追記しておきます。

export PATH="/usr/local/opt/python@2/bin:$PATH"

インストールがうまくいっていれば、python2でPython2が呼び出されるようになっているはずです。

$ python2 -V 
Python 2.7.14

virtualenvのインストール

pip2を使ってvirtualenvをインストールします。

$ pip2 install virtualenv

python2用の仮想環境の作成

virtualenvを使ってpython2用の仮想環境を作成します。

$ cd to/your/working/directory
$ python2 -m virtualenv python2

上記コマンドのうち、python2は任意の名前に置き換えて大丈夫です。上記コマンドを実行するとpython2ディレクトリ(実際は任意の名前で大丈夫)ができあがります。

作成したpython2環境の利用

完了後、作成した環境をアクティベートします。

$ source python2/bin/activate

これによりpythonコマンドでPython2系が呼び出されるようになります。

$ python -V
Python 2.7.14

作成したpython2環境からの離脱

離脱にはdeactivateコマンドを利用します。

$ deactivate

作成した環境の削除

作成した環境を削除するためには、作成されたディレクトリを削除すれば大丈夫です。

結果確認

もともとはnpm installがしたかったのでした。結果を確認してみます。

$ npm install --save botbuilder restify dotenv
+ dotenv@5.0.1
+ botbuilder@3.14.0
+ restify@6.3.4
updated 3 packages in 7.469s

無事実行できました。

Reference

Node.js

BotFramework

Homebrew

Pyenv, venv, virtualenv

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
14
Help us understand the problem. What are the problem?