¿Cómo ejecuto Python en un entorno conda con airflow?
conda 4.10.1
airflow 2.2.2
Normalmente, ejecuto un script de la siguiente manera:
conda activate env
python /ruta al script/script.py
Así que puse esos dos comandos en un script de bash y usé el operador bashOperator de la siguiente manera:
t1 = BashOperator(
task_id='testtask',
depends_on_past=False,
bash_command='/ruta al bash/script.bash',
retries=0,
)
y obtuve el temido error “conda is not setup to activate environments”.
Luego hice lo siguiente:
conda init bash
conda activate env
python /ruta al script/script.py
pero por supuesto, la shell tiene que reiniciarse, lo cual no sé cómo hacer en apache airflow. Debe haber argumentos predeterminados o algo secreto en el .bashrc, etc. para activar los entornos anaconda en modo no interactivo, pero soy un trasplante de conda de Windows y un tutorial no está cerca.
Hay esta otra solución que básicamente hace un montón de cosas complicadas para iniciar Python en el entorno de su elección,
https://stackoverflow.com/questions/49738173/how-to-run-airflow-pythonoperator-in-a-virtual-environment/58440405#58440405
El truco secreto es ejecutar Python en el entorno:
bash_command='~/anaconda3/envs/env_of_choice/bin/python
/python_files/python_task1.py',
¡Este tipo pudo hacerlo en Anaconda 3.9!
Pero misteriosamente, mi entorno y mi entorno base tienen el mismo Python. Cuando escribo “env” para ambos entornos, la diferencia está en lo siguiente:
conda_shlvl=2 en lugar de 1
conda_prefix_1 = usuarios/yo/opt/anaconda3
path incluye /usuarios/yo/opt/anaconda3/envs/env_of_choice/bin
conda_prefix=/usuarios/yo/opt/anaconda3/envs/env_of_choice
conda_default_env=sfdc
Hay varias formas de proceder. Tal vez no configuré el entorno correctamente y está utilizando el Python base en lugar de crear un Python en el entorno virtual. Usé un archivo yml. También es muy tentador simplemente establecer estas variables de entorno en DAG, pero tal vez no sea la forma aceptada. No pude encontrar un tutorial. ¿Cuál es el camino correcto? ¿O tal vez mi versión, 4.10.1, es demasiado avanzada y debería retroceder a 3.9? Hay demasiadas opciones. ¿Algún consejo?
davy.ai
Como experto en Anaconda y Airflow, aquí están algunas soluciones posibles para el problema de activación de conda:
bash_command
en elBashOperator
. Por ejemplo:Esto activará el ambiente
env
antes de ejecutar el script.PythonVirtualenvOperator
en lugar deBashOperator
. Este operador crea un ambiente virtual e instala los paquetes requeridos antes de ejecutar el script Python. Por ejemplo:Esto creará un ambiente virtual con los paquetes especificados y ejecutará la función Python
my_function
.Esto establece las variables de ambiente para que
BashOperator
use el ambiente conda correcto.En cuanto a si debes bajar de versión o quedarte con tu versión actual de conda, depende de tus necesidades y requerimientos específicos. Generalmente, se recomienda utilizar la última versión estable si es posible. Sin embargo, si estás experimentando problemas con una versión más reciente, puede valer la pena probar una versión anterior para ver si eso resuelve el problema.