さくらインターネットはPython2.7.6が標準でPython3.0はインストールされていない。しかし、2020/01にPython 2系統のサポートが終了したため、利便性の高い外部モジュールの更新が難しくなった。また最近はPython3によるアプリが多いことから、さくらインターネットにPython3の環境を構築することにした。
Python2.7については、2015年に外部モジュールを~/.localの下にインストールする環境を作り各種のプログラムを作成してきた。ひさしぶりにネットを検索すると、5年前に比べ、さくらインターネットにPythonをインストール記事もずいぶん多くなっている。その中でもっともわかりやすい下記の記事を参考にさせていただき、自分のローカルフォルダー<~/local/pythonのDirectory内>にPython3をインストールすることにした。
参考URL:https://ricom-techno.com/65/
<インストール手順>
■Pythonのアーカイブファイルをダウンロード
・テンポラリな作業ディレクトリworkspaceを作成
・そのディレクトリにPythonのアーカイブ圧縮ファイルをダウンロードし展開する
% mkdir -p ~/workspace/
% cd ~/workspace/
% wget –no-check-certificate https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
% tar -zxvf ./Python-3.6.5.tgz
Pythonのアーカイブファイルはこちらを参照
https://www.python.org/ftp/python/
■Python3.6.5をインストール
作業ディレクトリに展開されたPython-3.6.5ディレクトリに入り、.configure —> make —> make installの順でインストールする。
①% cd ./Python-3.6.5
②.configure命令でmake fileを作成する。
% ./configure CPPFLAGS=”-I/usr/local/ssl/include” LDFLAGS=”-L/usr/local/ssl/lib” –prefix=$HOME/local/python –with-ensurepip
### .configureのオプションについて
##1 CPPFLAGS、LDFLAGS
オプションでOpenSSL関連ファイルの場所を指定してコンパイル。
この指定がないと古いOpenSSLを参照してしまい、pipインストールができなくなる。
さくらインターネットの最新opensslのdirectoryとVersionは下記の通り。
OpenSSL 1.0.2o 27 Mar 2018 from /usr/bin/openssl
一方、Python2.7.6のopensslのVersionは、OpenSSK0.9.8zf 19 mar 2015で旧い。
そこで、最新版opensslを使うように、CPPFLAGSとLDFLAGSのPathを指定する。
/usr/bin/opensslを調べると、下記のDirectoryにssymbolic linkされている。
lrwxr-xr-x 1 root wheel 26 Feb 24 2016 openssl -> /usr/local/ssl/bin/openssl
また、usr/local/sslはさらに下記のDirectoryにssymbolic linkされている。
lrwxr-xr-x 1 root wheel 12 Feb 24 2016 ssl -> /home/rs/ssl
それで、CPPFLAGSとLDFLAGSのPathを、CPPFLAGS=”-I/usr/local/ssl/include” LDFLAGS=”-L/usr/local/ssl/lib”と指定する。
LDFLAGS:linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir>
CPPFLAGS:(Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir>
##2 –prefix=$HOME/local/python
python3の本体…bin, lib, inculde, shareプログラムのインストール先の指定
この場合、 /home/miyasan/local/pythonの下に上記のDirectoryが作られインストールされる。
##3 –with-ensurepip
pipも同時にインストールされるように、–with-ensurepip オプションを指定しておく。
③% make
④% make install
■$HOME/local/pythonにインストールしたので、.cshrcを編集してパスを通す
% vi ~/.cshrc ファイル属性644
以下を追加
#2020-04-08 for python3.6
set path = ($path $HOME/local/python/bin)
注)path設定についての注意
ネット検索するとpath指定と一緒にsetenv指定をするように書かれているが、Python2.7のsite-packageが~/.local/libの下に作られているので、pip命令(Python2.7)がきかなくなってしまう。そこで、下記の命令はコメントアウトした。
# setenv PYTHON $HOME/local/python/lib
# setenv PYTHONPATH $HOME/local/python/lib/python3.6/site-packages
# setenv LD_LIBRARY_PATH $HOME/local/python/lib
■変更した設定を反映
% source ~/.cshrc
% rehash
■環境変数PATHの設定が反映されたことと、バージョンを確認
install後確認画面:
% python
Python 2.7.6 (default, May 21 2014, 16:52:04)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import sys
>>> sys.path
[”, ‘/home/miyasan/.local/lib/python2.7/site-packages/setuptools-26.1.1-py2.7.egg’, ‘/usr/local/lib/python27.zip’, ‘/usr/local/lib/python2.7’, ‘/usr/local/lib/python2.7/plat-freebsd9’, ‘/usr/local/lib/python2.7/lib-tk’, ‘/usr/local/lib/python2.7/lib-old’, ‘/usr/local/lib/python2.7/lib-dynload’, ‘/home/miyasan/.local/lib/python2.7/site-packages’, ‘/usr/local/lib/python2.7/site-packages’]
>>>
% python3
Python 3.6.5 (default, Apr 9 2020, 22:09:43)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import sys
>>> sys.path
[”, ‘/home/miyasan/local/python/lib/python36.zip’, ‘/home/miyasan/local/python/lib/python3.6’, ‘/home/miyasan/local/python/lib/python3.6/lib-dynload’, ‘/home/miyasan/local/python/lib/python3.6/site-packages’]
>>>
■pipもアップブレード
最初にPython3.7のインストールを試みた時は、pip —> python2.7、 pip3 —>python3.xをポイントしていたが、Pythonのインストールをやり直すうちに、なぜかpipもpip3もPython2.7のpipをポイントするようになってしまった。その代わりに、pip3.6はPython3.6にバンドルされたpipだったので、
% pip3.6 install –upgrade pip とコマンドして、最新バージョンに更新した。
% pip -V
pip 9.0.1 from /home/miyasan/.local/lib/python2.7/site-packages (python 2.7)
% pip3 -V
pip 9.0.1 from /home/miyasan/.local/lib/python2.7/site-packages (python 2.7)
% pip3.6 -V
pip 20.0.2 from /home/miyasan/local/python/lib/python3.6/site-packages/pip (python 3.6)
同様の問題はネットにも出ており、Pythonの公式サイトを見ると下記のように書かれているので、この仕様にしたがってpipを使う必要がある。
… インストールされた複数のバージョンの Python を平行して使うには?
Linux や Mac OS X その他の POSIX システムでは、バージョン番号付きの Python コマンドと -m スイッチを組み合わせて用いて、
適切なバージョンの pip を実行してください。
python2 -m pip install SomePackage # default Python 2
python2.7 -m pip install SomePackage # specifically Python 2.7
python3 -m pip install SomePackage # default Python 3
python3.4 -m pip install SomePackage # specifically Python 3.4
<インストール時の留意点>
■インストール時に遭遇した問題
~さくらインターネットにPython3をインストールする際の注意点
①Python3.7では_ctypeエラーが発生し、うまくインストールできず、結局Python3.6.5をインストールした。
”_ctypeエラー”についてネット検索すると、PythonのctypesはCで書かれたライブラリをPythonから利用するためのモジュールであり、libffiに依存している。ソースからPythonをビルドする際、libfflが見つからない場合はctypesのビルドはスキップされるので、libffi をインストールすると良いとのこと。
<https://katsuwosashimi.com/archives/371/python-pip-uwsgi-ctypes-not-found/>
公式ドキュメント(docs.python.org)にも書かれている。
Build Changes¶
A full copy of libffi is no longer bundled for use when building the ctypes module on non-OSX UNIX platforms. An installed copy of libffi is now required when building ctypes on such platforms. (Contributed by Zachary Ware in bpo-27979.)
さらにPython3.7からは OpenSSLのバージョンが古いとインストールはダメそう。
The ssl module requires OpenSSL 1.0.2 or 1.1 compatible libssl.
OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is no longer supported.
LibreSSL is temporarily not supported as well.
LibreSSL releases up to version 2.6.4 are missing required OpenSSL 1.0.2 APIs.
どうもSecurityの関係から、Python3.7以降はこれまでのモジュールが使えなくなっている感じ。仕方ないのでPython3.6を入れた。
②Python3.6にはpipモジュールがバンドルされているが、複数のPythonバージョンが存在する場合、pipのバージョンごとに使い分けること。
% python3 -m pip -V
pip 20.0.2 from /home/miyasan/local/python/lib/python3.6/site-packages/pip (python 3.6)
% python -m pip -V
pip 9.0.1 from /home/miyasan/.local/lib/python2.7/site-packages (python 2.7)
③インストールしたいモジュールにおいては、最新版がインストールできないことがある。例)pandas, matplotlib
この場合は、バージョンを下げて(おそらくPython本体のバージョンがリリースされた時期以前のバージョンを)インストールする。
python3 -m pip <package_name>==version#
pandasとmatplotlibは最新版はNGだったので、Python3.6.5 がリリースされたの頃のバージョンのインストールを試みたところ、pandas、matplotlibともに長いコンパイル時間を経てインストールできた。(ちなみにコンパイル時のテンポラリファイルは /var/tmp内に作成される)
% pip3 install pandas==0.23.4
Collecting pandas==0.23.4
Downloading pandas-0.23.4.tar.gz (10.5 MB)
|################################| 10.5 MB 12.7 MB/s
Requirement already satisfied: python-dateutil>=2.5.0 in ./local/python/lib/python3.6/site-packages (from pandas==0.23.4) (2.8.1)
Requirement already satisfied: pytz>=2011k in ./local/python/lib/python3.6/site-packages (from pandas==0.23.4) (2019.3)
Requirement already satisfied: numpy>=1.9.0 in ./local/python/lib/python3.6/site-packages (from pandas==0.23.4) (1.18.2)
Requirement already satisfied: six>=1.5 in ./local/python/lib/python3.6/site-packages (from python-dateutil>=2.5.0->pandas==0.23.4) (1.14.0)
Installing collected packages: pandas
………………………………..
Running setup.py install for pandas … done
Successfully installed pandas-0.23.4
% pip3 install matplotlib==2.0
Collecting matplotlib==2.0
Downloading matplotlib-2.0.0.tar.gz (53.2 MB)
|################################| 53.2 MB 15.6 MB/s
Requirement already satisfied: numpy>=1.7.1 in ./local/python/lib/python3.6/site-packages (from matplotlib==2.0) (1.18.2)
…………………
Running setup.py install for matplotlib … done
Successfully installed matplotlib-2.0.0
2015年にレンタルしたサーバーと、最近のサーバーのbinファイルのVersionが違うのかよくわからないが、ネットの検索情報だけではインストールはすべて順調にはいかなかった。
pipのポイントパスが気になるが仕様上は問題ないので、とりあえず構築された環境でPython3のスクリプトを走らせると、無事動作することが確認できた。
備忘録として、インストールの顛末詳細メモを下記ファイルに添付しておく。
さくらインターネット Python3.6 インストール記録 2020-03-29
コメント