19 votes

Comment construire et installer Python 3.7.x à partir des sources sur Debian 9.8

J'ai une nouvelle installation de Debian 9.8, la version stable actuelle.

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

Ce système comprend Python 3.5.3 :

$ python3 --version
Python 3.5.3

Malheureusement, cette version ne répond pas à mes besoins. Je veux une version plus récente de Python. Au moment où j'écris ces lignes, la version actuelle est la 3.7.2.

Nous espérons que cela sera utile pour toute une série de versions, mais dans l'intérêt de limiter le champ d'application à quelque chose de très précis, cette question concerne la combinaison ci-dessus de systèmes d'exploitation et de versions de Python.

Pour préciser davantage : Je veux construire à partir du dépôt de sources git de Python, en utilisant la configuration par défaut : nous allons exécuter ./configure sans aucun argument, sauf peut-être --prefix pour choisir un emplacement d'installation personnalisé. Je veux que toutes les dépendances nécessaires proviennent des sources standard de Debian apt, si possible.

Enfin, et c'est le plus important : Pour tout logiciel supplémentaire que nous installons en tant que prérequis, donnez quelques informations à son sujet. Ne vous contentez pas de dire "installez cette liste incompréhensible de paquets apt".

Pour toute dépendance disponible dans les dép�ts stretch de Debian, je veux les informations suivantes :

  • Indique si la dépendance peut être considérée comme facultative ou si elle doit être traitée comme obligatoire afin de mener à bien les étapes de construction/installation de Python.

  • Un lien vers la page d'accueil du projet (ou la meilleure chose suivante s'il n'y a pas de page d'accueil appropriée, par exemple une url de dépôt) d'où provient le paquet apt.

  • À quelle fonctionnalité/module de l'installation résultante la dépendance correspond-elle ? Parfois, cela sera évident car les noms seront similaires ou identiques entre le nom du projet, le nom du paquet et le module utilisé pour construire, mais parfois, ce ne sera pas le cas.

Avec ce genre d'informations, toute personne lisant ce document pourra comprendre ce qu'elle installe et pourquoi. La tâche de déterminer les dépendances dont leur projet aura besoin sera, nous l'espérons, considérablement facilitée.

38voto

Charlie Points 651

Installer git

$ sudo apt install git

Installer les dépendances de construction de Python

Python comprend un ensemble de modules qu'il construit en établissant des liens avec d'autres projets open source populaires. Beaucoup de ces projets sont inclus par défaut dans Debian en tant que programmes exécutables, mais les fichiers de développement (en-têtes, bibliothèques) nécessaires pour les lier à Python sont empaquetés séparément et ne sont pas inclus dans une installation Debian par défaut.

Certaines de ces bibliothèques sont en fait nécessaires pour que les étapes de construction/installation de Python se déroulent correctement :

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

Les entrées de la colonne "Dev Package" sont les noms des paquets contenant les fichiers de développement dont notre compilation Python a besoin.

Chacun de ces paquets 'dev' a un paquet binaire correspondant qui est probablement déjà installé. Il est donc peu probable que vous ajoutiez de nouveaux logiciels à votre système en les installant. Vous installez simplement les fichiers nécessaires à la compilation de nouveaux logiciels (dans notre cas, un Python plus récent) afin qu'ils puissent les utiliser. (Notez également que ces paquets "dev" ont tous leurs paquets binaires correspondants en tant que dépendances. dépendants, de sorte que l'installation d'un paquet "dev" garantit que son paquet binaire est également installé).

Alors, installons-les :

sudo apt install zlib1g-dev libffi-dev

Ensuite, nous avons la bibliothèque OpenSSL. Python considère OpenSSL comme facultative, mais vous la voulez probablement. Par exemple, même en utilisant l'installation du paquetage de Python peuvent rencontrer des problèmes lorsqu'ils vont chercher https urls si le support SSL/TLS est absent.

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

Installons-le :

sudo apt install libssl-dev

La série de paquets suivante relève davantage de la catégorie "facultative" :

| 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 peut compiler et installer sans ces éléments, et vos applications n'en ont peut-être pas besoin. D'un autre côté, si vous les installez, l'étape 'make' ne devrait pas signaler les modules qu'elle n'a pas pu construire, et les binaires sont déjà inclus dans une installation Debian par défaut.

La commande à copier-coller si vous souhaitez installer tous les paquets "optionnels" ci-dessus est la suivante :

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

Construire et installer Python à partir des sources

  1. clonez le dépôt git de Python.

    $ git clone git@github.com:python/cpython.git Cloning into 'cpython'... [...] Resolving deltas: 100% (592215/592215), done.

  2. Vérifiez la version que vous voulez installer (dans ce cas, 3.7.2) en utilisant le nom du tag git.

    $ cd cpython/ cpython$ git checkout v3.7.2 Note: checking out 'v3.7.2'. [...] HEAD is now at 9a3ffc0492... 3.7.2final cpython$

  3. Choisissez un préfixe d'installation. C'est-à-dire, le chemin dans lequel le projet compilé et lié sera installé. Dans ce cas, je vais utiliser $HOME/python/v3.7.2 . J'inclus le numéro de version car je voudrais installer d'autres versions dans le futur, et les garder séparées. Exécutez le configure script avec ce chemin comme le --prefix argument. (Si vous ne fournissez pas d'argument --prefix, il prendra par défaut la valeur de /usr/local ).

    cpython$ ./configure --prefix=$HOME/python/v3.7.2 [...] checking for inflateCopy in -lz... yes [...] checking for openssl/ssl.h in /usr... yes [...]

El configure script va vérifier un tas de choses, dont beaucoup sont inutiles. Ceux qui sont montrés dans la sortie ci-dessus, cependant, peuvent être considérés comme nécessaires.

  1. Construisez Python en exécutant make . Si nous avons inclus l'ensemble minimal de dépendances nécessaires à la construction et à l'installation de Python, la sortie vous indiquera vers la fin quels modules n'ont pas été construits :

    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.

El make décrit cela comme une liste de modules "optionnels" mais, une fois encore, du moins pour cette version particulière de Python, il ne pourra probablement pas être construit et installé avec succès sans le module zlib y _ctypes módulos.

  1. Installez Python en exécutant make install . Nous avons déjà fourni l'emplacement de l'installation dans le fichier configure étape. Si votre emplacement d'installation est un répertoire appartenant à la racine (par ex. /usr/local ), préfixez cette commande par sudo . Comme dans ce cas, j'installe dans un répertoire appartenant à un utilisateur, je ne veux pas faire cela.

    cpython$ make install Creating directory /home/python/v3.7.2/bin Creating directory /home/python/v3.7.2/lib [...]

  2. Vous devriez maintenant avoir un exécutable que vous pouvez lancer à partir de l'interface de l'entreprise. bin sous le préfixe d'installation nommé python3 . (Notez que cet installateur ne met rien à l'emplacement bin/python ; juste 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() $

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X