Mam dwie gałęzie, rozwój i produkcję. Każdy ma zależności, z których niektóre są różne. Rozwój wskazuje na zależności, które same się rozwijają. Podobnie do produkcji. Muszę wdrożyć w Heroku, które oczekuje zależności każdej gałęzi w jednym pliku o nazwie „Requirements.txt”.
Jaki jest najlepszy sposób organizacji?
O czym myślałem:
- Utrzymuj osobne pliki wymagań, po jednym w każdej gałęzi (muszą przetrwać częste połączenia!)
- Powiedz Heroku, którego pliku wymagań chcę użyć (zmienna środowiskowa?)
- Pisanie skryptów wdrażania (tworzenie gałęzi tymczasowej, modyfikowanie pliku wymagań, zatwierdzanie, wdrażanie, usuwanie gałęzi tymczasowej)
python
deployment
heroku
requirements.txt
Charles R.
źródło
źródło
Odpowiedzi:
Możesz kaskadować swoje pliki wymagań i użyć flagi „-r”, aby powiedzieć pipowi, aby zawarł zawartość jednego pliku w innym. Możesz podzielić swoje wymagania na modułową hierarchię folderów w następujący sposób:
Zawartość plików wyglądałaby następująco:
common.txt:
dev.txt:
prod.txt:
Poza Heroku możesz teraz konfigurować takie środowiska:
lub
Ponieważ Heroku szuka konkretnie pliku „Requirements.txt” w katalogu głównym projektu, powinien po prostu odtworzyć kopię lustrzaną, na przykład:
wymagania.txt:
źródło
base.txt
pakiet zawierający 3 pakiety idev.txt
1 pakiet (i-r base.txt
). WSZYSTKIE 4 pakiety są zainstalowane w moim środowisku wirtualnym. Chcę teraz zainstalować piąty pakiet i wyświetlić go w bazie, a nie w wersji deweloperskiej, jak mam to zrobić? Jasne, mogę to zainstalować,pip freeze > base.txt
ale to NIE rozwiązuje problemu. Następnie umieszcza czwartą zależność dev w bazie, której nie chcę.Obecnie realną opcją, która nie istniała, kiedy opublikowano oryginalne pytanie i odpowiedź, jest użycie pipenv zamiast pip do zarządzania zależnościami.
Dzięki pipenv ręczne zarządzanie dwoma oddzielnymi plikami wymagań, takimi jak pip, nie jest już konieczne, a zamiast tego pipenv samodzielnie zarządza pakietami programistycznymi i produkcyjnymi za pośrednictwem interakcji w wierszu poleceń.
Aby zainstalować pakiet do użytku w produkcji i rozwoju:
Aby zainstalować pakiet tylko dla środowiska programistycznego:
Za pomocą tych poleceń pipenv przechowuje i zarządza konfiguracją środowiska w dwóch plikach (Pipfile i Pipfile.lock). Bieżący pakiet kompilacji Heroku dla Pythona natywnie obsługuje pipenv i konfiguruje się z Pipfile.lock, jeśli istnieje, zamiast wymagania.txt.
Zobacz odsyłacz pipenv, aby uzyskać pełną dokumentację narzędzia.
źródło
Jeśli wymagasz, aby móc przełączać się między środowiskami na tej samej maszynie, może być konieczne utworzenie różnych folderów virtualenv dla każdego środowiska, na które chcesz się przełączyć.
źródło