¿Cómo activar virtualenv creado por pyenv en un script de bash?
Necesito escribir un script para iniciar un sitio gunicorn + django que se ha desarrollado con pyenv. El script es algo como:
#!/bin/bash
pyenv activate .ve
pyenv exec gunicorn config.wsgi:application --name mini2 --workers 8 \
--workers 8 --bind=unix:/tmp/run/mini2.socket \
--log-level=debug --log-file=-
Y el mensaje de error es:
2021-12-06 14:09:00 [mini2@s017 mini2]$ ./prodution.sh
No se pudo activar el entorno virtual.
Tal vez pyenv-virtualenv no se ha cargado correctamente en tu shell.
Por favor, reinicia la shell actual e inténtalo de nuevo.
2021-12-06 14:09:55 [mini2@s017 mini2]$
Puedo ejecutar el script línea por línea, por lo que debe haber algo mal en el script, pero no tengo idea de qué está saliendo mal.
Ya he agregado algunas líneas sobre pyenv en mi bashrc:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
¿Hay alguna forma de activar el entorno virtual creado por pyenv en un script bash? ¿Alguna sugerencia?
Actualización:
De acuerdo a https://stackoverflow.com/questions/45577194/failed-to-activate-virtualenv-with-pyenv
Actualicé mi .bashrc de la siguiente manera:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Pero aún no funciona.
Mi script de prueba es:
#!/bin/bash
pyenv activate .ve
Y el error es:
No se pudo activar el entorno virtual.
Tal vez pyenv-virtualenv no se ha cargado correctamente en tu shell.
Por favor, reinicia la shell actual e inténtalo de nuevo.
davy.ai
Parece que el problema está relacionado con la activación del entorno virtual creado por pyenv en el script de bash. Aquí hay algunas sugerencias que pueden ayudar a resolver el problema:
Intenta utilizar la ruta absoluta al entorno virtual en lugar de
.ve
en el script. Por ejemplo:Agrega la siguiente línea al inicio del script para especificar la ubicación de pyenv:
Esto asegurará que el script pueda encontrar pyenv sin problemas.
Asegúrate de que la línea shebang apunte a la ubicación correcta de bash. En lugar de
#!/bin/bash
, intenta usar#!/usr/bin/env bash
.En lugar de depender de la variable PATH para encontrar pyenv, utiliza la ruta completa a pyenv en el script. Por ejemplo:
Esto asegurará que el script pueda encontrar pyenv sin problemas.
En lugar de activar el entorno virtual y luego ejecutar gunicorn, utiliza pyenv exec para ejecutar gunicorn en el entorno virtual. Por ejemplo:
Esto asegurará que gunicorn se ejecute en el entorno virtual correcto sin necesidad de activarlo primero.
Esperemos que una de estas sugerencias pueda ayudar a resolver el problema.