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.