web-dev-qa-db-ja.com

Debian 9.8のソースからPython 3.7.xをビルドしてインストールする方法

現在の安定版リリースバージョンであるDebian 9.8の新規インストールがあります。

$ lsb_release --description
Description:    Debian GNU/Linux 9.8 (stretch)

このシステムには、Python 3.5.3:

$ python3 --version
Python 3.5.3

残念ながら、そのバージョンは私のニーズを満たしていません。 Pythonの最新バージョンが欲しい。執筆時点では、現在のバージョンは3.7.2です。

うまくいけば、これはさまざまなバージョンで役立ちますが、範囲を非常に正確なものに制限するために、この質問はOSとpythonバージョンの組み合わせについてです。

さらに指定するには:python git sourceレポジトリから、デフォルトの構成を使用してビルドします:./configure以外の引数なしで--prefixを実行しますカスタムインストール場所。可能であれば、必要な依存関係を標準のDebian aptソースから取得します。

最後にそして最も重要なこと:前提条件としてインストールする追加のソフトウェアについては、それに関する情報を提供します。 「aptパッケージのこの不可解なリストをインストールしてください」とだけ言ってはいけません。

Debianのストレッチリポジトリから利用できる依存関係については、次の情報が必要です。

  • 依存関係をオプションと見なすことができるか、またはPythonのビルド/インストール手順を正常に完了するために必要に応じて処理する必要があるかどうか。

  • Aptパッケージの元となったプロジェクトのホームページへのリンク(または適切なホームページがない場合は、次に良いもの、たとえばリポジトリのURL)。

  • 依存関係は、結果のインストールのどの機能/モジュールにマップされますか?プロジェクト名、パッケージ名、およびビルドに使用されるモジュール間で名前が類似または同一であるため、これは明らかな場合がありますが、そうでない場合もあります。

そのような情報があれば、これを読んでいる人は誰でも、何をインストールしているのか、またその理由を理解することができます。彼らのプロジェクトがどの依存関係を必要とするかを決定するタスクは、うまくいけばかなり簡単になります。

14
Charlie

Gitをインストールする

$ Sudo apt install git

インストールPythonビルドの依存関係

Pythonには、他の一般的なオープンソースプロジェクトにリンクすることによってビルドする一連のモジュールが含まれています。これらのプロジェクトの多くは、デフォルトで実行可能プログラムとしてDebianに含まれていますが、それらをPythonにリンクするために必要な開発ファイル(ヘッダー、ライブラリ)は個別にパッケージ化されており、デフォルトのDebianインストールには含まれていません。

これらのライブラリの一部は、pythonビルド/インストール手順が正常に完了するために実際に必要です。

| Library                            | Python Module | Dev Package  |
| ---------------------------------- | ------------- | ------------ |
| https://www.zlib.net/              | `zlib`        | `zlib1g-dev` |
| https://www.sourceware.org/libffi/ | `_ctypes`     | `libffi-dev` |

「開発パッケージ」列のエントリは、pythonビルドに必要な開発ファイルを含むパッケージの名前です。

