2012-09-13 10 views
8

Obecnie pracuję głównie z Pythonem 2.7 i Django 1.3.3 (hostowane na Heroku) i mam wiele projektów, które utrzymuję. Pracowałem na Pulpicie z Ubuntu działającym wewnątrz VirtualBox, ale ostatnio musiałem wybrać się na wycieczkę i chcieć załadować wszystko do mojego notatnika. Jednak szybko odkryłem, że virtualenv + Github jest naprawdę łatwy do tworzenia projektów, ale starałem się, aby przenieść je do mojego notatnika. Podejście, które wymyśliłem, polegało na stworzeniu nowego virtualenv, a następnie sklonowaniu kodu z github. Ale nie mogłem tego zrobić w folderze, który naprawdę chciałem, ponieważ powiedziałbym, że folder nie jest pusty. Więc sklonowałbym go do folderu tmp, niż wycinał/wklejał wszystko tam, gdzie naprawdę tego chciałem. Nie TERRIBLE, ale po prostu czuję, że czegoś tu brakuje i że powinno być łatwiej. Może najpierw klon, a następnie mkvirtualenv?Migracja virtualenv i Github między komputerami

To nie jest miażdżący problem, ale myślę o wprowadzeniu kilku zmian (np. Po przejechaniu VirtualBoxa i po prostu przy użyciu systemu podwójnego rozruchu) i byłoby wspaniale, gdybym mógł zrobić to nieco płynniej. :)

W końcu znalazłem i przeczytałem kilka postów o przenoszeniu repozytoriów git między komputerami, ale nie widziałem żadnej transakcji z Virtualenv (może właśnie tęskniłem za tym).

EDYCJA: Aby być jasnym i uniknąć zamieszania, nie próbuję "przenieść" virtualenv. Mówię tylko o najlepszym sposobie tworzenia nowego. Zainstaluj pakiety, a następnie sklonuj repozytorium z github.

+0

"Ale nie mogłem tego zrobić w folderze, który naprawdę chciałem, ponieważ powiedziałbym, że folder nie jest pusty." - Czy czynisz virtualenv swoim repozytorium git? Jako w, są 'bin /' (ten z 'activate') i' .git' w tym samym katalogu? – delnan

+0

Tak ... .git, bin, requirements.txt są na tym samym poziomie. Bin nie jest sprawdzany w repozytorium. Mam wtedy folder o nazwie "src" na tym samym poziomie i poniżej, gdzie znajduje się moje źródło. –

Odpowiedz

1

Fajną cechą virtualenv jest to, że możesz opisać, jak to zrobić, i możesz zrobić to wielokrotnie na wielu platformach.

Zamiast klonować całość, sklonuj metodę, aby konsekwentnie tworzyć virtualenv i mieć to w swoim repozytorium git. W ten sposób unikniesz nastrojów związanych z platformą.

+0

Interesujące ... ale proszę wybaczyć moją niewiedzę, nie jestem pewien, czy rozumiem dokładnie. Czy mógłbyś podać więcej szczegółów? Czy możesz podać link? Dzięki za twoją odpowiedź. –

+0

Myślę, że ma na myśli: użyj pliku requirements.txt i utwórz skrypt powłoki, który uruchamia ostatnią część [matt b answer] (http://stackoverflow.com/a/12410239/1521064): 'virtualenv' do utworzenia, 'source' do aktywacji,' pip' do zainstalowania. – vault

3

Oprócz skryptów tworzących nowe virtualenv, powinieneś utworzyć plik requirements.txt, który ma wszystkie twoje zależności (np. Django1.3), możesz wtedy uruchomić pip install -r requirements.txt, a to zainstaluje dla ciebie wszystkie zależności.

Możesz nawet utworzyć dla niego pip, wykonując pip freeze > stable-req.txt, który wydrukuje zależności zależne od bieżącego virtualenv. Następnie można zachować plik requirements.txt w ramach kontroli wersji.

+0

Dzięki za odpowiedź. Rozumiem tę część. Chciałbym zaznaczyć, że może to być nieco trudne z zupełnie nową maszyną, ponieważ będziesz musiał napotkać problemy z modułami, które trzeba zbudować (takimi jak psycopg2, django-pylibmc-sasl). Ale kiedy już zainstalujesz wszystkie pliki "dev", to instalacja z pliku requirements.txt jest zdecydowanie drogą do zrobienia. –

+0

Widziałem to, co może pomóc ci w poruszaniu się po modułach, które trzeba zbudować: http://blip.tv/djangocon/taming-dependencies-with-pip-5582996 jego warto oglądać – Ctrlspc

+0

@DavidS nie możesz ich zainstalować zależności z pip? Mogę znaleźć oba z 'pip search'. Umieszczenie ich w pliku 'requirements.txt' oznacza mniej pracy dla nowych deweloperów/ustawień. –

9

To dlatego, że nawet nie powinno się przenosić virtualenvs do różnych lokalizacji w jednym systemie (jest to wsparcie przenoszenia, ale jest to eksperymentalne), nie mówiąc już o tym, od jednego systemu do drugiego. Utwórz nowy virtualenv:

  • Install virtualenv na innym systemie
  • Get requirements.txt, albo pisząc jedną lub przechowując wyjście pip freeze (i edycji wyjście)
  • Przenieś się do requirements.txt drugi system, utwórz nowy virtualenv i zainstaluj biblioteki przez pip install -r requirements.txt.
  • sklonować repozytorium git na innym systemie

Dla bardziej zaawansowanych użytkowników, można utworzyć skrypt ładowania, który zawiera virtualenv + niestandardowy kod założyć coś innego.

EDYTOWANIE: posiadanie katalogu głównego virtualenv i katalogu głównego repozytorium w tym samym katalogu wydaje mi się bardzo złym pomysłem. Umieść repozytorium w katalogu wewnątrz rootu virtualenv lub umieść je w całkowicie oddzielnych drzewach.Nie tylko unikasz git (słusznie - zazwyczaj, wszystko, co nie jest śledzone przez git, jest dobrą grą do usunięcia), narzekając na istniejące pliki, możesz także użyć virtualenv dla wielu repozytoriów i uniknąć kolizji nazw.

+0

Tak jak uwaga, nie ruszam się ... Tworzę nowy virtualenv. Zmienię oryginalne pytanie, aby było to bardziej jasne. –

+0

Także ... co robisz z klonowaniem? Dla mnie git narzeka, ponieważ folder docelowy nie jest pusty. Wygląda na to, że odpowiedź Matta B to rozwiązuje, ale ty nie. Czy może czegoś brakuje? –

+0

@DavidS zwykle chcesz utworzyć virtualenv * wewnątrz * każdego ze swoich projektów, tj. Wewnątrz sklonowanego katalogu. W ten sposób możesz mieć oddzielne, odizolowane virtualenvs dla wielu projektów na tym samym komputerze. –

14

Jedynym workflow powinien czego potrzebujesz to:

git clone repo_url somedir 
cd somedir 
virtualenv <name of environment directory> 
source <name of environment directory>/bin/activate 
pip install -r requirements.txt 

ta zakłada, że ​​prowadzony pip freeze > requirements.txt (gdy venv jest aktywna) notować wszystkie-pip-instalowane virtualenv biblioteki i sprawdził go w repo.

Powiązane problemy