Raspbian stretch に PyQt5 をインストールする6(SIPをインストールする)
Qt5をPython3で使うための準備1。
前回まで
- http://ytyaru.hatenablog.com/entry/2019/11/13/000000
- http://ytyaru.hatenablog.com/entry/2019/11/14/000000
- http://ytyaru.hatenablog.com/entry/2019/11/15/000000
- http://ytyaru.hatenablog.com/entry/2019/11/16/000000
- http://ytyaru.hatenablog.com/entry/2019/11/17/000000
手順
SIP をインストールする。
A. pip(失敗)
SIPはC++をPythonで使うライブラリで、PyQt5はSIPを使うらしい。
(Qt) $ pip install SIP Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting SIP Could not find a version that satisfies the requirement SIP (from versions: ) No matching distribution found for SIP
Python 3.7.1でインストールできるSIPはないっぽい……。なお、3.6.7
, 3.5.3
でも同様だった。
B. ソースコードからコンパイル
SIP Downloadからソースコードを入手する。(今回のバージョンはsip-4.19.13.tar.gzだった)
(Qt) $ cd /home/pi/root/lib/sip-4.19.13 (Qt) $ python configure.py (Qt) $ make (Qt) $ sudo make install
各コマンドの結果は以下。
(Qt) $ cd /home/pi/root/lib/sip-4.19.13 (Qt) $ python configure.py This is SIP 4.19.13 for Python 3.7.1 on linux. The SIP code generator will be installed in /home/pi/root/env/py/Qt/bin. The sip.h header file will be installed in /home/pi/root/env/py/Qt/include/python3.7m. The sip module will be installed in /home/pi/root/env/py/Qt/lib/python3.7/site-packages. The sip.pyi stub file will be installed in /home/pi/root/env/py/Qt/lib/python3.7/site-packages. The default directory to install .sip files in is /home/pi/root/env/py/Qt/share/sip. Creating sipconfig.py... Creating top level Makefile... Creating sip code generator Makefile... Creating sip module Makefile...
(Qt) $ make make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/sipgen' に入ります gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o main.o main.c main.c: In function ‘warning’: main.c:525:9: warning: ‘wstr’ may be used uninitialized in this function [-Wmaybe-uninitialized] fprintf(stderr, "%s: %s: ", sipPackage, wstr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o transform.o transform.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o gencode.o gencode.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o extracts.o extracts.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o export.o export.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o type_hints.o type_hints.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o heap.o heap.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o parser.o parser.c gcc -c -pipe -O2 -Wall -W -DNDEBUG -I. -o lexer.o lexer.c g++ -o sip main.o transform.o gencode.o extracts.o export.o type_hints.o heap.o parser.o lexer.o make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/sipgen' から出ます make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/siplib' に入ります gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o siplib.o siplib.c siplib.c: In function ‘wrapInstance’: siplib.c:1693:42: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] return sip_api_convert_from_type((void *)addr, wt->wt_td, NULL); ^ siplib.c: In function ‘parsePass2’: siplib.c:5748:32: warning: ‘owner’ may be used uninitialized in this function [-Wmaybe-uninitialized] *owner = arg; ~~~~~~~^~~~~ siplib.c: In function ‘slot_richcompare’: siplib.c:11355:52: warning: ‘st’ may be used uninitialized in this function [-Wmaybe-uninitialized] if ((f = (PyObject *(*)(PyObject *,PyObject *))findSlot(self, st)) == NULL) ^~~~~~~~~~~~~~~~~~ gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o apiversions.o apiversions.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o descriptors.o descriptors.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o qtlib.o qtlib.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o threads.o threads.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o objmap.o objmap.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o voidptr.o voidptr.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o array.o array.c gcc -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o int_convertors.o int_convertors.c g++ -c -pipe -fPIC -O2 -Wall -W -DNDEBUG -I. -I/home/pi/.pyenv/versions/3.7.1/include/python3.7m -o bool.o bool.cpp g++ -shared -Wl,--version-script=sip.exp -o sip.so siplib.o apiversions.o descriptors.o qtlib.o threads.o objmap.o voidptr.o array.o int_convertors.o bool.o make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/siplib' から出ます
(Qt) $ sudo make install make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/sipgen' に入ります cp -f sip /home/pi/root/env/py/Qt/bin/sip cp -f /home/pi/root/lib/sip-4.19.13/siplib/sip.h /home/pi/root/env/py/Qt/include/python3.7m/sip.h make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/sipgen' から出ます make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/siplib' に入ります cp -f sip.so /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sip.so strip /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sip.so cp -f /home/pi/root/lib/sip-4.19.13/sip.pyi /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sip.pyi make[1]: ディレクトリ '/home/pi/root/lib/sip-4.19.13/siplib' から出ます cp -f sipconfig.py /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sipconfig.py cp -f /home/pi/root/lib/sip-4.19.13/sipdistutils.py /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sipdistutils.py /home/pi/root/env/py/Qt/bin/python /home/pi/root/lib/sip-4.19.13/mk_distinfo.py "" /home/pi/root/env/py/Qt/lib/python3.7/site-packages/sip-4.19.13.dist-info installed.txt
確認
$ pip list Package Version ---------- ------- pip 10.0.1 setuptools 39.0.1 sip 4.19.13
インストールされた。
所感
apt
もpip
も使えないとか……一体何のためにあるんだよ。