Entorno virtual para instalar paquetes y dependencias sin afectar la instalación de Python del sistema.

Supongamos que hemos escrito código Python en el que se necesita cargar el módulo pandas en un computador con sistema operativo Linux y nuestro usuario no tiene rango de administrador. Hay una opción para importar el módulo pandas en nuestro script.

Puedes usar un entorno virtual de Python para instalar pandas y cualquier otra dependencia que necesites. Un entorno virtual es una versión aislada de Python que te permite instalar paquetes y dependencias sin afectar la instalación de Python del sistema. De esta forma, puedes instalar pandas en tu entorno virtual sin necesidad de permisos de administrador.

Para crear un entorno virtual, puedes utilizar el siguiente comando:

python3 -m venv myenv

Esto creará un nuevo entorno virtual en una carpeta llamada myenv. Puedes activar el entorno virtual con el siguiente comando:

source myenv/bin/activate

Una vez que hayas activado el entorno virtual, puedes instalar pandas y cualquier otra dependencia que necesites usando el comando pip. Por ejemplo:

pip install pandas

Luego, puedes ejecutar tu script desde el entorno virtual y Python usará la versión de pandas instalada en el entorno virtual. Para salir del entorno virtual, puedes ejecutar el siguiente comando:

deactivate

Para volver a entrar al entorno virtual, debes ejecutar el siguiente comando:

source /ruta/del/entorno/virtual/bin/activate

Solo necesitas reemplazar "/ruta/del/entorno/virtual" con la ruta en la que creaste el entorno virtual. Una vez ejecutado este comando, estarás dentro del entorno virtual y podrás ejecutar tus scripts con las dependencias específicas del entorno.

Para ver los módulos de Python instalados en tu entorno virtual, puedes ejecutar el siguiente comando:

pip freeze

En mi cluster Linux tengo:

numpy==1.19.5
pandas==1.1.5
python-dateutil==2.8.2
pytz==2023.3
six==1.16.0
XlsxWriter==3.1.0

Veamos a continuación un Script de Python 3 que puede ejecutarse desde este entorno virtual.

import pandas as pd
import glob

# Leer los archivos _bindenergy.tab y guardarlos en un diccionario
path = '/home/jant.encinar/py-linux/07_binding-energy/tab'
all_files = glob.glob(path + "/*_bindenergy.tab")
data = {}
for filename in all_files:
    sheet_name = filename.split("/")[-1][:10]
    df = pd.read_csv(filename, sep="\t", header=None)
    data[sheet_name] = df

# Crear un libro de Excel y guardar cada archivo _bindenergy.tab en una hoja separada
writer = pd.ExcelWriter('excel-tabulado-numeros.xlsx', engine='xlsxwriter')
for sheet_name, df in data.items():
    df_tabulated = df[0].str.split(expand=True)
    df_tabulated = df_tabulated.apply(pd.to_numeric, errors='coerce') # Convertir valores a números
    df_tabulated.to_excel(writer, sheet_name=sheet_name, index=False, header=False)

# Cerrar el libro de Excel
writer._save()