LoginSignup
10
7

More than 3 years have passed since last update.

MacでPythonの2.xと3.xを共存させるためにpyenvを入れた時の話し

Last updated at Posted at 2018-06-07

きっかけ

dQxlP.png

AltUnityTesterを知って触ろうと思い、pythonで動くことを動画で知ったため、そのままやっていたらVSCode上で「ターミナルでPythonファイルを実行」でImportError: No module named appiumとエラー。

そこから色々必要なものを入れていったら、、、Pythonもしくはpipのバージョンで2.xと3.xで沼にハマったため、そこからのいろんな問題を解決した内容をまとめようと思い、このQiita記事を作りました。

最終的にはpyenvでPythonの各バージョンを管理するんですが、導入する前の環境は、

  • MacBookPro13 - MacOS Sierra 10.12.6
    • Python 2.x
      • /usr/bin/python2.6
      • /usr/bin/python2.7
    • Python 3.x
      • /usr/local/lib/python3.6

になります。

AltUnityTesterについて

 

沼にハマる前

最初は、AltUnityTesterで必要なものとして次のエラーが出ました。

  • ImportError: No module named appium
  • ImportError: No module named altunityrunner

この2点に関しては、単純にインストールしていました。
ですが、今思えばすでにそこで失敗していました...。

AltUnityTesterのPythonのサポートについて

OSSでもあるAltUnityTesterは、AssetStoreGitlabからダウンロードできます。

Pythonを使うのでPythonのサポート状況を確認すると、

スクリーンショット 2018-06-06 15.13.30.png

 

とのことで、Python3.xはまだサポートされていない中、最初気づかずにappiumやaltunityrunnerをpip3でインストールして対応していました。

python3 ...で実行しようとしていたため、途中からPython2.xで対応するようにpip2 install ...とpip3でインストールしていた同じ作業を行いました。

さて、ここまでがPythonの2.xと3.xのバージョンの沼にハマる入門編で、ここからが本格的にハマっていろんな対応をした内容になります。

No such file or directory

Python3.xでは、すでに先行して入れていたのですが、結局Python2.xで扱わないといけないことを途中で知ったので、インストールコマンドを全て2.x向けでやり直して作業を進めていました。

すると、

$ sudo pip install selenium
sudo: unable to execute /usr/local/bin/pip: No such file or directory

$ pip install --upgrade pip
-bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python
/usr/local/bin/python
$ which pip
/usr/local/bin/pip
$ python -V
Python 2.7.13

となって、No such file or directoryとか出力されるようになって、どうしようもない状況...

ModuleNotFoundError: No module named 'runner'

$ python "/Users/user_name/Unity/AdventureGame/AppiumTests/adventure-tests.py"
Traceback (most recent call last):
  File "/Users/user_name/Unity/Adventure - Sample Game/AppiumTests/adventure-tests.py", line 4, in <module>
    from altunityrunner import AltrunUnityDriver
  File "/usr/local/lib/python3.6/site-packages/altunityrunner/__init__.py", line 1, in <module>
    from runner import AltElement, AltrunUnityDriver
ImportError: No module named runner

これに関しては、

Requirement already satisfied: runner in /usr/local/lib/python3.6/site-packages (1.1)

となり、どうも2.xが3.xのpipを見ているようでどうしても先に進めない状況になっていました。

pyenvの登場

打つ手なしなので全部まっさらにし、2.xと3.xを使えるようにしておきたいため、pyenv/pyenvを用いてMacの環境に入っているPythonを全てアンインストール(brew uninstall python)し、pyenvでPythonを管理するようにしました。

Pythonを全てアンインストール

環境とコマンドの結果を見て気づいた人もいると思いますが、Pythonの場所は複数存在しているため、手作業はとても辛いです。

ですが、Pythonを全てアンインストールしたところ、シンボリックリンクで存在するPython関連のディレクトリが存在するため、最後の方が結構手作業になりました。


$ brew uninstall python3

$ python --version
Python 2.7.10

$ ls -lt /Library/Python/
total 0
drwxr-xr-x  3 root  wheel  102  4  5  2017 2.7
drwxr-xr-x  3 root  wheel  102  2  7  2017 2.6

