2
4

More than 1 year has passed since last update.

【Linux】Python3.10.4 をソースからビルドする方法と、注意点いくつか【Python3.10】

Last updated at Posted at 2022-05-10

Python3.10.4 のソールビルド

Python3.10.4 をソースビルドしてみた!
意外とハマる部分が多かったのでメモしておきます。

ちなみに環境はRockyLinux8です

準備

# dnf -y install make wget libffi-devel zlib-devel readline-devel

↑まっさらな状態からだと他にもいるかも。
都度エラーコード見てインストールしてください。

ちなみにreadline-develが個人的に重要で、
これを先にインストールしてからコンパイルしないと、
対話モードで履歴入力するときにキーボードの矢印キーが使えなくなる。
※下のほうにエラーとして書いたので参考に。

ソースDL

# cd /usr/local/src

# wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz

# tar zxvf Python-3.10.4.tgz

configure ~ make

# cd Python-3.10.4
# ./configure --prefix=/usr --enable-optimizations

# make -O -j2

# make -O -j2 install
  • -j は並列処理コア数指定です 2coreのVMなので2を指定しました

確認

$ python3.10 --version
Python 3.10.4

$ pip3.10 --version
pip 22.0.4 from /usr/lib/python3.10/site-packages/pip (python 3.10)
  • python pipだけで3.10になるようにする(オプション)
$ vi .bashrc

alias python="python3.10"
alias pip="pip3.10"
$ source .bashrc

以下、エラー時のメモ

インストール時のエラー

1. libffi がない → dnf install -y libffi-devel (makeの時)

# make -O -j2
...略...
/usr/local/src/Python-3.10.4/Modules/_ctypes/_ctypes.c:107:10: 致命的エラー: ffi.h: そのようなファイルやディレクトリはありません
...略...

# dnf install libffi-devel

2. zlib がない → dnf install -y zlib-devel (make installの時)

# make install -O -j2
...略...
zipimport.ZipImportError: can't decompress data; zlib not available
...略...

# dnf install -y zlib-devel

インストール後のエラー

1. pip3.10が動かない

$ pip3.10
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Traceback (most recent call last):
  File "/usr/lib/python3.10/subprocess.py", line 69, in <module>
    import msvcrt
ModuleNotFoundError: No module named 'msvcrt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/pip3.10", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/lib/python3.10/site-packages/pip/_internal/cli/main.py", line 9, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py", line 10, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/python3.10/site-packages/pip/_internal/cli/main_parser.py", line 8, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/python3.10/site-packages/pip/_internal/cli/cmdoptions.py", line 21, in <module>
    from pip._vendor.packaging.utils import canonicalize_name
  File "/usr/lib/python3.10/site-packages/pip/_vendor/packaging/utils.py", line 8, in <module>
    from .tags import Tag, parse_tag
  File "/usr/lib/python3.10/site-packages/pip/_vendor/packaging/tags.py", line 6, in <module>
    import platform
  File "/usr/lib/python3.10/platform.py", line 119, in <module>
    import subprocess
  File "/usr/lib/python3.10/subprocess.py", line 74, in <module>
    import _posixsubprocess
ModuleNotFoundError: No module named '_posixsubprocess'

msvcrt と _posixsubprocess というモジュールが無いみたい

ひとまずエラー文ModuleNotFoundError: No module named 'msvcrt'でググってみる

ここの記事

  • msvcrt は Window用のモジュールで、Linuxには存在しないので、コンパイルが間違っているみたい?との内容
  • また、アンサーにインストール先のlib64にある/lib-dynloadlibにも作成(シンボリックリンクを作成)
    • →これを試してみる

今回prefixを/usrに指定したので、/usr/lib64/python3.10/にlib-dynloadがあった
lib-dynloadの中を覗いてみると_posixsubprocessっぽいのが入ってた

# ls | grep posixsub
_posixsubprocess.cpython-310-x86_64-linux-gnu.so

ということでシンボリックリンクを作成してみる

# ln -s /usr/lib64/python3.10/lib-dynload /usr/lib/python3.10/lib-dynload

→治ったw

$ pip3.10 --version
pip 22.0.4 from /usr/lib/python3.10/site-packages/pip (python 3.10)

msvcrtは無くてもOK...?

2. 対話モードで矢印キーが使えない

対話モードでキーボードの↑ボタンを押すと^[[Aと入力されてしまい、履歴入力できない

$ python
Python 3.10.4 (main, May 10 2022, 22:26:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = hoge
>>> ^[[A^[[A (←矢印キーの↑を押すとこうなる)

これはreadlineという機能で動いているみたいなので、インストールが必要
ただ、pip install readline で解決するみたいな記事を見かけたけど、
自分の場合インストールしたらバグってPythonが起動しなくなってしまった。

ここをみたら、readline-develをLinuxにインストールした状態でコンパイルしたら回避できるらしい

  • 再コンパイル
# dnf -y install readline-devel

# cd /usr/local/src
# cd Python-3.10.4
# ./configure --prefix=/usr --enable-optimizations
# make -O -j2
# make install -O -j2
  • 確認

→矢印キーが使えるようになってる!

2
4
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
4