Saya memiliki dua cabang, Pengembangan dan Produksi. Masing-masing memiliki dependensi, beberapa di antaranya berbeda. Pengembangan menunjuk ke dependensi yang dalam pengembangan itu sendiri. Begitu juga untuk Produksi. Saya perlu menerapkan ke Heroku yang mengharapkan ketergantungan masing-masing cabang dalam satu file yang disebut 'requirement.txt'.
Apa cara terbaik untuk mengatur?
Apa yang saya pikirkan:
- Pertahankan file persyaratan terpisah, satu di setiap cabang (harus bertahan dari penggabungan yang sering!)
- Beri tahu Heroku file persyaratan mana yang ingin saya gunakan (variabel lingkungan?)
- Tulis skrip penerapan (buat cabang temp, ubah file persyaratan, komit, terapkan, hapus cabang temp)
python
deployment
heroku
requirements.txt
Charles R.
sumber
sumber
Jawaban:
Anda dapat menurunkan file persyaratan Anda dan menggunakan tanda "-r" untuk memberi tahu pip agar menyertakan konten satu file di dalam file lain. Anda dapat memecah kebutuhan Anda menjadi hierarki folder modular seperti ini:
Konten file akan terlihat seperti ini:
common.txt:
dev.txt:
prod.txt:
Di luar Heroku, Anda sekarang dapat mengatur lingkungan seperti ini:
atau
Karena Heroku secara khusus mencari "Requirement.txt" di root proyek, Heroku seharusnya hanya mencerminkan prod, seperti ini:
persyaratan.txt:
sumber
base.txt
dengan 3 paket di dalamnya, dandev.txt
dengan 1 paket di dalamnya (dan-r base.txt
). SEMUA 4 paket diinstal di lingkungan virtual saya. Sekarang saya ingin menginstal paket ke-5 dan mendaftarnya di base, BUKAN di dev, bagaimana cara melakukannya? Tentu, saya dapat menginstalnya danpip freeze > base.txt
itu TIDAK menyelesaikan masalah. Ini kemudian menempatkan ketergantungan dev ke-4 di basis yang tidak saya inginkan.Opsi yang layak saat ini yang tidak ada saat pertanyaan dan jawaban asli diposting adalah menggunakan pipenv alih-alih pip untuk mengelola dependensi.
Dengan pipenv, mengelola dua file persyaratan terpisah secara manual seperti dengan pip tidak lagi diperlukan, dan sebagai gantinya pipenv mengelola paket pengembangan dan produksi itu sendiri melalui interaksi pada baris perintah.
Untuk menginstal paket untuk digunakan dalam produksi dan pengembangan:
Untuk menginstal paket hanya untuk lingkungan pengembangan:
Melalui perintah tersebut, pipenv menyimpan dan mengelola konfigurasi lingkungan dalam dua file (Pipfile dan Pipfile.lock). Buildpack Python Heroku saat ini secara native mendukung pipenv dan akan mengonfigurasi dirinya sendiri dari Pipfile.lock jika ada, bukan Requirement.txt.
Lihat tautan pipenv untuk dokumentasi lengkap alat tersebut.
sumber
Jika kebutuhan Anda adalah untuk dapat beralih antar lingkungan pada mesin yang sama, mungkin perlu membuat folder virtualenv yang berbeda untuk setiap lingkungan yang Anda perlukan untuk beralih.
sumber