Menyimpan direktori virtualenv di dalam git akan, seperti yang Anda catat, memungkinkan Anda untuk menyebarkan seluruh aplikasi dengan hanya melakukan klon git (plus menginstal dan mengkonfigurasi Apache / mod_wsgi). Salah satu masalah yang berpotensi signifikan dengan pendekatan ini adalah bahwa di Linux, path lengkap mendapat hard-coded dalam aktivasi venv, django-admin.py, easy_install, dan skrip pip. Ini berarti virtualenv Anda tidak akan sepenuhnya berfungsi jika Anda ingin menggunakan jalur yang berbeda, mungkin untuk menjalankan beberapa host virtual di server yang sama. Saya pikir situs web sebenarnya dapat bekerja dengan jalur yang salah dalam file-file itu, tetapi Anda akan memiliki masalah saat Anda mencoba menjalankan pip.
Solusinya, sudah diberikan, adalah untuk menyimpan informasi yang cukup di git sehingga selama penyebaran Anda dapat membuat virtualenv dan melakukan instalasi pip yang diperlukan. Biasanya orang lari pip freeze
untuk mendapatkan daftar lalu menyimpannya dalam file bernama requirement.txt. Itu bisa dimuat dengan pip install -r requirements.txt
. RyanBrady sudah menunjukkan bagaimana Anda dapat merangkai pernyataan penerapan dalam satu baris:
# before 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# after deprecation of some arguments in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
Secara pribadi, saya hanya meletakkan ini di skrip shell yang saya jalankan setelah melakukan git clone atau git pull.
Menyimpan direktori virtualenv juga membuatnya sedikit lebih sulit untuk menangani upgrade pip, karena Anda harus secara manual menambah / menghapus dan mengkomit file yang dihasilkan dari upgrade. Dengan file requirement.txt, Anda hanya perlu mengubah baris yang sesuai di requirement.txt dan menjalankannya kembali pip install -r requirements.txt
. Seperti yang sudah disebutkan, ini juga mengurangi "melakukan spam".