Macportsでバージョンの異なる複数のPythonをインストールしてしまい色々とやらかしている環境で、うっかりeasy_install
を叩いた時にport selectで選択しているPythonのバージョンに対応したeasy_installを自動的に選択して実行して欲しかったので、ラッパースクリプトを書いてみました。(日本語が長すぎ)
バージョン切り替えの手法が色々あるのがPython入門者にとってはカオスです...
#!/bin/bash
###
### Macports easy_install wrapper
### Created by H.Ishiura 2016-12-17
###
SELECT=`port select --show python`
if [[ "$SELECT" =~ ^The\ currently\ selected\ version\ for\ \'python\'\ is\ \'python(.)(.)\'\.$ ]]; then
MAJOR_VERSION=${BASH_REMATCH[1]}
MINOR_VERSION=${BASH_REMATCH[2]}
COMMAND="easy_install-${MAJOR_VERSION}.${MINOR_VERSION}"
else
COMMAND="/usr/bin/easy_install"
fi
${COMMAND} $@
このスクリプトを実行権をつけて/usr/binや/opt/local/binよりも優先的に検索されるディレクトリに配置します。
以下は導入の例です(動作は確認していません)
$ sudo port install python27
$ sudo port install py27-readline
$ sudo port install py27-setuptools
$ sudo port install py27-pip
$ sudo port install python35
$ sudo port install py35-readline
$ sudo port install py35-setuptools
$ sudo port install py35-pip
$ sudo port select --set python python35
$ sudo port select --set pip pip35
$ curl https://gist.githubusercontent.com/ura14h/6742ae07036dcf74b30de5d2ff8931a9/raw/f30e3887421e93a26df5553eb5c425cb7d7407e2/easy_install -o easy_install_wrapper
$ mkdir ~/bin/
$ mv easy_install_wrapper ~/bin/easy_install
$ chmod 755 ~/bin/easy_install
$ export PATH="${HOME}/bin:${PATH}"
あとは普通にコマンドを叩きます。
$ easy_install --version
setuptools 30.3.0 from /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages (Python 3.5)
ちなみに、バージョンを特定して実行する場合はこんな感じです。
$ /usr/bin/easy_install --version
setuptools 18.5 from /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (Python 2.7)
$
$ easy_install-2.7 --version
setuptools 30.3.0 from /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (Python 2.7)
$
$ easy_install-3.5 --version
setuptools 30.3.0 from /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages (Python 3.5)
本当は、port select --set easy_install easy_install-3.5
っぽいことができればいいんですけどね...。いや、そもそもMacportsをやめればいいのか...。