経験として、CentOSでPythonの環境整備の過程を記録する。
Python 本体
安定の上、できるだけ新しいバージョンアップを用いる。
現時点ではPython 3.9が出たが,3.8.6の方がもっと安定と思うので、それを使う。
Linux自身が管理するパッケージはバージョン低いので、またCondaとやらが面倒臭いと思い、ソースコードよりコンパイルする方法を用いる。
まず開発用の諸々のツールをインストールする。それを略すると、Pythonとpipに不具合が出る可能性がある。
# CentOS
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel libsqlite3-dev
# Debian
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget libsqlite3-dev libbz2-dev llvm xz-utils tk-dev
次は、Pythonのソースコードを入手せよ。Pythonのサイトで探し、tgzをダウンロードする。
そして、rootとして実行する。
tar -zxvf Python-3.8.6.tgz
cd Python-3.8.6
./configure prefix=/usr/local/python3 --enable-loadable-sqlite-extensions
make && make install
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3.8
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3.8
最後に/usr/bin/python3
や/usr/bin/pip3
がさきのリンクファイルにリンクする。すでに古いバージョンがあれば、削除して作り直すしかない。
プロジェクトの独自の運行環境
Python 3.8.6 のような最近のバージョンはvenvという部品があり、それは十分と思う。
/usr/bin/python3 -m venv venv
運行は以下のように。
source venv/bin/activate || exit 1
python3 [PATH_OF.PY]
deactivate
依頼されたパッケージについて
第三者のパッケージを使うプロジェクトには requirements.txt が必要である。
source venv/bin/activate || exit 1
# ミラーを使う場合はそれを付き添い: -i "mirror_url"
pip3 install -r requirements.txt || exit 2
deactivate
常に出る問題
Debianにそう行うと、次のエラーが出るのが多い。
$ python3 -m venv venv
Error: Command '['/var/code/python-project/venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 2.
そこの /var/code/python-project/venv/bin/python3 -Im ensurepip --upgrade --default-pip
を実行してみると、subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.
が最後の一行として見える。
潜んでみろう。
$ lsb_release -a
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 25, in <module>
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'
ほかの資料によると、lsb_release はDebianが持ってきたpythonのmoduleで、後でインテトールしたpythonのmoduleにはない。なので sudo find / -name lsb_release.py
を用いて、システムについてきたやつを探してみる。やはり、/usr/lib/python3/dist-packages/lsb_release.py
が見つかった。コピーせよ。
sudo cp /usr/lib/python3/dist-packages/lsb_release.py /usr/local/python3/lib/python3.8/