Capítulo 15. Lenguajes de programación dinámicos, servidores web, servidores de bases de datos
15.1. Lenguajes de programación dinámicos
15.1.1. Cambios notables en Python
15.1.1.1. Python 3
es la implementación por defecto de Python
en RHEL 8
Red Hat Enterprise Linux 8 se distribuye con Python 3.6
. El paquete puede no estar instalado por defecto. Para instalar Python 3.6
, utilice el comando yum install python3
.
Python 2.7
está disponible en el paquete python2
. Sin embargo, Python 2
tendrá un ciclo de vida más corto y su objetivo es facilitar a los clientes una transición más suave a Python 3
.
Ni el paquete por defecto python
ni el ejecutable no versionado /usr/bin/python
se distribuyen con RHEL 8. Se aconseja a los clientes que utilicen directamente python3
o python2
. Como alternativa, los administradores pueden configurar el comando no versionado python
mediante el comando alternatives
.
Para más detalles, consulte Uso de Python en Red Hat Enterprise Linux 8.
15.1.1.2. Migración de Python 2 a Python 3
Como desarrollador, es posible que quieras migrar tu antiguo código escrito en Python 2 a Python 3. Para obtener más información sobre cómo migrar grandes bases de código a Python 3, consulta The Conservative Python 3 Porting Guide.
Tenga en cuenta que después de esta migración, el código original de Python 2 se convierte en interpretable por el intérprete de Python 3 y sigue siendo interpretable para el intérprete de Python 2 también.
15.1.2. Configurar el Python no versionado
Los administradores del sistema pueden configurar el comando no versionado python
, ubicado en /usr/bin/python
, utilizando el comando alternatives
. Tenga en cuenta que el paquete requerido, python3
, python38
, o python2
, necesita ser instalado antes de configurar el comando no versionado a la versión respectiva.
El ejecutable /usr/bin/python
está controlado por el sistema alternatives
. Cualquier cambio manual puede ser sobrescrito en una actualización.
Otros comandos relacionados con Python, como pip3
, no tienen variantes configurables sin versionar.
15.1.2.1. Configurar directamente el comando python no versionado
Para configurar el comando no versionado python
directamente a una versión seleccionada de Python, utilice este procedimiento.
Procedimiento
Para configurar el comando
python
no versionado a Python 3.6, ejecute este comando:# alternatives --set python /usr/bin/python3
Para configurar el comando
python
no versionado a Python 3.8, utilice el siguiente comando:# alternatives --set python /usr/bin/python3.8
Para configurar el comando
python
no versionado a Python 2, utilice:# alternativas --set python /usr/bin/python2
15.1.2.2. Configurar el comando python no versionado a la versión de Python requerida de forma interactiva
También puede configurar el comando python
no versionado a la versión de Python requerida de forma interactiva.
Para configurar el comando python
no versionado de forma interactiva, utilice este procedimiento.
Procedimiento
Ejecute el siguiente comando:
# alternativas --config python
- Seleccione la versión requerida de la lista proporcionada.
Para restablecer esta configuración y eliminar el comando
python
no versionado, ejecute:# alternativas --auto python
15.1.2.3. Los scripts de Python deben especificar la versión principal en los hashbangs en el momento de construir el RPM
En RHEL 8, se espera que los scripts ejecutables de Python utilicen hashbangs (shebangs) especificando explícitamente al menos la versión principal de Python.
El script /usr/lib/rpm/redhat/brp-mangle-shebangs
buildroot policy (BRP) se ejecuta automáticamente al construir cualquier paquete RPM. Este script intenta corregir los hashbangs en todos los archivos ejecutables. Cuando el script encuentra hashbangs de Python ambiguos que no especifican la versión mayor de Python, genera errores y la construcción del RPM falla. Ejemplos de tales hashbangs ambiguos incluyen:
-
#! /usr/bin/python
-
#! /usr/bin/env python
Para modificar los hashbangs en los scripts de Python que causan estos errores de compilación en el momento de construir el RPM, utilice el script pathfix.py
del paquete platform-python-devel:
pathfix.py -pn -i %{__python3} PATH ...
Se pueden especificar múltiples PATHs. Si un PATH es un directorio, pathfix.py
busca recursivamente cualquier script de Python que coincida con el patrón ^[a-zA-Z0-9_] \.py$
, no sólo aquellos con un hashbang ambiguo. Añade el comando para ejecutar pathfix.py
a la sección %prep
o al final de la sección %install
.
Para más información, consulte Manejo de hashbangs en scripts de Python.
15.1.2.4. Python
la unión del paquete net-snmp
no está disponible
El conjunto de herramientas Net-SNMP
no proporciona enlaces para Python 3
, que es la implementación por defecto de Python
en RHEL 8. En consecuencia, los paquetes python-net-snmp
, python2-net-snmp
, o python3-net-snmp
no están disponibles en RHEL 8.
15.1.2.5. Recursos adicionales
15.1.3. Cambios notables en PHP
Red Hat Enterprise Linux 8 se distribuye con PHP 7.2
. Esta versión introduce los siguientes cambios importantes con respecto a PHP 5.4
, que está disponible en RHEL 7:
-
PHP
utiliza por defecto el gestor de procesos FastCGI (FPM) (seguro para su uso con un hilohttpd
) -
Las variables
php_value
yphp-flag
ya no deben utilizarse en los archivos de configuración dehttpd
; en su lugar, deben establecerse en la configuración del grupo/etc/php-fpm.d/*.conf
-
PHP
los errores y advertencias de los scripts se registran en el archivo/var/log/php-fpm/www-error.log
en lugar de/var/log/httpd/error.log
-
Al cambiar la variable de configuración de PHP
max_execution_time
, la configuración dehttpd
ProxyTimeout
debe aumentarse para que coincida con -
El usuario que ejecuta los scripts de
PHP
está ahora configurado en la configuración del pool de FPM (el archivo/etc/php-fpm.d/www.conf
; el usuarioapache
es el predeterminado) -
El servicio
php-fpm
debe reiniciarse después de un cambio de configuración o de la instalación de una nueva extensión -
La extensión
zip
se ha trasladado del paquetephp-common
a un paquete separado,php-pecl-zip
Se han eliminado las siguientes extensiones:
-
aspell
-
mysql
(tenga en cuenta que las extensionesmysqli
ypdo_mysql
siguen estando disponibles, proporcionadas por el paquetephp-mysqlnd
) -
memcache
15.1.4. Cambios notables en Perl
Perl 5.26
, distribuido con RHEL 8, introduce los siguientes cambios respecto a la versión disponible en RHEL 7:
-
Unicode 9.0
es ahora compatible. -
Se proporcionan nuevas sondas
op-entry
,loading-file
, yloaded-file
SystemTap
. - El mecanismo de copia en escritura se utiliza al asignar escalares para mejorar el rendimiento.
-
Se ha añadido el módulo
IO::Socket::IP
para manejar de forma transparente los sockets IPv4 e IPv6. -
Se ha añadido el módulo
Config::Perl::V
para acceder a los datos deperl -V
de forma estructurada. -
Se ha añadido un nuevo paquete
perl-App-cpanminus
, que contiene la utilidadcpanm
para obtener, extraer, construir e instalar módulos del repositorio Comprehensive Perl Archive Network (CPAN). -
El directorio actual
.
ha sido eliminado de la ruta de búsqueda del módulo@INC
por razones de seguridad. -
La sentencia
do
devuelve ahora una advertencia de desaprobación cuando no consigue cargar un archivo debido al cambio de comportamiento descrito anteriormente. -
La llamada
do subroutine(LIST)
ya no es compatible y da lugar a un error de sintaxis. -
Ahora los hash son aleatorios por defecto. El orden en que se devuelven las claves y los valores de un hash cambia en cada ejecución de
perl
. Para desactivar la aleatorización, establezca la variable de entornoPERL_PERTURB_KEYS
en0
. -
Ya no se permiten los caracteres literales de
{
sin esconder en los patrones de expresiones regulares. -
Se ha eliminado el soporte del ámbito léxico para la variable
$_
. -
El uso del operador
defined
en un array o en un hash produce un error fatal. -
La importación de funciones del módulo
UNIVERSAL
da lugar a un error fatal. -
Se han eliminado las herramientas
find2perl
,s2p
,a2p
,c2ph
ypstruct
. -
Se ha eliminado la facilidad de
${^ENCODING}
. El modo por defecto del pragmaencoding
ya no es soportado. Para escribir el código fuente en otra codificación que no seaUTF-8
, utilice la opciónFilter
de la codificación. -
El paquete
perl
está ahora alineado con el upstream. El paqueteperl
instala también los módulos principales, mientras que el intérprete/usr/bin/perl
es proporcionado por el paqueteperl-interpreter
. En versiones anteriores, el paqueteperl
incluía sólo un intérprete mínimo, mientras que el paqueteperl-core
incluía tanto el intérprete como los módulos centrales. -
El módulo Perl
IO::Socket::SSL
ya no carga un certificado de autoridad de certificación del archivo./certs/my-ca.pem
o del directorio./ca
, una clave privada del servidor del archivo./certs/server-key.pem
, un certificado del servidor del archivo./certs/server-cert.pem
, una clave privada del cliente del archivo./certs/client-key.pem
y un certificado del cliente del archivo./certs/client-cert.pem
. En su lugar, especifique las rutas de acceso a los archivos de forma explícita.
15.1.5. Cambios notables en Ruby
RHEL 8 proporciona Ruby 2.5
, que introduce numerosas nuevas características y mejoras respecto a Ruby 2.0.0
disponibles en RHEL 7. Los cambios más destacados son:
- Se ha añadido el recolector de basura incremental.
-
Se ha añadido la sintaxis
Refinements
. - Los símbolos son ahora recolectados por la basura.
-
Los niveles de seguridad de
$SAFE=2
y$SAFE=3
han quedado obsoletos. -
Las clases
Fixnum
yBignum
se han unificado en la claseInteger
. -
Se ha mejorado el rendimiento gracias a la optimización de la clase
Hash
, a la mejora del acceso a las variables de instancia y a que la claseMutex
es más pequeña y rápida. - Algunas API antiguas han quedado obsoletas.
-
Se han actualizado las librerías agrupadas, como
RubyGems
,Rake
,RDoc
,Psych
,Minitest
ytest-unit
. -
Otras bibliotecas, como
mathn
,DL
,ext/tk
, yXMLRPC
, que antes se distribuían conRuby
, están obsoletas o ya no se incluyen. -
El esquema de versionado
SemVer
se utiliza ahora para el versionadoRuby
.
15.1.6. Cambios notables en SWIG
RHEL 8 incluye la versión 3.0 del Simplified Wrapper and Interface Generator (SWIG), que ofrece numerosas novedades, mejoras y correcciones de errores respecto a la versión 2.0 distribuida en RHEL 7. Lo más destacable es que se ha implementado la compatibilidad con el estándar C 11. SWIG
soporta ahora también Go 1.6
, PHP 7
, Octave 4.2
, y Python 3.5
.
15.1.7. Node.js
nuevo en RHEL
Node.js
, una plataforma de desarrollo de software para crear aplicaciones de red rápidas y escalables en el lenguaje de programación JavaScript, se proporciona por primera vez en RHEL. Anteriormente sólo estaba disponible como colección de software. RHEL 8 proporciona Node.js 10
.
15.1.8. Tcl
Tool command language (Tcl) es un lenguaje de programación dinámico. El intérprete de este lenguaje, junto con la librería C, lo proporciona el paquete tcl
.
Utilizando Tcl emparejado con Tk (Tcl/Tk) permite crear aplicaciones GUI multiplataforma Tk es proporcionada por el paquete tk
.
Tenga en cuenta que Tk puede referirse a cualquiera de los siguientes:
- Un conjunto de herramientas de programación para múltiples lenguajes
- Una librería Tk C disponible para múltiples lenguajes, como C, Ruby, Perl y Python
- Un intérprete de deseos que instancie una consola Tk
- Una extensión de Tk que añade una serie de nuevos comandos a un determinado intérprete de Tcl
15.1.8.1. Cambios notables en Tcl/Tk 8.6
RHEL 8 se distribuye con Tcl/Tk version 8.6que proporciona múltiples cambios notables con respecto a Tcl/Tk version 8.5:
- Apoyo a la programación orientada a objetos
- Aplicación de la evaluación sin pilas
- Gestión de excepciones mejorada
- Colección de paquetes de terceros construidos e instalados con Tcl
- Operaciones multihilo habilitadas
- Soporte de scripts con base de datos SQL
- Soporte de red IPv6
- Compresión Zlib integrada
Procesamiento de la lista
Están disponibles dos nuevos comandos,
lmap
ydict map
, que permiten la expresión de transformaciones sobre Tcl contenedores.Canales apilados por guión
Están disponibles dos nuevos comandos,
chan push
ychan pop
, que permiten añadir o eliminar transformaciones hacia o desde los canales de E/S.
Para obtener información más detallada sobre Tcl/Tk version 8.6 cambios y nuevas funciones, consulte los siguientes recursos:
Si necesita migrar a Tcl/Tk 8.6consulte la sección Migración a Tcl/Tk 8.6.