2. Utilisation de Python sur les plateformes Unix
*************************************************


2.1. Récupérer et installer la dernière version de Python
=========================================================


2.1.1. Sur Linux
----------------

Python est pré-installé sur la plupart des distributions Linux, et est
disponible en paquet sur toutes les autres. Cependant, il y a
certaines fonctionnalités que vous voudrez utiliser qui ne seront pas
disponibles sur le paquet de votre distribution. Vous pouvez
facilement compiler la dernière version de Python depuis les sources.

Dans le cas où Python n'est pas pré-installé et n'est pas dans les
dépôts non plus, vous pouvez facilement faire les paquets pour votre
propre distribution. Jetez un œil à ces liens :

Voir aussi:

  https://www.debian.org/doc/manuals/maint-guide/first.fr.html
     pour les utilisateurs de Debian

  https://en.opensuse.org/Portal:Packaging
     pour les utilisateurs d'OpenSuse

  https://docs.fedoraproject.org/en-US/package-
  maintainers/Packaging_Tutorial_GNU_Hello/
     pour les utilisateurs de Fedora

  https://slackbook.org/html/package-management-making-packages.html
     pour les utilisateurs de Slackware


2.1.2. Sur FreeBSD et OpenBSD
-----------------------------

* Utilisateurs de FreeBSD, pour installer le paquet, utilisez :

     pkg install python3

* Utilisateurs d'OpenBSD, pour installer le paquet, utilisez :

     pkg_add -r python

     pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz

  Par exemple les utilisateurs d'"i386" récupèrent la version 2.5.1 de
  Python en faisant :

     pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz


2.2. Compiler Python
====================

Si vous voulez compiler CPython vous-même, la première chose à faire
est de récupérer le code source. Vous pouvez télécharger la dernière
version ou faire un clone. (Si vous voulez contribuer à des
correctifs, il vous faut un clone.)

La compilation s'effectue avec les commandes habituelles :

   ./configure
   make
   make install

Les options de configuration et mises en garde pour certaines
plateformes Unix spécifiques sont largement documentées dans le
fichier README.rst à la racine du dossier des sources Python.

Avertissement:

  "make install" peut écraser ou cacher le binaire "python3". "make
  altinstall" est donc recommandé à la place de "make install"
  puisqu'il installe seulement "*exec_prefix*/bin/python*version*".


2.3. Fichiers et chemins liés à Python
======================================

Ceux-ci sont sujets à des différences en fonction des conventions
locales d'installation ; "prefix" et "exec_prefix" sont dépendants de
l’installation et doivent être interprétés comme pour des logiciels
GNU ; ils peuvent être égaux.

Par exemple, sur la plupart des systèmes Linux, leur valeur par défaut
est "/usr".

+-------------------------------------------------+--------------------------------------------+
| Fichier/dossier                                 | Signification                              |
|=================================================|============================================|
| "*exec_prefix*/bin/python3"                     | Emplacement recommandé de l'interpréteur.  |
+-------------------------------------------------+--------------------------------------------+
| "*prefix*/lib/python*version*",                 | Emplacements recommandés des dossiers      |
| "*exec_prefix*/lib/python*version*"             | contenant les modules standards.           |
+-------------------------------------------------+--------------------------------------------+
| "*prefix*/include/python*version*",             | Emplacements recommandés des dossiers      |
| "*exec_prefix*/include/python*version*"         | contenant les entêtes nécessaires au       |
|                                                 | développement d'extensions Python et à     |
|                                                 | l'intégration de l'interpréteur.           |
+-------------------------------------------------+--------------------------------------------+


2.4. Divers
===========

Pour utiliser facilement des scripts Python sur Unix, vous devez les
rendre exécutables, par exemple avec

   $ chmod +x script

et mettre un *shebang* approprié en haut du script. Un bon choix est
généralement

   #!/usr/bin/env python3

qui cherche l’interpréteur Python dans le "PATH" complet. Cependant,
certains systèmes Unix peuvent ne pas avoir la commande **env**, donc
vous devrez littéralement écrire "/usr/bin/python3" en tant que chemin
d’interpréteur.

Pour utiliser des commandes *shell* dans vos scripts Python, regardez
le module "subprocess".


2.5. Version personnalisée d'OpenSSL
====================================

1. Pour compiler avec votre propre configuration d'OpenSSL et le
   magasin des certificats de confiance du système, commencez par
   trouver le sous-dossier de "/etc" qui contient le fichier ou le
   lien symbolique "openssl.cnf". Sur la plupart des distributions,
   c'est soit "/etc/ssl", soit "/etc/pki/tls". Ce dossier doit
   également contenir un fichier "cert.pem" ou un sous-dossier "certs"
   (ou les deux).

      $ find /etc/ -name openssl.cnf -printf "%h\n"
      /etc/ssl

2. Téléchargez et compilez OpenSSL. Installez-le, en prenant bien
   garde de le faire avec la cible "install_sw" et non pas "install".
   En effet, "install" réécrirait le fichier "openssl.cnf".

      $ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz
      $ tar xzf openssl-VERSION
      $ pushd openssl-VERSION
      $ ./config \
          --prefix=/usr/local/custom-openssl \
          --libdir=lib \
          --openssldir=/etc/ssl
      $ make -j1 depend
      $ make -j8
      $ make install_sw
      $ popd

3. Ensuite, compilez Python avec votre version d'OpenSSL personnalisée
   (voir les options "--with-openssl" et "--with-openssl-rpath" du
   script "configure").

      $ pushd python-3.x.x
      $ ./configure -C \
          --with-openssl=/usr/local/custom-openssl \
          --with-openssl-rpath=auto \
          --prefix=/usr/local/python-3.x.x
      $ make -j8
      $ make altinstall

Note:

  Les versions d'OpenSSL dans une même série (incrémentation du
  troisième chiffre) conservent la compatibilité de l'interface
  binaire. Pour mettre à jour OpenSSL, il n'y a pas besoin de
  recompiler Python, il suffit de remplacer l'installation d'OpenSSL
  avec la nouvelle version.
