2013-02-02 6 views
8

Czytałem w środowisku wirtualnym i wydaje mi się to bardzo użytecznym narzędziem, ale teraz zastanawiam się, jak skonfigurować całe moje środowisko Pythona. Teraz, wszystkie moduły i pakiety, które mam zainstalowane są przebywający w tym katalogu:Zrozumienie środowiska wirtualnego dla Pythona

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages 

Ale virtualenv docs wydają się sugerować, że takie uniwersalne instalacje systemowe są złe. Jeśli tak, to co powinienem zrobić z moimi aktualnymi modułami i jak mam zainstalować przyszłe moduły? Na przykład ostatnio zainstalowałem skrzynkę z mojego katalogu użytkownika za pomocą tego polecenia:

pip install flask 

Obecnie znajduje się w pakietach witryny. Czy powinienem zrobić coś innego? Mam problem z dokumentacją, która wydaje się sugerować, że muszę przejść do katalogu projektu, skonfigurować środowisko wirtualne i zainstalować wszystkie potrzebne moduły przy użyciu virtualenv. Czy tak jest? Czy jest jakiś sposób na zmniejszenie uciążliwości? Wygląda na to, że zainstalowanie potencjalnie kilkudziesięciu pakietów dla każdego katalogu projektu byłoby niewiele.

Czy jest tak, że potrzebuję tylko tworzyć środowiska wirtualne dla projektów, które używają starszych wersji modułów niż te, które zainstalowałem w katalogu systemowym? Jeśli tak jest, to co się dzieje z mantrą virtualenv, która zdaje się zniechęcać wszystkie instalacje systemu?

+1

Powszechna zachęta do korzystania z virtualenv jest prawdopodobnie kwestią dla wielu użytkowników maszyn, w których instalacje systemu mogą powodować wszelkiego rodzaju nieznane konsekwencje dla innych użytkowników. Jest również przydatny/rozważny, aby użyć go samemu podczas projektu, gdy eksperymentujesz z wersjami pakietów i takimi. Na koniec możesz eksportować środowiska, aby ułatwić innym korzystanie ze skryptów, co jest miłe. –

+1

Ponadto można rzucić okiem na virtualenvwrapper, który jest bardzo potężnym narzędziem. Umożliwia organizowanie wszystkich wirtualnych środowisk w jednym miejscu, przełączanie i konfigurowanie. – ScotchAndSoda

Odpowiedz

13

Jeśli masz już zainstalowany virtualenv tak:

pip install virtualenv 

Będziesz wtedy chcesz skonfigurować konkretnego folderu virtualenv:

virtualenv [your project folder name] 

Spowoduje to utworzenie tego folderu projektu z kilku ważnych podkatalogi.

Najpierw aktywujesz swój virtualenv przed instalacją czegokolwiek nowego, nowo zainstalowane moduły będą dostępne tylko wtedy, gdy zostaną "dostarczone" do twojego virtualenv. Z folderu projektu:

source bin/activate 

Następnie zobaczysz swoją nazwę virtualenv w nawiasie na każdej linii terminalu. Oznacza to, że jesteś "pozyskiwany". TERAZ zainstaluj rzeczy za pomocą pip lub easy_install.

pip install flask 

virtualenv zasadzie ustawia ścieżkę szukać w folderze venv] [/ bin wykonywalne zamiast/usr/local/bin lub cokolwiek. Możesz więc kopiować pliki bezpośrednio do swojego wirtualnego folderu env bin. (Pliki MongoDB na przykład znajdują się w pliku zip/tar, możesz po prostu rozpakować je do folderu bin venv i będziesz mieć dostęp do tej konkretnej wersji MongoDB, gdy będzie ona dostępna.) Spróbuj sam, uruchom to polecenie z w środowisku wirtualnym, a następnie domyślnym, aby zobaczyć, jak się zmienia.

echo $PATH && echo $PYTHONPATH 

Aby wyjść ze swojego virtualenv:

deactivate 

Wpisanie będzie cię z powrotem do domyślnego środowiska.

Jeśli jeszcze tego nie przeczytałeś, jest to całkiem niezły zasób.

https://python-guide.readthedocs.org/en/latest/dev/virtualenvs/

+0

Ma sens, ale czy powinienem to robić w przypadku wszystkich moich projektów, czy tylko tych, które mają zależności, które kolidują z pakietami, które zainstalowałem w systemie? Innymi słowy, czy zawsze powinienem unikać instalacji systemowych, pozostawiając pakiety site zasadniczo puste i tylko importując moduły/pakiety lokalnie używając virtualenv? Jeśli tak, czy istnieje uzasadnienie tego innego niż niebezpieczeństwo aktualizacji modułów, które nie są kompatybilne wstecz? Czy rozważa się prędkość? – user1427661

+1

O ile mi wiadomo, nie ma reperkusji na korzystanie z virtualenv. Tak jak wspomniałem, po prostu tworzy dla ciebie zmienne środowiskowe i tworzy nowy folder lib i bin. To świetny sposób na uporządkowanie projektów. Jest to także świetny sposób na udostępnianie całego środowiska. Jeśli git zainicjujesz folder virtualenv, to każdy, kto go sklonuje, nie musi pobierać wszystkich dodatkowych zależności. Są tam w folderach bin i lib. Być może będziesz musiał napisać plik bash, który pozwoli im na jego pobranie, ale to banalne. Zainstaluj w domyślnym środowisku, jeśli inne aplikacje wymagają zależności. –

0

Przed umieszczeniem/wspierania czegokolwiek w produkcji jest minimalne korzyści z virtualenv. To tylko dodatkowy krok do aktywacji virtualenv, i oczywiście musisz zainstalować swoje standardowe środowisko w każdym virtualenv ... nie tak wiele dodatkowego wysiłku ...

Po dodaniu czegoś do produkcji potencjalnie wspaniała wygrana, gdy wszystko pójdzie w nocy :-)