CentOS 5, 6, 7間でQtを共有する

CentOS 7で問題発生

職場でQt, PyQtのインストールを管理してたりするわけですが、職場ではNASで共通のインストールを使ってます。こんな感じ。

f:id:takumiprogrammer:20170307045610p:plain:w200

マシンはCentOS 5, 6だけでした。古い環境ですので。。。ま、問題なく稼働してたわけですが、ある日CentOS 7を評価することになりました。こういうことですね。

f:id:takumiprogrammer:20170307045619p:plain:w300

問題発生。

エラーが出て動かないっす。

error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory

CentOS 7だけ別インストールを作らないとダメか??関連アプリケーションもあるから面倒臭い。。。

と思っていたら、回避策発見。システムのlibpngを使わないようにすることが出来るようです。

$ ./configure -qt-libpng

Qtにバンドルされているものを使うようです。再コンパイルが必要になりましたが、Qtの再コンパイルだけで全て解決。

PyQtのImportについて考えてみる。

どうやってimportしてる?

PyQt使うとき、当然ですがimportが必要ですよね。どうやってimportしてますか?

  • パターン1
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
 
a = QApplication(sys.argv)
  • パターン2
import sys
import PyQt5.QtCore
import PyQt5.QtWidgets
 
a = PyQt5.QtWidgets.QApplication(sys.argv)

あなたはどっち派?

Takumiはパターン1派です。パターン2はタイプ数が多い。。。面倒臭がりのTakumiには辛い。パターン2の方が名前空間を汚さなくていいんでしょうけどね。

ここでパターン1を正当化してみる。

  • PythonC++とかと比べて、簡潔な記述でプログラムが作れるべき。

  • そもそもプログラマは楽することを目指すべき。(プログラムは楽するために作る???と思ってる私)

ようするに自分の性格だけの問題ではないということを、もっともらしく言ってみたかっただけですが。

名前空間は汚れる?

名前空間が汚れるって、どういうこと?名前が多く入ってきた時、名前空間が汚れると言いますか?じゃ、パターン1のimportでは汚れます。Dirtyです。何故って、クラスその他、かなりの数が定義されてますよ!

でもTakumiは気にしない。Qtのものだということが分かりやすい名前がついてますからね。でも、PyQt4のときは1点問題がありました。QtCoreの中で、bin/oct/hexが関数として定義されてました。組み込み関数とかぶってる!ま、この辺の関数はあまり使って無かったんで気にしてませんでしたけど。

>>> from PyQt4.QtCore import *
>>> hex(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: hex(QTextStream): argument 1 has unexpected type 'int'
>>> __builtins__.hex(10)
'0xa'

__builtins__を使えば元の関数も使えますが。

PyQt5はこの問題はないみたいですね。

  • PyQt4.QtCore.bin → PyQt5.QtCore.bin_

  • PyQt4.QtCore.oct → PyQt5.QtCore.oct_

  • PyQt4.QtCore.hex → PyQt5.QtCore.hex_

ちゃんとアンダーバーつけて問題回避してありました。

こんなimport方法も

この記事書きながら気付きました。こんなimportをすれば、”名前空間を汚さない”&”楽に書ける” を両立出来そう。

import sys
from PyQt5 import QtCore, QtWidgets as qt

a = qt.QApplication(sys.argv)

それでもTakumiはパターン1を使い続けますが。

CentOS6にPyQt5をインストール

ようやくPyQt5をインストール

ようやくPyQt5です。PyQt5をCentOS6に実は入れたことがない。。。どっかではまりそう。はりきっていきましょう。

Qt5のインストール

まずはQt5のソースをゲット。

wget http://download.qt.io/official_releases/qt/5.7/5.7.1/single/qt-everywhere-opensource-src-5.7.1.tar.gz

とりあえず何も考えずにコンパイルしてみましょうか。

$ tar xf qt-everywhere-opensource-src-5.7.1.tar.gz
$ cd qt-everywhere-opensource-src-5.7.1
$ ./configure --prefix=$HOME/local/qt/5.7.1

コケる。あっさりコケる。

Creating qmake...
.cc1plus: error: unrecognized command line option "-std=c++11"
gmake: *** [project.o] Error 1

むむむ。。。CentOS6のgccは"-std=c++11"に対応していない。。。これを"-std=c++0x"に書き換えればコンパイルできる可能性があるかも???なんて思ったりもしますが、それは無駄な努力になりそうな予感。Takumi的野生の勘です。

というわけで諦めましょう。あっさりと。ここはインストーラの出番です。

https://www.qt.io/download/

普通にインストーラをダウンロードすると、途中で"Network Error"が出てしまいました。とりあえず通信させなければ良いんでしょ?という考えのもと、オフラインインストーラを改めてゲット。こいつを走らせてみる。

$ chmod +x qt-opensource-linux-x64-5.7.1.run 
$ ./qt-opensource-linux-x64-5.7.1.run 

インストールパスは前回のQt4にあわせて、"$HOME/local/qt/5.7.1"に設定。さあインストールだ。。。終わった。

"$HOME/local/qt/5.7.1"の下が思っていたより複雑(?)になってる。ここはパスの設定時だけの話なので、気にしないことにする。

Python3のインストール

執筆時点での最新は3.6.0ですね。とりあえず最新を入れてみましょう。

$ wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
$ tar xf Python-3.6.0.tgz
$ cd Python-3.6.0
$ ./configure --enable-shared --prefix=$HOME/local/python/3.6.0
$ make
$ make install

相変わらずPythonのインストールは簡単ですね!

SIP & PyQt5のインストール

Qt,Pythonにパスを通します。Qt4の時とインストールパスが違う。。。

$ export QTDIR=$HOME/local/qt/5.7.1/5.7/gcc_64
$ export PATH=$QTDIR/bin:$HOME/local/python/3.6.0/bin:$PATH
$ export LD_LIBRARY_PATH=$QTDIR/lib:$HOME/local/python/3.6.0/lib:$LD_LIBRARY_PATH

軽くパス設定の確認をしておきましょうかね。

$ which qmake
~/local/qt/5.7.1/5.7/gcc_64/bin/qmake
$ which python3
~/local/python/3.6.0/bin/python3
$ python3
Python 3.6.0 (default, Jan  5 2017, 06:50:48) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ここまでは問題なし!それではSIP & PyQt5のインストールです。

$ wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.19/sip-4.19.tar.gz
$ tar xf sip-4.19.tar.gz
$ cd sip-4.19
$ python3 configure.py
$ make
$ make install
$ wget https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.7.1/PyQt5_gpl-5.7.1.tar.gz
$ tar xf PyQt5_gpl-5.7.1.tar.gz
$ cd PyQt5_gpl-5.7.1
$ python3 configure.py
cc1plus: error: unrecognized command line option "-std=gnu++11"

コケた。またc++11系エラー。そういえばPyQt5はpipでインストールできたはず!

$ pip3 install PyQt5

インストール完了。

結局自力コンパイルしたのはPython3だけですね。CentOS6はもう古いのか。。。GCCをインストールすればいろいろ出来そうですけど。インストーラ・パッケージリリースに頼るのも悪くない。

今回はここまで!

CentOS6にPyQt4をインストール

PyQt4をソースからインストール

”あれ、PyQt5のインストールじゃないの??”と言われてしまいそうですが、PyQt4です。PyQt4と5の比較をしたくなることもあるはず!ということで、PyQt4を準備です。これは慣れたもの!(のはず。)前回からの続きということで、ルート権がない状態でCentOS6に開発環境を導入する、ということをテーマにします。

Qt4のインストール

まずはQt4のソースをゲットです。

$ wget http://download.qt.io/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz

取得が終われば展開、コンパイルです。

$ tar xf qt-everywhere-opensource-src-4.8.6.tar.gz
$ cd qt-everywhere-opensource-src-4.8.6
$ ./configure --prefix=$HOME/local/qt/4.8.6
$ make

インストール先は、後でQt5も入れることを考えて"~/local/qt/4.8.6"にしました。configure実行直後に聞かれるライセンスはopensourceを選びました。

他にもオプションを工夫したほうが良いかも知れませんが、とりあえず今回は一番簡単なオプションで。。。

おっと、エラーです。

make /home/takumi/app_compile/qt-everywhere-opensource-src-4.8.6/src/3rdparty/webkit/Source/WebCore/WebCore.pro -spec /home/takumi/app_compile/qt-everywhere-opensource-src-4.8.6/mkspecs/linux-g++ -o Makefile.WebKit
Project ERROR: Package gstreamer-app-0.10 not found

むむむ。。。足りないパッケージをyumでインストールす必要がありますね。。。

ルート権がない状態というテーマと、当面WebKitは使わないだろうという前提のもと、WebKitは無視することにします。

$ ./configure --prefix=$HOME/local/qt/4.8.6 -no-webkit
$ make
$ make install

インストール完了。

Python 2.7 のインストール

Python2.7もソースからインストールしてみましょう。執筆時点での最新は2.7.12でした。

$ wget wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
$ tar xf Python-2.7.12.tgz
$ cd Python-2.7.12
$ ./configure --enable-shared --prefix=$HOME/local/python/2.7.12
$ make
$ make install

特にトラブル無く終了!

SIP & PyQt4のインストール

ここからPyQt4のインストールですね。まずはさっきインストールしたQt,Pythonにパスを通します。

$ export QTDIR=$HOME/local/qt/4.8.6
$ export PATH=$QTDIR/bin:$HOME/local/python/2.7.12/bin:$PATH
$ export LD_LIBRARY_PATH=$QTDIR/lib:$HOME/local/python/2.7.12/lib:$LD_LIBRARY_PATH

これで後はソースのダウンロード&インストールです!

まずはSIP

$ wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.18.1/sip-4.18.1.tar.gz
$ tar xf sip-4.18.1.tar.gz
$ cd sip-4.18.1
$ python configure.py
$ make
$ make install

お次はPyQt4。

$ wget http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt-x11-gpl-4.11.4.tar.gz
$ tar xf PyQt-x11-gpl-4.11.4.tar.gz
$ cd PyQt-x11-gpl-4.11.4
$ python configure.py
# Need to accept the license (GPL)
$ make

またエラー。

/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/sip/phonon/abstractaudiooutput.sip:28:33: error: abstractaudiooutput.h: No such file or directory
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/sip/phonon/abstractvideooutput.sip:28:33: error: abstractvideooutput.h: No such file or directory
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/sip/phonon/audiooutput.sip:28:25: error: audiooutput.h: No such file or directory
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/sip/phonon/backendcapabilities.sip:28:33: error: backendcapabilities.h: No such file or directory
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/sip/phonon/effect.sip:28:20: error: effect.h: No such file or directory

〜〜省略〜〜

/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:791: error: 'Phonon' has not been declared
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:791: error: 'a1' was not declared in this scope
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:794: error: 'a0' was not declared in this scope
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:796: error: 'Phonon' has not been declared
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:796: error: 'sipRes' was not declared in this scope
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:799: error: expected type-specifier before 'Phonon'
/home/takumi/app_compile/PyQt-x11-gpl-4.11.4/phonon/sipphononcmodule.cpp:799: error: expected ';' before 'Phonon'

Phononのところみたいですね。Qtのconfigureの時のgstreamerの問題に関連しているような気が。。。Phononを無効化してみよう。

$ python configure.py \
   -e QtGui -e QtHelp -e QtMultimedia -e QtNetwork -e QtDeclarative \
   -e QtScript -e QtScriptTools -e QtXml -e QtOpenGL -e QtSql -e QtSvg \
   -e QtTest -e QtWebKit -e QtXmlPatterns -e QtDesigner -e QAxContainer \
   -e QtDBus -e dbus
$ make
$ make install

インストール完了。configure.pyのオプションはかなり力技?「もっとエレガントに出来ないのか!」と言われてしまいそうですが。。。そもそもPhononから逃げてるような状態なので、このあたりはインストールできれば良し、ということで。

おまけ (pip)

pipもどうせ必要になるので、入れておきましょうか。https://pip.pypa.io/en/latest/installing/ にインストールに関する情報があります。

。。。。。

2.7.9以降はデフォルトでインストールされている???見つかりませんけど???

ソースからインストールすると入らないんでしょうか。とりあえず手順通り入れておきましょう。

$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py

今回はここまで!

VirtualBoxでMacにCentOS6をインストール。

CentOS6でもPyQt5目指す。

CentOSといえばどんなイメージでしょうか。Takumiは、かなり保守的というイメージを持ってます。というか、保守的ですよね。実は職場の作業環境はCentOS5, 6がメインだったりします。

今回は下にある条件でのインストールをやってみます。

  • CentOS6でのPyQt5インストール
  • システムの環境に影響を与えないように環境を作る
    • root権が使えない状態を想定。
  • インストールするバージョンは下記

root権が無いけど、新しい開発環境使ってみたい!ってケース、あるんじゃないでしょうか。ちなみにTakumiは職場ではそんな状態です。root権があっても、root権限でのインストールはしたくない、という場合もあるかもしれません。

「何でCentOS7じゃないの?」ってつっこみたくなりますか?それは、、、ゴニョゴニョ。。。職場で使ってるのがCentOS6だからという理由は無視していただいて、ここでの目的はある程度Legacyな環境に新しい開発環境を導入する、ということにしたいと思います。

とりあえず最初からやろう、ということでTakumiマシンのMacでやってみます。VirtualBoxです。

とりあえずCentOS6準備

VirtualBoxのインストールはあまり迷うことも無いと思うので割愛。CentOSのISOイメージをとってきましょう。こんな感じ。

$ wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.8/isos/x86_64/CentOS-6.8-x86_64-bin-DVD1.iso
$ wget http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.8/isos/x86_64/CentOS-6.8-x86_64-bin-DVD2.iso

結構時間かかる。DVD2のイメージ、ひょっとしていらない???インストールをやってみて、後で気付いた。。。

気を撮り直して、VirtualBoxです。"新規"で仮想マシン作りましょう。Takumi的設定。

  • 名前: CentOS6
  • タイプ: Linux
  • バージョン: Red Hat (64-bit)
  • モリーサイズ: 2GB (ホストのスペックにあわせて適当に調整)
  • 仮想ハードディスクを作成する
  • VDI (VirtualBox Disk Image)
  • 可変サイズ(なんとなく)
  • ハードディスクのサイズ: 40GB

MacBookSSD容量が少ない。。。Takumiは外付けHDDを繋いで、そこにVM作ってます。"VirtualBox"メニューの"環境設定"からVMイメージの保存先を変更可能。

それでは"設定"の"ストレージ"の中で、"コントローラー:IDE"にさっきダウンロードしたDVD1のisoイメージをマウントしましょう。それではVM起動!!

CentOS6インストール

ここからは通常のCentOS6のインストーラですね。ざっくりと手順。

  • "Install or upgrade an existing system"を選択。

  • "Disc Found"のダイアログボックスで"OK"か"Skip"を選択。

    • ダウンロードしたisoファイルに問題は無いと信じて、"Skip"を選択。

    • ここはマウスは使えないのでカーソルキーで!

    • 次のステップからマウスが使えます。

  • "Next"をクリック。

  • 言語選択。Takumiは日本語です。

    • Takumiの経験的に、最初に日本語を選んでおいた方が、日本語関連のインストールがスムーズ。

    • コマンドラインでファイル名に日本語があると面倒臭いことになるので、インストール後に英語に変えてます。

  • 次はキーボードの選択。英字配列愛用のTakumiは"英語(U.S.インターナショナル)"を選択しました。

  • ストレージデバイスは"基本ストレージデバイス"

  • ここで"データあるかも!"という警告が出ますね。今回は新規に作成したVMのディスクなのでデータは無いっす。"はい。含まれていません。どのようなデータであっても破棄して下さい"を選択。

    • "選択した全てのデバイス"にもチェックを入れておきましょう。
  • ホスト名は適当に付けましょう。

  • タイムゾーンは"アジア/東京"ですね。インストール中の言語を日本語にしていると、デフォルトで選択されているはず。

  • rootのパスワード設定です。Takumiはパスワード弱いぞ!って怒られましたが、無視して続行。

  • インストールのタイプは"全ての領域を使用する"

  • "パーティションにあるデータはすべて失われます"というメッセージが出ますね。かなり恐怖なメセージですが、VMのイメージ内での話。ここは"変更をディスクに書き込む"を選択。

  • 作成するCentOSの用途選択。インストールされるパッケージが用途によって変わってきます。今回は"Software Development Workstation"を選択。Workstationですよ。自己満足度アップですよ。

インストールが始まるので、ここからは待ち時間。コーヒーでも入れましょう。本体の内蔵SSDだったらかなりサクッと終わりそうですが、外付けUSBなのでちょっと辛抱ですね。インストールが完了すれば、"再起動"です!

インストール完了まで後少し。立ち上がれば"進む"ボタンで進めましょうライセンスには同意です。

  • ユーザーの作成

    • ネットワーク認証とか使わなければ、特に迷うところは無いですね。パスワード、またまた脆弱って言われた。。。無視!
  • 日付の設定

    • 基本的にオンラインで使う、ということで"ネットワーク上で日付と時刻を同期化します"にチェック。

    • NTPサーバーはなんとなく0番を選んでみた。

  • Kdump

    • よく分からんのでデフォルトのままで。。。

またまた再起動ですね。この再起動が終わればログイン出来ます!

Guest Additionsのインストール

さっき作ったユーザーでログイン後、VirtualBoxメニュー(CentOSデスクトップのメニューじゃないよ!)から、Devices -> Insert Guest Additions CD imageをクリック。CDイメージがマウントされるので、rootユーザーでGuest Additionsのインストーラを起動しましょう!

$ su
$ /media/VBOXADDITIONS\_5.0.28\_111378/VBoxLinuxAdditions.run

これで色々便利に使えるはず。VirtualBoxウインドウのリサイズはデスクトップセッションを立ち上げ直せば有効になります。(ログアウト -> ログイン)

本日これにて終了。

次からPyQtインストール!

PyQt5インストール on Mac。これが入り口?

ついにたどり着きました

Takumiです。前回Python3インストールでハマったので、ついにという感じです。インストールに関しては既にお腹いっぱい感を否めませんが、乗り越えなくては行けません。ということでいってみましょう。

インストール

PyQtの開発は今も変わらずRiverbankですね。っちゅうか、これが普通? Qtの開発元が変わりすぎているような。。。

SIPとPyQt5をダウンロードして、コンパイル&インストールすればいいみたいですね。ここは前回Takumiがインストールした時と同じっぽいので、安心します。以下でダウンロード出来そうです。

[SIP] https://www.riverbankcomputing.com/software/sip/download

[PyQt5] https://www.riverbankcomputing.com/software/pyqt/download5

。。。。。ん?

$ pip3 install PyQt5

pipサポートされてる??

これは便利そうだ。というわけで、今回はpip3でのインストールを試してみよう。

$ pip3 install PyQt5
Collecting PyQt5
  Downloading PyQt5-5.7-cp35-cp35m-macosx_10_6_intel.whl (79.4MB)
Collecting sip (from PyQt5)
  Downloading sip-4.18.1-cp35-cp35m-macosx_10_6_intel.whl (46kB)
Installing collected packages: sip, PyQt5
Successfully installed PyQt5-5.7 sip-4.18.1

終わった。今回の記事も終わった。。。

いやいや、確認ぐらいしておきましょう。PyQt4でよくやるHello worldです。

from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

a = QApplication(sys.argv)
w = QLabel("Hello world")
w.show()
exit(a.exec_())

で、実行です。

$ python3 sample.py
Traceback (most recent call last):
  File "sample.py", line 5, in <module>
    a = QApplication(sys.argv)
  NameError: name 'QApplication' is not defined

動かん。でも、少なくともImportは動いてるようですね。そういえばQt5でモジュールの構成が変わっていたような。。。(保守的にQt4を使い続けていましたが、気になってたまに情報は見てました。)

で、Widgetsというモジュールになってるんですね。

from PyQt5.QtCore import *
# QtGuiではなく、QtWidgetsからのimportに変更
# from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys

a = QApplication(sys.argv)
w = QLabel("Hello world")
w.show()
exit(a.exec_())

動いた〜〜!

本日終了!

Python3 & Qt5 インストール on Mac、バラ色の人生への第一歩!

幸せへの第一歩

お楽しみのPython3 & PyQt5のインストールです。これが幸せへの第一歩だと信じて。。。

実際のところ、こういうバージョンアップをすると「今まで出来てたことが出来ない!」ってことがよく起こりますよね。はい、そうです。幸せへの第一歩ではなく、苦難への道です。

でもそれは一時的なもの。エンジニアとしては、その中で新しいことを学ぶ、というところに幸せを見つけたい。(言い聞かせてみる)

実際、経験豊富な凄いエンジニアの方々がこういったライブラリを開発しているわけです。最初は使いにくい、と思っても、ある時「なるほど!」と思える瞬間がきたりもします。今回はどんなことが起こるのか。。。

まずはMacでインストール

Takumiのメインマシン、Macです。Mac歴はまだまだ短いのですが。。。

まずはGoogle先生で"PyQt5 インストール"を検索して、出てきた適当なページに従って、、、と言いたくなるぐらい情報はあふれてますね。Takumiがわざわざ書く意味あるのか・・・

MacでQt 5.x

まずはQtです。以下のURLからQtの最新版(Version 5.x)のインストーラをダウンロード。

https://www.qt.io/download-open-source/

ダウンロードしたファイルからインストーラを起動して、後は指示通り。今はQtのアカウントがいるんですね。持ってない人は作りましょう。以前Takumiがインストールした時はいらなかったけど。。。そういえばその頃はNokiaがQtの開発やってたな。それからDigia、Qt Companyと変わっていったようだ。たらい回し?

そういえば長らくインストール作業はやってない!!(今気付いた)

インストール自体は簡単ですね。

MacでPython3

このコマンド一発のはず??

$ brew install python3

エラーでコケる。。。

checking whether we are cross compiling... configure: error: in `/private/tmp/xz20161022-22579-1yumeyk/xz-5.2.2':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details

config.logを見ろと言われても、見つからないんですけど。。。brew初心者のTakumiはフリーズ。。。

ここはやっぱりGoogle先生このページによると、このコマンドが必要そうだ。

$ sudo xcode-select --install

もう一度インストールを試す。さっきより進んだけど、やっぱりコケる。モグラたたきの予感。。。そもそもbrewでこんなにコケるものか??

そういえば最近Sierraにアップデートした

SierraにアップデートしてからKarabinerが使えなくなったり色々困ってるけど、ひょっとしてこれもSierra問題か???目には目を、歯には歯を、バージョンアップ問題にはバージョンアップを!!(意味不明)とりあえずApp StoreXcodeのバージョンアップやってみる。終わったらこれ。

$ sudo xcodebuild -license

インストールに再挑戦するも、またコケる。

Error: Permission denied - /usr/local/Frameworks

このページによると、以下で解決するらしい。

$ sudo chown -R $USER /usr/local

確かに権限の問題は解決する。でも/usr/localに権限付けてしまって大丈夫か???と思ったら、さっきのページにちゃんと書いてあった。

Homebrewを標準の方法でインストールしてれば、/usr/localの所有権限はあなたのユーザーとadminグループになるのよ。(権限設定が違ってれば、Homebrewを別の権限でインストールしていたことを思い出すかもしれないわ。) 何が所有権を変えたかは分からない。でもHomebrew以外の何かで"sudo"を使ったインストールをすれば、所有権を変えてしまうかもしれないわね。(Homebrew自体の所有権がrootで無ければ、Homebrewは"sudo"を使うことを拒否するようになってるわ)

回答されていたのが綺麗な女性の方だったようなので、あえて口調を変えてみました。不自然?Takumi環境はSierraのインストールの影響な気がする。。。

とにかく/user/localのownerを変更して、もう一度インストールしてみよう。・・・と思ったら、既にインストールされてるとのメッセージ。アンインストールしてやり直しますか。というわけでコマンドはこんな感じ。

$ sudo chown -R $USER /usr/local
$ brew uninstall python3
$ brew install python3

インストールできた!

$ which python3
/usr/local/bin/python3

Pythonインストールにここまではまるとは。。。

Linux使いのTakumi的にはLinuxでのインストールも書こうと思ってましたが、Macではまり過ぎて時間切れ。Linuxはまたの機会に!