きっかけ
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
- Python 2.x
になります。
AltUnityTesterについて
沼にハマる前
最初は、AltUnityTesterで必要なものとして次のエラーが出ました。
ImportError: No module named appium
ImportError: No module named altunityrunner
この2点に関しては、単純にインストールしていました。
ですが、今思えばすでにそこで失敗していました...。
AltUnityTesterのPythonのサポートについて
OSSでもあるAltUnityTesterは、AssetStoreとGitlabからダウンロードできます。
Pythonを使うのでPythonのサポート状況を確認すると、
とのことで、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/pyenvのwikiに詳細がまとまっているらしいのでいくつか記事を参考に対応してください。
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)。
参考記事集
- Appiumを使ってスマートフォンアプリのテストを自動化する - Python編
- 公式サイトからMacにインストールしたPythonをアンインストールする方法
- 【Mac】【Homebrew】Python 3 をアンインストールする手順
- pythonのアンインストール
- Mac OS XでPython2.xからPython3.xに切り替えた話
- Python 2系と3系の共存
- HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ
- Mac(Homebrew)でPython(pyenv/virtualenv)開発環境を作る
- pyenvはインストール済みだが、pyenvコマンドが効かない
- Mac に pyenv + pip で Ansible 用 python を作る
- Macに入れた各種Pythonを全部アンインストールしてAnacondaを入れなおす
- コマンドラインでbrew doctorすると警告だらけになっちゃった助けて