Saya telah membuat folder dan menginisialisasi instance virtualenv di dalamnya.
$ mkdir myproject
$ cd myproject
$ virtualenv env
Ketika saya menjalankan (env)$ pip freeze
, ini menunjukkan paket yang diinstal sebagaimana mestinya.
Sekarang saya ingin mengganti nama myproject/
menjadi project/
.
$ mv myproject/ project/
Namun, sekarang ketika saya berlari
$ . env/bin/activate
(env)$ pip freeze
katanya pip tidak diinstal. Bagaimana cara saya mengganti nama folder proyek tanpa merusak lingkungan?
python
ubuntu
virtualenv
pip
Riley Watkins
sumber
sumber
Jawaban:
Anda perlu menyesuaikan instalasi Anda untuk menggunakan jalur relatif.
virtualenv
menyediakan untuk ini dengan--relocatable
opsi. Dari dokumen :sumber
grep -EIr '\Wold_venv_name\W' /path/to/new_venv
akan membantu menemukan shabang yang menggunakan venv lama, tetapi bukan verifikasi lengkap dari venv yang dipindahkan..project
file virtualenvwrapper , yang berisi lintasan ke kode sumber yang bergantung pada virtualenv, dengan asumsi Anda menggunakan virutalenvwrapper dan juga mengganti nama dir proyek agar sesuai dengan virtualenv baru.Saya percaya "mengetahui mengapa" lebih penting daripada "mengetahui bagaimana" . Jadi, inilah pendekatan lain untuk memperbaikinya.
Ketika Anda menjalankan
. env/bin/activate
, itu benar-benar menjalankan perintah berikut (menggunakan/tmp
misalnya):Namun, Anda baru saja mengganti nama
myproject
menjadiproject
, sehingga perintah itu gagal dieksekusi. Itulah sebabnya ia mengatakanpip is not installed
, karena Anda belum menginstalpip
di lingkungan sistem global dan virtualenv Andapip
tidak bersumber dengan benar.Jika Anda ingin memperbaikinya secara manual, ini caranya:
Dengan editor favorit Anda seperti Vim, modifikasi
/tmp/project/env/bin/activate
biasanya di baris 42:VIRTUAL_ENV='/tmp/myproject/env'
=>VIRTUAL_ENV='/tmp/project/env'
Ubah
/tmp/project/env/bin/pip
pada baris 1:#!/tmp/myproject/env/bin/python
=>#!/tmp/project/env/bin/python
Setelah itu, aktifkan
env
kembali lingkungan virtual Anda , dan Anda akan melihat bahwa Andapip
telah kembali lagi.sumber
grep -iHnR venv-name /path/to/venv-name | grep -v "^Binary file" | grep -i venv-name
. Bahkan, saya perhatikan bahwa dalam salah satu contoh Django saya, banyak paket memiliki "path to Python sh-bang" di dalamnya.virtualenv
. Mungkin ada beberapa use case yang tidak saya gunakan dan jadi tidak menemui masalah.virtualenv
. Untuk mengatasinya, saya mengedit header bash (apa namanya?) Dalamipython
file dan kemudian berfungsi dengan baik.CATATAN: Sebagai @jb. menunjukkan, solusi ini hanya berlaku untuk mudah (kembali) dibuat
virtualenv
. Jika lingkungan membutuhkan beberapa jam untuk menginstal solusi ini tidak dianjurkanVirtualvv sangat bagus karena mudah dibuat dan diubah; mereka membuat Anda tidak terkunci ke dalam satu konfigurasi. Jika Anda mengetahui persyaratan proyek, atau bisa mendapatkannya, Buat yang baru
virtualenv
:Buat
requirements.txt
file(env)$ pip freeze > requirements.txt
requirements.txt
file, periksaenv/lib/pythonX.X/site-packages
sebelum menghapus aslinyaenv
.Hapus yang ada
(env)
deactivate && rm -rf env
Buat yang baru
virtualenv
, aktifkan, dan instal persyaratanvirtualenv env && . env/bin/activate && pip install -r requirements.txt
Atau, gunakan virtualenvwrapper untuk membuat segalanya lebih mudah karena semua virtualenv disimpan di lokasi terpusat
sumber
pip install -r requirements.txt
butuh beberapa jam (kompilasi C-ekstensi pihak ketiga pada raspberry pi).virtualenv env && pip install -r requirements.txt
TIDAK akan menginstal persyaratan di lingkungan baru karena Anda tidak mengaktifkannyavirtualenv-wrapper
pengguna sendiri (yang otomatis diaktifkan saat pembuatan). Saya telah memperbarui jawaban saya untuk memasukkan pengaktifan denganvirtualenv
harapan menghindari kebingungan.Saya selalu menginstal virtualenvwrapper untuk membantu. Dari prompt shell:
Ada cara yang didokumentasikan dalam dokumen virtualenvwrapper - cpvirtualenv Inilah yang Anda lakukan. Pastikan Anda keluar dari lingkungan Anda dan kembali ke prompt shell. Ketik ini dengan nama yang diperlukan:
Dan kemudian, jika perlu:
Untuk membuka newenv Anda:
sumber
virtualenvwrapper
, bukan hanyavirtualenv
. Jawaban dari @ryankdwyer ini lebih baik.Anda dapat memperbaiki masalah Anda dengan mengikuti langkah-langkah ini:
$ virtualenv ..\path\renamed_directory
$ scripts/activate
$ pip freeze
untuk memverifikasi paket Anda sudah adasumber
--relocatable
, saya pikir solusi ini lebih baik daripada jawaban yang diterima. Sejauh ini, saya perhatikan bahwa banyak.pyc
file di_new_name_/lib/python2.7
masih merujuk_old_name_
. Namun, itu tampaknya tidak mempengaruhi cara kerja lingkungan saya. Mungkin satu-satunya solusi yang lebih baik adalah menggunakanvirtualenvwrapper
atau beberapa utilitas lain yang disebutkan di antara jawaban di sini. Setidaknya solusi ini tidak perlu menginstal program tambahan.Namun cara lain untuk melakukannya yang bekerja untuk saya berkali-kali tanpa masalah adalah virtualenv-clone :
sumber
(di dalam folder proyek)
Jangan lupa nonaktifkan dan aktifkan
sumber
sed -i "s|$old_dir|$new_dir|g" bin/*
sed -i '.original' 's/old_dir_name/new_dir_name/g' *
untuk macvirtualenv --relocatable ENV
bukan solusi yang diinginkan. Saya berasumsi kebanyakan orang menginginkan kemampuan untuk mengubah nama virtualenv tanpa efek samping jangka panjang.Jadi saya telah membuat alat sederhana untuk melakukan hal itu. Halaman proyek untuk virtualenv-mv menguraikannya sedikit lebih detail, tetapi pada dasarnya Anda dapat menggunakan
virtualenv-mv
seperti Anda akan menggunakan implementasi sederhanamv
(tanpa opsi).Sebagai contoh:
Harap dicatat bahwa saya baru saja meretas ini. Ini bisa pecah dalam keadaan yang tidak biasa (mis. Virtualenv yang dikaitkan) jadi harap berhati-hati (buat cadangan apa yang Anda tidak mampu kehilangan) dan beri tahu saya jika Anda mengalami masalah.
sumber