Saltar al contenido

qué shebang usar para los scripts de python que se ejecutan bajo un pyenv virtualenv

Este dilema se puede solucionar de diversas formas, por lo tanto te mostramos la que en nuestra opinión es la resolución más completa.

Solución:

Realmente no sé por qué llamar al intérprete con la ruta completa no funcionaría para usted, lo uso todo el tiempo, pero si desea usar el intérprete de Python que está en su entorno, debe hacer:

#!/usr/bin/env python

De esa manera, busca en su entorno el intérprete de python para usar.

Si necesita usar más caparazón del que puede poner en el #! shebang line, puede iniciar el archivo con un script de shell simple que inicia Python en el mismo archivo.

#!/bin/bash
"exec" "pyenv" "exec" "python" "$0" "[email protected]"
# the rest of your Python script can be written below

Debido a las comillas, Python no ejecuta la primera línea y, en su lugar, une las cadenas para la cadena de documentación del módulo… que efectivamente la ignora.

Puedes ver más aquí.

Como esperaba, debería poder usar la ruta completa al python del entorno virtual en Shebang para elegir/controlar el entorno en el que se ejecuta la secuencia de comandos, independientemente del entorno de la secuencia de comandos de control.

En los comentarios sobre su pregunta, VPfB y encuentra que el /Users/username/.pyenv/shims/python es un script de shell que hace un exec $pyenv_python. Deberias ser capaz de echo $pyenv_python para determinar la pitón real y usarla como tu shebang.

Consulte también: https://unix.stackexchange.com/questions/209646/how-to-activate-virtualenv-when-a-python-script-starts

Tratar pyenv virtualenvs para buscar una lista de directorios de entornos virtuales.

Y luego puede encontrar un Shebang usando algo como esto:

#!/Users/username/.pyenv/python/versions/venv_name/bin/python
import pandas as pd
print 'success'

… permitirá que el script funcione utilizando el entorno virtual elegido en otros entornos (virtuales o no):

(venv_name) $ ./script.py 
success
(venv_name) $ pyenv activate non_pandas_venv 
(non_pandas_venv) $ ./script.py
success
(non_pandas_venv) $ . deactivate
$ ./script.py
success
$

El truco es que si llama específicamente al binario de python del entorno virtual, python busca en la ubicación de la ruta de ese binario los archivos de soporte y termina usando el entorno virtual circundante. (Ver por ¿Cómo funciona virtualenv? )

Si posees alguna perplejidad y forma de enriquecer nuestro noticia te recordamos dejar una explicación y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *