2013-03-12 11 views
25

utworzyć i aktywować virtualenv (venv) przy użyciu Pythona 3.3 wbudowanego sposób to zrobić:Dlaczego dystrybuować i instalować pip na moim virtualenv's ./local/bin?

$ python3.3 -m venv env 
$ source env/bin/activate 

W tym momencie python jest Python w moim virtualenv, które oczekują:

(env) $ which python 
/my_home_directory/env/bin/python 

teraz chcę zainstalować dystrybucję i pip, więc mogę pobrać skrypty konfiguracyjne i uruchomić je:

(env)$ wget http://python-distribute.org/distribute_setup.py 
(env)$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py 
(env)$ python distribute_setup.py 
(env)$ python get-pip.py 

tych poleceń pełne sukcesów sfully. W tym momencie sprawdzam moje venv, aby znaleźć inny katalog o nazwie "local", którego wcześniej nie było. env/local/bin zawiera moje easy_install i pip wykonywalnych, a oni nadal alias do istniejącego easy_install i pip mojego systemu:

(env)$ ls env 
bin include lib local pyvenv.cfg 
(env)$ ls env/bin 
activate pydoc python python3 python3.3 
(env)$ ls env/local/bin 
easy_install easy_install-3.3 pip pip-3.3 
(env)$ which easy_install 
/usr/bin/easy_install 
(env)$ which pip 
/usr/bin/pip 

wierzę, że jest to odejście od zachowań Python 2.x jest. W tym momencie oczekuję, że easy_install i pip będą używać kopii virtualenv, a użycie ich do zainstalowania jajek spowoduje umieszczenie ich w virtualenv.

Idąc dalej, otwieram env/bin/activate, aby znaleźć, że env/bin jest uprzednio ustawione na ścieżkę systemową, ale env/local/bin nie jest. To wyjaśnia zachowanie, które widzę. mogę obejść ten problem poprzez edycję ENV/bin/aktywować, aby dodać do katalogu ENV/local/bin do ścieżki, coś jak:

_OLD_VIRTUAL_PATH="$PATH" 
PATH="$VIRTUAL_ENV/bin:$PATH" 
PATH="$VIRTUAL_ENV/local/bin:$PATH" # my new line 
export PATH 

Więc, co tu się dzieje? Czy to błąd, czy coś mi brakuje?

Jestem na Ubuntu 12.10 w przypadku, które robi różnicę.

+0

Myślałem, że virtualenv miał już zawierać 'pip' /' easy_install'? – MattDMo

+0

Nieparzysty. Używam osobistej wersji Pythona 3.3 na Debianie i rozpowszechniam/pip install w 'env/bin' dla mnie. Czy twoja kopia 3.3 z repozytorium Ubuntu?Jeśli tak, spróbuj utworzyć lokalną kopię i sprawdź, czy działa poprawnie. – eryksun

+4

@MattDMo Wierzę, że pip i easy_install są dołączone, gdy używasz komendy 'virtualenv', ale nie wydaje się, że jest tak w przypadku modułu venv Pythona 3.3, sądząc po dokumentach. @eryksun Jest to rzeczywiście wersja Python 3.3 dla Ubuntu. Spróbuję budować lokalnie i złożyć raport. –

Odpowiedz

2

Mam wrażenie, że to błąd w pakietach Pythona Ubuntu lub rozpowszechnianie gdzieś ... ale ja jej nie wytropił (a ja nie jestem pewien, czy mi zależy).

Z jakiegoś powodu zmienną środowiskową VIRTUAL_ENV należy ustawić katalog główny virtualenv do dystrybucji i pip, aby zainstalować poprawnie.

This gist, przyjęta z próbki kodu Vinay Sajipa w dokumentach Pythona 3, ustawia wspomnianą zmienną; zarówno distribute, jak i pip zainstalują się poprawnie podczas korzystania z niego.

+0

Potwierdzone: ustawienie parametru VIRTUAL_ENV na katalog główny virtualenv spowoduje, że pip i distribute zostaną poprawnie zainstalowane. Przetestowałem to na Ubuntu 13.04. Dzięki! –

0

Miałem ten sam problem. W activate pliku skryptu muszę dodać jako pierwszej linii (z cource po #!...):

unset PYTHON_PATH 
+3

Jeśli możesz to rozwinąć, na czym polega problem i dlaczego działa twoje rozwiązanie, byłoby lepiej. –

+0

Mam ten sam błąd, ale kiedy dodam to na górze tego pliku, to rozwiązuję mój problem ... Wypróbuj ... – WBAR

+1

To nie działa dla mnie. Również mój env/bin/activate nie ma #! jako pierwszą linię. Jak już wspomniałem w powyższym komentarzu, mam własną pracę poprzez edycję env/bin/activate, ale próbuję ustalić, dlaczego obejście jest nawet konieczne. –

1

Jest w docs Pythona.

"/ usr/local" jest domyślnym exec_prefix. Przeczytaj venv docs, aby dowiedzieć się, jak zmienić domyślne zachowanie. Jest tam nawet przykład pokazujący, jak zrobić venv.EnvBuilder, który instaluje i rozpowszechnia za Ciebie.

jeśli okaże dystrybuować dokumenty, proszę dać mi znać ;-)

+0

Dobra informacja, dzięki. Kiedy aktywowana jest moja venv, 'sys.prefix' i' sys.exec_prefix' wskazują na katalog główny venv. Ale nie widzę, gdzie w dokumentach wyjaśnia, jak uzyskać 'pip' lub' easy_install' pracując z venv. W szczególności szukam w pierwszej sekcji "Notatki" dokumentacji venv, która wydaje mi się mówić, że rzeczy powinny po prostu działać, biorąc pod uwagę moje kroki reprodukcji powyżej. Konkretnie: "Oczywiście, musisz najpierw zainstalować je w venv: można to zrobić, uruchamiając plik distribute_setup.py z aktywowanym venv, a następnie uruchamiając easy_install pip." Dowolny pomysł? –

Powiązane problemy