現在の安定版リリースバージョンである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)。
依存関係は、結果のインストールのどの機能/モジュールにマップされますか?プロジェクト名、パッケージ名、およびビルドに使用されるモジュール間で名前が類似または同一であるため、これは明らかな場合がありますが、そうでない場合もあります。
そのような情報があれば、これを読んでいる人は誰でも、何をインストールしているのか、またその理由を理解することができます。彼らのプロジェクトがどの依存関係を必要とするかを決定するタスクは、うまくいけばかなり簡単になります。
$ Sudo apt install git
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
$ git clone [email protected]:python/cpython.git
Cloning into 'cpython'...
[...]
Resolving deltas: 100% (592215/592215), done.
$ cd cpython/
cpython$ git checkout v3.7.2
Note: checking out 'v3.7.2'.
[...]
HEAD is now at 9a3ffc0492... 3.7.2final
cpython$
$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
スクリプトは、多くのことをチェックしますが、その多くは不要です。ただし、上記の出力に示されているものは、必要と考えることができます。
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
モジュール。
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
[...]
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()
$