これらの「dev」パッケージにはそれぞれ、おそらくすでにインストールされている対応するバイナリパッケージがあります。したがって、これらのソフトウェアをインストールしてシステムに新しいソフトウェアを追加することはおそらくないでしょう。新しいソフトウェア(この場合は新しいpython)をコンパイルして、それらを使用できるようにするために必要なファイルをインストールするだけです。 (また、これらの「dev」パッケージはすべて、対応するバイナリパッケージが依存関係にあるため、devパッケージをインストールすると、そのバイナリパッケージも確実にインストールされます。

それらをインストールしましょう:

Sudo apt install zlib1g-dev libffi-dev

次に、OpenSSLライブラリがあります。 PythonはOpenSSLをオプションであると見なしますが、おそらくそれが必要です。たとえば、SSL/TLSサポートがない場合、Pythonのパッケージインストールツールを使用していても、https URLをフェッチするときに問題が発生する可能性があります。

| Library                  | Python Module | Dev Package |
| ------------------------ | ------------- | ----------- |
| https://www.openssl.org/ | `_ssl`        | `libssl-dev |

インストールしましょう:

Sudo apt install libssl-dev

次のパッケージセットは、「オプション」カテゴリに分類されます。

| Library                                              | Python Module(s)              | Dev Package        |
| ---------------------------------------------------- | ----------------------------- | ------------------ |
| http://www.bzip.org/                                 | `_bz2`                        | `libbz2-dev`       |
| https://www.gnu.org/software/ncurses/                | `_curses` and `_curses_panel` | `libncursesw5-dev` |
| https://www.gnu.org.ua/software/gdbm/                | `_dbm` and `_gdbm`            | `libgdbm-dev`      |
| https://tukaani.org/xz/                              | `_lzma`                       | `liblzma-dev`      |
| https://www.sqlite.org/                              | `_sqlite3`                    | `libsqlite3-dev`   |
| https://www.tcl.tk/software/tcltk/                   | `_tkinter`                    | `tk-dev`           |
| https://github.com/karelzak/util-linux               | `_uuid`                       | `uuid-dev`         |
| https://tiswww.case.edu/php/chet/readline/rltop.html | `readline`                    | `libreadline-dev`  |

Pythonはこれらがなくてもビルドおよびインストールできますが、アプリケーションでそれらが必要ない場合もあります。一方、それらをインストールする場合、「make」ステップでは、ビルドできなかったモジュールは報告されず、バイナリーはデフォルトのDebianインストールにすでに含まれています。

上記の「オプション」パッケージをすべてインストールしてインストールする場合は、コピーして貼り付けるコマンドは次のとおりです。

Sudo apt install libbz2-dev libncursesw5-dev libgdbm-dev liblzma-dev libsqlite3-dev tk-dev uuid-dev libreadline-dev

ビルドしてインストールpythonソースから

  1. python gitリポジトリのクローンを作成します。
$ git clone [email protected]:python/cpython.git
Cloning into 'cpython'...
[...]
Resolving deltas: 100% (592215/592215), done.
  1. Gitタグ名を使用して、インストールするバージョン(この場合は3.7.2)をチェックアウトします。
$ cd cpython/
cpython$ git checkout v3.7.2
Note: checking out 'v3.7.2'.
[...]
HEAD is now at 9a3ffc0492... 3.7.2final
cpython$
  1. インストール接頭辞を選択します。つまり、コンパイルおよびリンクされたプロジェクトがインストールされるパスです。この場合、$HOME/python/v3.7.2を使用します。将来、他のバージョンをインストールし、それらを個別に保持するため、バージョン番号を含めています。このパスを--prefix引数として使用してconfigureスクリプトを実行します。 (--prefix引数を指定しない場合、デフォルトで/usr/localになります)。
cpython$ ./configure --prefix=$HOME/python/v3.7.2
[...]
checking for inflateCopy in -lz... yes
[...]
checking for openssl/ssl.h in /usr... yes
[...]

configureスクリプトは、多くのことをチェックしますが、その多くは不要です。ただし、上記の出力に示されているものは、必要と考えることができます。

  1. ビルドpythonを実行してmakeを実行します。Pythonをビルドしてインストールするために必要な依存関係の最小セットが含まれている場合、出力により、ビルドされなかったモジュールの終わり近くがわかります。
cpython$ make
[...]
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel      
_dbm                  _gdbm                 _lzma              
_sqlite3              _tkinter              _uuid              
readline                                                       
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

makeの出力は、これを「オプション」モジュールのリストとして説明しますが、少なくとも、この特定のバージョンのpythonの場合、zlib_ctypesモジュール。

  1. インストールpythonを実行してmake installを実行します。インストール場所はconfigureステップですでに提供されています。インストール場所がルート所有ディレクトリの場合(例: /usr/local)、このコマンドの前にSudoを付けます。この場合、ユーザーが所有するディレクトリにインストールしているので、それを行いません。
cpython$ make install
Creating directory /home/python/v3.7.2/bin
Creating directory /home/python/v3.7.2/lib
[...]

  1. これで、python3という名前のインストールプレフィックスの下のbinディレクトリから実行できる実行可能ファイルができました。 (このインストーラーはbin/pythonには何も配置しないことに注意してください。bin/python3のみです。)
$ $HOME/python/v3.7.2/bin/python3
Python 3.7.2 (v3.7.2:9a3ffc0492, Mar 10 2019, 19:35:56) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
$
23
Charlie