2012-06-14 12 views
11

Diciamo che ho creato un virtualenv chiamato venv (virtualenv venv)VIRTUALENV "venv/bin/activate" vs "venv source/bin/attivare"

Da esercitazioni di lettura, ho letto ci sono 2 modi per attivare virtuale ENV:

  1. . venv/bin/activate

  2. source venv/bin/activate

Penso che entrambi realizzino la stessa cosa, ma non capisco cosa sta succedendo.

Anche per il numero 1, non "." intendi solo la cartella corrente? ma non funziona se digito semplicemente "venv/bin/activate" senza "."

qualsiasi aiuto sarebbe fantastico!

risposta

19

. e source fanno esattamente la stessa cosa, con la sola differenza che mentre source è più leggibile, potrebbe non essere disponibile in tutte le shell.

Il comando esegue il contenuto dello script all'interno della shell corrente e ciò è importante nel caso di activate, perché una delle cose che lo script fa è l'esportazione e modifica le variabili di ambiente all'interno della shell corrente.

Se si dovesse eseguire utilizzando ./path/to/activate, lo script verrà eseguito all'interno di una subshell e tutte le variabili di ambiente impostate andranno perse una volta completato lo script e la sottoshell verrà chiusa.

Anche per il numero 1, non "." intendi solo la cartella corrente?

. ha un significato diverso a seconda del contesto. Significa solo "cartella corrente" quando viene utilizzato come (o parte di) un percorso.

Da http://en.wikipedia.org/wiki/Dot_%28Unix%29:

Il comando punto è da non confondere con un dot file, which is a dot-prefixed hidden file or hidden directory.


Per inciso, vorrei suggerire che si dà un'occhiata al virtualenvwrapper che fornisce ulteriori comandi wrapper che rendono virtualenv molto più facile da usare.

Utilizzando virtualenvwrapper, il passaggio a un evironment viene fatto semplicemente chiamando:

workon YOUR_ENV 
+0

La fonte è un bashismo. –

+0

@JohnP oops. Potrei averlo modificato accidentalmente. Lasciatemi reinserire. –

+0

Se stai usando Ubuntu, devi fare attenzione al suo uso di Dash e nelle versioni precedenti/bin/bash puntate al trattino (non sono sicuro che lo faccia ancora), quindi la fonte non ha funzionato, ma. ha funzionato bene –

4

Il comando . è essenzialmente un alias per lo source. Entrambi eseguono un determinato script nella shell corrente senza creare una nuova shell.

Here sono alcuni buoni esempi.

+1

viceversa: '.'è il [comando specificato da POSIX] (http://pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html) che funziona ovunque,' source' è l'alias (disponibile su un sottoinsieme di shell). –