es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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:

    1. Utiliza la ruta absoluta para el entorno virtual:

    Intenta utilizar la ruta absoluta al entorno virtual en lugar de .ve en el script. Por ejemplo:

    pyenv activate /ruta/al/virtualenv
    
    1. Especifica la ubicación de pyenv en el script:

    Agrega la siguiente línea al inicio del script para especificar la ubicación de pyenv:

    export PYENV_ROOT="$HOME/.pyenv"
    

    Esto asegurará que el script pueda encontrar pyenv sin problemas.

    1. Utiliza el shebang #!/usr/bin/env bash:

    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.

    1. Utiliza la ruta completa a pyenv:

    En lugar de depender de la variable PATH para encontrar pyenv, utiliza la ruta completa a pyenv en el script. Por ejemplo:

    eval "$(~/.pyenv/bin/pyenv init -)"
    

    Esto asegurará que el script pueda encontrar pyenv sin problemas.

    1. Utiliza pyenv exec para ejecutar gunicorn:

    En lugar de activar el entorno virtual y luego ejecutar gunicorn, utiliza pyenv exec para ejecutar gunicorn en el entorno virtual. Por ejemplo:

    pyenv exec gunicorn /ruta/a/config.wsgi:application --name mini2 --workers 8 \
    --workers 8 --bind=unix:/tmp/run/mini2.socket \
    --log-level=debug --log-file=-
    

    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.

Comments are closed.