# 2. Uso de Python en plataformas Unix

## 2.1. Obteniendo e instalando la última versión de Python

### 2.1.1. En Linux

Python viene preinstalado en la mayoría de distribuciones Linux, y también está disponible como paquete en el resto. Sin embargo, hay determinadas características que puede que quiera usar y no están disponibles en tu paquete de distribución. Puedes compilar fácilmente la última versión de Python de la fuente.

En caso de que Python no venga preinstalado y tampoco se encuentre en los repositorios, puede crear fácilmente paquetes para su propia distribución. Eche un vistazo a los siguientes enlaces:

Ver también

https://www.debian.org/doc/manuals/maint-guide/first.en.html

  para usuarios de Debian

https://en.opensuse.org/Portal:Packaging

  para los usuarios de OpenSuse

https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-creating-rpms.html

  para los usuarios de Fedora

http://www.slackbook.org/html/package-management-making-packages.html

  para los usuarios de Slackware

### 2.1.2. En FreeBSD y OpenBSD

- Usuarios FreeBSD, para añadir al paquete use:

      pkg install python3

- Usuarios OpenBSD, para añadir al paquete use:

      pkg_add -r python

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

  Por ejemplo, los usuarios de i386 obtienen la versión 2.5.1 de Python usando:

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

### 2.1.3. En OpenSolaris

Puede obtener Python de OpenCSW. Varias versiones de Python están disponibles y pueden ser instaladas, por ejemplo: `pkgutil -i python27`.

## 2.2. Construyendo Python

If you want to compile CPython yourself, first thing you should do is get the source. You can download either the latest release’s source or just grab a fresh clone. (If you want to contribute patches, you will need a clone.)

El proceso de construcción consta de los comandos habituales:

    ./configure
    make
    make install

Opciones de configuración y las advertencias para plataformas Unix específicas están ampliamente documentadas en el archivo README.rst en la raíz del árbol de fuentes de Python.

Advertencia

`make install` puede sobreescribir o enmascarar el binario `python3`. Por lo tanto se recomienda `make altinstall` en lugar de `make install` debido a que sólo instala `exec_prefix/bin/pythonversion`.

## 2.3. Rutas y archivos relacionados con Python

Estos están sujetos a diferencias según las convenciones de instalación locales; `prefix` (`${prefix}`) y `exec_prefix` (`${exec_prefix}`) son dependientes de la instalación y deben interpretarse como software GNU; deben ser iguales.

Por ejemplo, en la mayoría de los sistemas Linux, el valor predeterminado para ambos es `/usr`.

Archivo/directorio | Significado
--- | ---
`exec_prefix/bin/python3` | Ubicación recomendada del intérprete.
`prefix/lib/pythonversion`, `exec_prefix/lib/pythonversion` | Ubicaciones recomendadas de los directorios que contienen los módulos estándar.
`prefix/include/pythonversion`, `exec_prefix/include/pythonversion` | Ubicaciones recomendadas de los directorios que contienen los archivos de inclusión necesarios para desarrollar extensiones de Python e incrustar el intérprete.

## 2.4. Miscelánea

Para usar fácilmente los scripts de Python en Unix, debe hacerlos ejecutables, p. ej. con

    $ chmod +x script

y coloque una línea Shebang adecuada en la parte superior del script. Una buena opción es usualmente

    #!/usr/bin/env python3

que busca el intérprete de Python en el conjunto `PATH`. Sin embargo, algunos Unices puede que no tengan el comando env, por lo que es posible que deba codificar `/usr/bin/python3` como la ruta intérprete.

Para usar comandos de shell en sus scripts de Python, mire el módulo `subprocess`.

## 2.5. OpenSSL personalizado

1. Para utilizar la configuración de OpenSSL de su proveedor y el almacén de confianza del sistema, busque el directorio con el archivo `openssl.cnf` o el enlace simbólico en `/etc`. En la mayoría de las distribuciones, el archivo está en `/etc/ssl` o `/etc/pki/tls`. El directorio también debe contener un archivo `cert.pem` y / o un directorio `certs`.

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

2. Descargue, compile e instale OpenSSL. Asegúrese de utilizar `install_sw` y no `install`. El destino `install_sw` no anula `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. Compile Python con OpenSSL personalizado (consulte las opciones configure –with-openssl y` –with-openssl-rpath`)

       $ 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

Nota

Las versiones de parche de OpenSSL tienen una ABI compatible con versiones anteriores. No es necesario volver a compilar Python para actualizar OpenSSL. Es suficiente reemplazar la instalación personalizada de OpenSSL con una versión más nueva.