Raspberry Pi에 Python3.6을 설치하려고했습니다.

소개



현재 (2019/06) http://ftp.jaist.ac.jp/raspbian/ , http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ 등에 있는 미러 서버에는 최신 Python 패키지는 3.5까지이며 3.6 이후는 각자 다운로드하고 설치해야 한다. 여기에서는 Raspberry Pi 환경내에서 Python3.6을 install 방법에 대해 정리해 본다.

방법



⑴ package download & install



Raspberry Pi에 Python 3.7.0 설치
의 사이트가 참고가 됩니다.
## download
$ wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

## unzip
$ tar -xf Python-3.6.8.tar.xz
$ cd Python-3.6.8

## install
$ ./configure
$ sudo make
$ sudo make altinstall

## symbolic
$ ln -s /usr/local/bin/python3.6 /usr/local/bin/python3


이제 파이썬을 시작할 수 있습니다.
하지만 numpy나 beautufulsoup등을 pip로 패키지를 install을 하려고 하면 error가 됩니다.
## launch
$ python3
Python 3.6.8 (default, Jun 17 2019, 16:55:54) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

### pip -> error
$ sudo pip3 install numpy
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

실은 파이썬으로 make하고 있을 때 아래의 error가 나왔습니다.
building '_ssl' extension
*** WARNING: renaming "_ssl" since importing it failed: build/lib.linux-armv7l-3.6/_ssl.cpython-36m-arm-linux-gnueabihf.so: undefined symbol: SSL_get0_alpn_selected


ssl 모듈이 필요합니다.

⑵ openSSL install


apt-get (or yum) install openssl-devel 등으로 package를 install해 해결하면 문제 없습니다만, 라즈파이의 경우는 그렇지 않았으므로 아래의 순서를 밟을 필요가 있습니다.

1.openssl download & install
2. python3.6 패키지에있는 Modules/Setup.dist를 열고 openssl 관련 파일 경로를 작성하십시오.
3. 다시 python3.6을 make install한다

⑵.1 openssl download & install


Version 1.1.1 will be supported until 2023-09-11 (LTS).
Version 1.1.0 will be supported until 2019-09-11.
Version 1.0.2 will be supported until 2019-12-31 (LTS).
Version 1.0.1 is no longer supported.
Version 1.0.0 is no longer supported.
Version 0.9.8 is no longer supported.

openssl 의 공식 사이트를 보면 openssl1.0.2 이상이 아니라고 지원되지 않고, 만약 python3.7을 install하는 경우는 openssl1.0.2 이상이 아니면 대응하고 있지 않다고 합니다. 그래서 openssl1.1.1을 install하기로 결정합니다.
$ wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
$ tar -xf openssl-1.1.1.tar.gz
$ cd openssl-1.1.1
$ sudo ./config --prefix=/usr/src/openssl-1.1.1 shared zlib
$ sudo make depend
$ sudo make
$ sudo make test
$ sudo make install

⑵.2 Modules/Setup.dist 편집



209-212 행의 주석 처리를 제거하고 SSL 경로를 지정합니다. default에서는 SSL=/usr/local/ssl 입니다만, 방금 다운로드한 openssl의 폴더처를 지정합니다.

Modules/Setup.dist
SSL=/usr/src/openssl-1.1.1
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

⑵.3 다시 python3.6을 make install한다


./configure && make && sudo make install 하면 완료입니다.

결론



그런데 python3.7.3을 raspberry pi에 설치하려고 시도했지만 python 본문은 부팅 할 수 있지만 pip install에서 undefined symbol: SSL_CTX_get0_param와 오류가 발생합니다. 그래서 잠시 파이썬 3.6에서 라즈파이 개발을 진행할 것이라고 생각합니다. 3.5 -> 3.6 으로 한 메리트로서는 async 비동기 기능이 있는 것이 큰 것입니까.

나중에 여담으로 파이썬 설치시에 ./configure --enable-optimizations 그러면 성능이 약 10% 오르는 것 같습니다.

Reference


  • Raspberry Pi에 Python 3.7.0 설치
  • 【Python2to3 업데이트 방법】Python3 계 설치
  • CentOS7에 OpenSSL1.1.1 설치
  • 파이썬 설치시 최적화
  • 좋은 웹페이지 즐겨찾기