La documentazione virtualenv include una sezione Using virtualenv without bin/python
che allude alla come configurare un ambiente virtuale, una volta l'interprete è già in esecuzione
per evitare hardcoding il percorso dello script activate_this.py
, io uso il seguente frammento:.
def resolve_virtual_environment(override=None):
"""Fetch the virtual environment path in the
process' environment or use an override."""
path = os.getenv('VIRTUAL_ENV')
if override:
path = os.path.join(os.getcwd(), override)
return path
def activate_virtual_environment(environment_root):
"""Configures the virtual environment starting at ``environment_root``."""
activate_script = os.path.join(
environment_root, 'Scripts', 'activate_this.py')
execfile(activate_script, {'__file__': activate_script})
E lo si può utilizzare in questo modo:
if __name__ == '__main__':
# use first argument is provided.
override = None
if len(sys.argv) > 1:
override = sys.argv[1]
environment_root = resolve_virtual_environment(override)
È possibile recuperare il valore override
da un file di configurazione o qualcosa invece che dalla argomento della riga di comando.
Si noti che è possibile utilizzare solo un pre-processo di un singolo ambiente virtuale.
Nota: contrariamente all'uso dell'interprete in bundle nell'ambiente virtuale, si ha accesso ai pacchetti installati per l'interprete che è stato avviato. Ad esempio, quando si utilizza Python installato a livello globale, si avrà accesso ai pacchetti installati globalmente.
Assicurarsi inoltre di utilizzare un interprete Python con una versione corrispondente a qualsiasi versione utilizzata per creare l'ambiente virtuale per assicurarsi che la versione standard della libreria (copiata nell'ambiente virtuale) corrisponda alla versione dell'interprete Python.
fonte
2012-07-04 14:50:11
Grazie per questo. Avevo solo bisogno di farlo dal lato C++ e ho imitato la tua soluzione all'interno di Boost :: Python. Esso funziona magicamente ! :) – ereOn