2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プロジェクト向けのPython環境整備

Last updated at Posted at 2020-11-10

経験として、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/
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?