Apakah ada cara untuk memutakhirkan versi python yang digunakan dalam virtualenv (mis. Jika rilis bugfix keluar)?
Saya bisa pip freeze --local > requirements.txt
, lalu menghapus direktori dan pip install -r requirements.txt
, tetapi ini membutuhkan banyak instalasi ulang perpustakaan besar, misalnya numpy
, yang saya gunakan banyak.
Saya dapat melihat ini adalah keuntungan ketika melakukan upgrade dari, misalnya, 2.6 -> 2.7, tetapi bagaimana dengan 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Simon Walker
sumber
sumber
Jawaban:
Apakah kamu melihat ini? ? Jika saya belum salah mengerti jawaban itu, Anda dapat mencoba membuat virtualenv baru di atas yang lama. Anda hanya perlu tahu python mana yang akan menggunakan virtualenv Anda (Anda perlu melihat versi virtualenv Anda).
Jika virtualenv Anda diinstal dengan versi python yang sama dengan yang lama dan memutakhirkan paket virtualenv Anda bukan pilihan, Anda mungkin ingin membaca ini untuk menginstal virtualenv dengan versi python yang Anda inginkan.
EDIT
Saya telah menguji pendekatan ini (yang membuat virtualenv baru di atas yang lama) dan itu berhasil dengan baik untuk saya. Saya pikir Anda mungkin memiliki beberapa masalah jika Anda mengubah dari python 2.6 ke 2.7 atau 2.7 ke 3.x tetapi jika Anda hanya memutakhirkan dalam versi yang sama (tinggal di 2.7 seperti yang Anda inginkan) Anda seharusnya tidak memiliki masalah, karena semua paket disimpan dalam folder yang sama untuk kedua versi python (paket 2.7.x dan 2.7.y ada di dalam your_env / lib / python2.7 /).
Jika Anda mengubah versi virtualenv python, Anda harus menginstal semua paket lagi untuk versi itu (atau hanya menautkan paket yang Anda butuhkan ke folder paket versi baru, yaitu: your_env / lib / python_newversion / situs-paket)
sumber
virtualenv
di atas yang lama, dan ternyata berhasil. Saya memang harus menentukan-p
untuk mengarahkannya ke versi python yang tepat.Jika Anda menggunakan modul venv yang dilengkapi dengan Python 3.3+, itu mendukung
--upgrade
opsi. Per dokumen :sumber
venv
dan menolak untuk memperbaikinya dengan dasar bahwa "Anda bisa menggunakan virtualenv". EDIT: sebenarnya, itu berhasil! Itu juga menunjukkan pesan kesalahan tentang "ensurepip".python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
danbin/python3
masih tertaut kepython3.4
biner lama , dan saya harus mengatur tautan secara manual. Juga, apakah ada cara untuk menghapus versi python yang sekarang ketinggalan zaman?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
>> Saya mengerti apa artinya? Saya tidak melihat proses python aktif, tidak dapat memutakhirkan.python3.6 -m venv --upgrade ENV_DIR
agar berfungsi. Saya pikir saya masih harus memperbarui beberapa tautan simbolis diENV_DIR/bin
. Oleh karena itu, triknya adalah memperbarui dengan versi Python baru sementara versi lama masih diinstal.Diperbarui lagi: Metode berikut ini mungkin tidak berfungsi di versi virtualenv yang lebih baru. Sebelum Anda mencoba membuat modifikasi ke virtualenv lama, Anda harus menyimpan dependensi dalam file persyaratan (
pip freeze > requirements.txt
) dan membuat cadangannya di tempat lain. Jika terjadi kesalahan, Anda masih dapat membuat virtualenv baru dan menginstal dependensi lama di dalamnya (pip install -r requirements.txt
).Diperbarui: Saya mengubah jawaban 5 bulan setelah saya awalnya menjawab. Metode berikut ini lebih nyaman dan kuat.
Efek samping: itu juga memperbaiki
Symbol not found: _SSLv2_method
pengecualian ketika Anda melakukannyaimport ssl
di lingkungan virtual setelah memutakhirkan Python ke v2.7.8.Pemberitahuan: Saat ini, ini adalah untuk 2.7.x Python hanya .
Jika Anda menggunakan Homebrew Python di OS X, pertama
deactivate
semua virtualenv, kemudian tingkatkan Python:Jalankan perintah berikut (
<EXISTING_ENV_PATH>
adalah jalur lingkungan virtual Anda):Terakhir, buat kembali lingkungan virtual Anda:
Dengan melakukannya, file inti Python lama dan pustaka standar (plus
setuptools
danpip
) akan dihapus, sementara pustaka kustom dipasang disite-packages
dalamnya dipertahankan dan berfungsi, segera setelah mereka berada di Python murni. Perpustakaan biner mungkin atau mungkin tidak perlu diinstal ulang agar berfungsi dengan benar.Ini bekerja untuk saya di 5 lingkungan virtual dengan Django diinstal.
BTW, jika
./manage.py compilemessages
tidak berfungsi setelah itu, coba ini:sumber
bin/python
file.setuptools
danpip
diperlukan.<EXISTING_ENV_PATH>/.Python
karena itu merusak penciptaan virtualenv.rmvirtualenv <env_name>
dan akan menghapus semua dependensinya yang berjajar :) Lihat lebih lanjut di: virtualenvwrapper.readthedocs.io/en/latest/…Saya tidak dapat membuat virtualenv baru di atas yang lama. Tetapi ada alat dalam pip yang membuatnya jauh lebih cepat untuk menginstal ulang persyaratan menjadi venv baru. Pip dapat membangun masing-masing item dalam keperluan Anda.txt ke dalam paket roda, dan menyimpannya dalam cache lokal. Saat Anda membuat venv baru dan menjalankan instalasi pip di dalamnya, pip akan secara otomatis menggunakan roda prebuilt jika menemukannya. Pemasangan roda jauh lebih cepat daripada menjalankan setup.py untuk setiap modul.
~ / .Pip / pip.conf saya terlihat seperti ini:
Saya memasang roda (
pip install wheel
), lalu jalankanpip wheel -r requirements.txt
. Ini menyimpan roda yang dibangun di roda-dir di pip.conf saya.Sejak saat itu, setiap kali saya menginstal salah satu dari persyaratan ini, itu menginstal mereka dari roda, yang cukup cepat.
sumber
Cara memutakhirkan versi Python untuk proyek virtualenvwrapper yang ada dan tetap menggunakan nama yang sama
Saya menambahkan jawaban untuk siapa saja yang menggunakan virtualenvwrapper yang luar biasa dari Doug Hellmann khusus karena jawaban yang ada tidak melakukannya untuk saya.
Beberapa konteks:
python3 -m venv
, itu tidak mendukung lingkungan Python 2mkproject
yang menciptakan lingkungan virtual, membuat direktori proyek kosong, dan memasukkannya ke dalamnyaworkon
perintah virtualenvwrapper untuk mengaktifkan proyek apa pun terlepas dari versi PythonPetunjuk arah:
Katakanlah proyek Anda saat ini dinamai
foo
dan saat ini sedang menjalankan Python 2 (mkproject -p python2 foo
), meskipun perintahnya sama apakah meningkatkan dari 2.x ke 3.x, 3.6.0 ke 3.6.1, dll. Saya juga mengasumsikan Anda sedang dalam lingkungan virtual yang diaktifkan.1. Nonaktifkan dan hapus lingkungan virtual lama:
Perhatikan bahwa jika Anda telah menambahkan perintah khusus ke kait (mis.,
bin/postactivate
) Anda harus menyimpannya sebelum menghapus lingkungan.2. Simpan proyek nyata di direktori temp:
3. Buat lingkungan virtual baru (dan dir proyek) dan aktifkan:
4. Ganti dir proyek yang dihasilkan kosong dengan proyek nyata, ubah kembali ke dir proyek:
5. Instal ulang dependensi, konfirmasi versi Python baru, dll:
Jika ini adalah kasus penggunaan umum, saya akan mempertimbangkan membuka PR untuk menambahkan sesuatu seperti
$ upgradevirtualenv
/$ upgradeproject
ke virtualenvwrapper.sumber
Pendekatan ini selalu berhasil untuk saya:
Diambil dari:
sumber
Saya memindahkan direktori rumah saya dari satu mac ke mac lainnya (Mountain Lion ke Yosemite) dan tidak menyadari tentang kerusakan virtual sampai saya kehilangan laptop lama. Saya memiliki titik virtualenv ke Python 2.7 diinstal oleh
brew
dan karena Yosemite datang dengan Python 2.7, saya ingin memperbarui virtualenv saya ke sistem python. Ketika saya berlarivirtualenv
di atas direktori yang ada, saya mendapatkanOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
kesalahan. Dengan coba-coba, saya mengatasi masalah ini dengan menghapus beberapa tautan dan memperbaiki beberapa lagi secara manual. Inilah yang akhirnya saya lakukan (mirip dengan yang dilakukan @Rockalite, tetapi lebih sederhana):Setelah ini, saya bisa menjalankan virtualenv di atas direktori yang ada.
sumber
Pada OS X atau macOS menggunakan Homebrew untuk menginstal dan memutakhirkan Python3 saya harus menghapus tautan simbolis sebelum
python -m venv --upgrade ENV_DIR
bekerja.Saya menyimpan yang berikut ini di upgrade_python3.sh jadi saya akan mengingat berapa bulan dari sekarang ketika saya harus melakukannya lagi:
UPDATE: sementara ini tampaknya bekerja dengan baik pada awalnya, ketika saya menjalankan py.test itu memberikan kesalahan Pada akhirnya saya baru saja menciptakan kembali lingkungan dari file persyaratan.
sumber
py.test
tidak berfungsi karena `~ / .virtualenvs / myenv / bin / python3.7 bukan symlink, jadi tidak diperbarui.~/.virtualenvs/myenv/.Python
yang merupakan symlink.Jika Anda menggunakan
pipenv
, saya tidak tahu apakah mungkin untuk memutakhirkan lingkungan di tempat, tetapi setidaknya untuk peningkatan versi kecil tampaknya cukup pintar untuk tidak membangun kembali paket dari awal ketika menciptakan lingkungan baru. Misalnya, dari 3.6.4 ke 3.6.5:sumber
Saya hanya ingin mengklarifikasi, karena beberapa jawaban merujuk
venv
dan yang lain merujukvirtualenv
.Penggunaan
-p
atau--python
bendera didukung padavirtualenv
, tetapi tidak padavenv
. Jika Anda memiliki lebih dari satu versi Python dan Anda ingin menentukan yang mana untuk dibuatvenv
, lakukan di baris perintah, seperti ini:Anda tentu saja dapat memutakhirkan
venv
seperti yang ditunjukkan orang lain, tetapi itu mengasumsikan Anda telah memutakhirkan Python yang digunakan untuk membuatnyavenv
di tempat pertama. Anda tidak dapat memutakhirkan ke versi Python yang belum Anda miliki di sistem Anda di suatu tempat, jadi pastikan untuk mendapatkan versi yang Anda inginkan, pertama, lalu buat semua vv yang Anda inginkan darinya.sumber
Langkah 1: Bekukan persyaratan & ambil cadangan env yang ada
Langkah 2: Instal Python 3.7 & aktifkan lingkungan virutal
Langkah 3: Instal persyaratan
sumber
Untuk semua orang yang memiliki masalah
Anda harus menginstal python3.6-venv
sumber