$ ls -lt /usr/bin/ | grep python
lrwxr-xr-x   1 root   wheel         75  5 26  2017 python2.6 -> ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
lrwxr-xr-x   1 root   wheel         82  5 26  2017 python2.6-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6-config
lrwxr-xr-x   1 root   wheel         75  5 26  2017 python2.7 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x   1 root   wheel         82  5 26  2017 python2.7-config -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
lrwxr-xr-x   1 root   wheel         76  5 26  2017 pythonw2.6 -> ../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/pythonw2.6
lrwxr-xr-x   1 root   wheel         76  5 26  2017 pythonw2.7 -> ../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7
-rwxr-xr-x   1 root   wheel      66576  4 29  2017 pythonw
-rwxr-xr-x   1 root   wheel      66576  4 29  2017 python
-rwxr-xr-x   5 root   wheel        925  2  7  2017 python-config

$ sudo rm -fr /Library/Frameworks/Python.framework

$ ls -lt /Library/Python/
total 0
drwxr-xr-x  3 root  wheel  102  4  5  2017 2.7
drwxr-xr-x  3 root  wheel  102  2  7  2017 2.6

$ sudo rm -fr /Library/Python

$ sudo rm -fr /usr/bin/python2.7
rm: /usr/bin/python2.7: Operation not permitted
$ rm -fr /usr/bin/python2.7
rm: /usr/bin/python2.7: Operation not permitted
$ unlink /usr/bin/python2.6
unlink: /usr/bin/python2.6: Operation not permitted
$ sudo unlink /usr/bin/python2.6
unlink: /usr/bin/python2.6: Operation not permitted

 

ここでOperation not permittedの問題が出たためPCを再起動することに...

Operation not permitted

おそらくOperation not permittedが出る方が多いはずです。
Mac rm Operation not permitted」でだいたいいろんな記事がヒットするので調整しましょう。

さて、Pythonを全てアンインストールの続きです。

$ sudo rm -fr /usr/bin/python2.7
$ sudo rm -fr /usr/bin/python2.7-config 
$ sudo rm -fr /usr/bin/pythonw2.7
$ sudo rm -fr /usr/bin/python2.6
$ sudo rm -fr /usr/bin/python2.6-config 
$ sudo rm -fr /usr/bin/pythonw2.6 
$ sudo rm -fr /usr/bin/pythonw
$ sudo rm -fr /usr/bin/python-config 
$ sudo rm -fr /usr/bin/python
$ ls -lt /usr/bin/ | grep python
$ 

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Mojaveの方は、ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?に苦しめられると思います笑
pyenv/pyenvwikiに詳細がまとまっているらしいのでいくつか記事を参考に対応してください。

Read-only file system

macOS Catalina でRead-only file systemが発生します。

調査したところOperation not permittedと同じ手順なのですが、PCが再起動する度に設定が初期化されて適応できないため、最初に入っている標準システムなどを消す事が出来なくなったようです。

Catalina以降は本内容を諦めて$python ...$python3 ...で運用するしかないようです笑汗

pyenvでPythonをインストール

以下のように例を記載していますが、環境に応じて作業が異なります。
pyenv/pyenvのREADME.mdを読み、各自環境に合った作業を行ってください。

$ brew install pyenv

$ brew install pyenv-virtualenv

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

# いろいろインストールしてglobal設定

$ pyenv versions
* 2.7.10 (set by /Users/user_name/.pyenv/version)
  3.6.5
  anaconda-4.0.0
  anaconda3-4.0.0

まとめ

2.xと3.xで色々と問題になりやすかったり、少し前に3.xに移行しよう的なニュースがトピックに出てたりして、余計悩ましいPython...。

MacでPythonを扱う際には、一旦brewで全消しして、pyenvを入れて2.xと3.xを共存させて、切り替えて扱うようにすれば多少スッキリします!

この後のAltUnityTesterに関しては、本記事とは別でまとめようと思います。

おまけ: 絶対やってはいけないsudo rm -fr /System/Library/Frameworks/Python.framework

本当は、sudo rm -fr /Library/Frameworks/Python.frameworkであるところを根本であるSystem配下のPython.frameworkを消してしまった場合、Xcodeが起動できなくなり、gitや他ライブラリなどが使えなくなることになってしまいます。

そのため、速やかにPython.frameworkを再インストールする必要があるのですが、公式などでPython.frameworkをインストールするページが見つからないため、MacOSに慣れていない方はOSを再インストールすることを考えると思います。

その際、身近な方でMacを持っている場合は、その方に/System/Library/Frameworks/Python.frameworkをzipなどで貰い、sudo cp -pR ~/Downloads/Python.framework/* /System/Library/Frameworks/Python.framework/することをオススメします(別のMac環境でやってしまった経験ですw)。

参考記事集

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7