Struktur direktori macam apa yang harus diikuti saat menggunakan virtualenv
? Misalnya, jika saya sedang membangun aplikasi WSGI dan membuat virtualenv bernama foobar
saya akan mulai dengan struktur direktori seperti:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Setelah lingkungan ini dibuat, di mana satu tempat akan menjadi miliknya:
- file python?
- file statis (gambar / dll)?
- paket "khusus", seperti yang tersedia secara online tetapi tidak ditemukan di toko keju?
dalam kaitannya dengan virtualenv
direktori?
(Asumsikan saya sudah tahu ke mana direktori virtualenv itu sendiri harus pergi .)
python
project
virtualenv
Phillip B Oldham
sumber
sumber
Jawaban:
virtualenv
menyediakan instance interpreter python, bukan instance aplikasi. Anda biasanya tidak akan membuat file aplikasi Anda dalam direktori yang berisi Python default sistem, juga tidak ada persyaratan untuk menemukan aplikasi Anda dalam direktori virtualenv.Misalnya, Anda mungkin memiliki proyek di mana Anda memiliki beberapa aplikasi menggunakan virtualenv yang sama. Atau, Anda mungkin menguji aplikasi dengan virtualenv yang nantinya akan digunakan dengan sistem Python. Atau, Anda mungkin mengemas aplikasi mandiri di mana mungkin masuk akal untuk memiliki direktori virtualenv yang terletak di suatu tempat di dalam direktori aplikasi itu sendiri.
Jadi, secara umum, saya rasa tidak ada satu jawaban yang benar untuk pertanyaan itu. Dan, hal baiknya
virtualenv
adalah ia mendukung banyak kasus penggunaan yang berbeda: tidak perlu ada satu cara yang benar.sumber
virtualenvwrapper
) adalah ketika saya ingin editpostactivate
danpostdeactivate
kait.virtualenv
direktori, tetapi membandingkanvirtualenv
dengan sistem python tidak membantu, karena tujuannyavirtualenv
adalah untuk memperbaiki dependensi yang rusak dan mengisolasi proyek sehingga mereka dapat menggunakan versi paket yang berbeda dan bahkan versi python (saya menyadari ini ditulis sebelumnya -python3). Mengizinkan aplikasi untuk berbagivirtualenv
menggunakanvirtualenv
seolah-olah itu adalah python sistem, membuat aplikasi rentan terhadap masalah yang sama yang dirancang untuk diselesaikan oleh virtualenv.There should be one obvious way to do it
; logisnya seharusnya 1: 1Jika Anda hanya memiliki beberapa proyek sesekali, tidak ada yang menghentikan Anda untuk membuat virtualenv baru untuk masing-masing proyek, dan meletakkan paket Anda tepat di dalam:
Keuntungan dari pendekatan ini adalah Anda selalu bisa yakin untuk menemukan skrip pengaktifan yang dimiliki proyek di dalamnya.
Jika Anda memutuskan untuk sedikit lebih terorganisir, Anda harus mempertimbangkan untuk meletakkan semua virtualenv Anda ke dalam satu folder, dan beri nama masing-masing setelah proyek yang Anda kerjakan.
Dengan cara ini Anda selalu dapat memulai kembali dengan virtualenv baru jika terjadi kesalahan, dan file proyek Anda tetap aman.
Keuntungan lainnya adalah beberapa project Anda dapat menggunakan virtualenv yang sama, jadi Anda tidak perlu melakukan penginstalan yang sama berulang kali jika Anda memiliki banyak dependensi.
Untuk pengguna yang secara teratur harus menyiapkan dan menghancurkan virtualenv, masuk akal untuk melihat virtualenvwrapper.
Dengan virtualenvwrapper Anda bisa
Anda tidak perlu lagi khawatir tentang di mana virtualenv Anda saat mengerjakan proyek "foo" dan "bar":
Beginilah cara Anda mulai mengerjakan proyek "foo":
Kemudian beralih ke proyek "bar" sesederhana ini:
Cukup rapi, bukan?
sumber
virtualenvwrapper
. Ini dengan rapi mengabstraksi virtualenv sambil tetap memberi Anda semua manfaat.venv/
direktori pada tingkat yang sama dengan proyekBASE_DIR
.Karena virtualenv tidak dapat direlokasi, menurut saya itu adalah praktik yang buruk untuk menempatkan file proyek Anda di dalam direktori virtualenv. Virtualenv itu sendiri adalah artefak pengembangan / penerapan yang dihasilkan (semacam file .pyc), bukan bagian dari proyek; seharusnya mudah untuk menghapusnya dan membuatnya kembali kapan saja, atau membuat yang baru di host penerapan baru, dll.
Banyak orang pada kenyataannya menggunakan virtualenvwrapper , yang menghapus virtualenvs sebenarnya dari kesadaran Anda hampir sepenuhnya, menempatkan semuanya berdampingan di $ HOME / .virtualenvs secara default.
sumber
virtualenv --relocatable myvenv
lihat stackoverflow.com/a/6628642/1335793 hanya karena Anda tidak bisa berarti Anda harus melakukannya.Jika Anda memberikan proyek Anda
setup.py
, pip dapat mengimpornya dari kontrol versi secara langsung.Lakukan sesuatu seperti ini:
Ini
-e
akan memasukkan proyekmyproject/src
, tetapi menautkannya kemyproject/lib/pythonX.X/site-packages/
, sehingga setiap perubahan yang Anda buat akan segera diambil dalam modul yang mengimpornya dari lokal Andasite-packages
. The#egg
bit memberitahu pip nama apa yang ingin Anda berikan kepada paket telur itu menciptakan untuk Anda.Jika Anda tidak menggunakan
--no-site-packages
, berhati-hatilah untuk menentukan bahwa Anda ingin pip diinstal ke virtualenv dengan-E
opsisumber