Bisakah virtualenv yang ada ditingkatkan dengan baik?

96

Saya memiliki virtualenv yang dibuat untuk Python 2.5 dan ingin "memutakhirkannya" ke Python 2.6.

Berikut ini cara awalnya disiapkan:

virtualenv --no-site-packages -p python2.5 myenv

Saya sekarang menjalankan virtualenv di direktori yang sama untuk meningkatkan:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

Python default masih 2.5, meskipun saya juga bisa menentukan 2.6. Apakah ada cara untuk menghapus 2.5 seluruhnya dan sebagai gantinya 'bin / python' menunjuk ke 2.6?

Matt Norris
sumber

Jawaban:

64

Anda dapat menggunakan virtualenv Python 2.6 untuk "menghidupkan kembali" direktori yang ada. Anda harus menginstal ulang semua modul yang Anda instal. Saya sering memiliki direktori virtual untuk mengembangkan modul, dan virtualenv direktori yang sama dengan banyak versi Python, dan berfungsi dengan baik. :)

Lennart Regebro
sumber
1
Terima kasih! Saya mencoba metode Anda dan melihat bahwa skrip 'aktifkan' diperbarui, tetapi versi lama tetap ada (lihat pertanyaan yang direvisi). Apakah Anda dapat memberikan contoh?
Matt Norris
13
Anda bisa menghapus bin / python yang dapat dieksekusi di virtualenv sebelum menjalankan kembali virtualenv dengan python 2.6.
Carl Meyer
9
Nah, Anda bisa membuatnya berhasil - tapi mengapa? Daya tarik besar virtualenvadalah membuatnya dengan mudah dan murah membuat lingkungan python yang dapat direproduksi. Mengapa mengacau dengan satu dan tidak yakin Anda telah memperbaiki semuanya atau bahwa Anda dapat mereproduksinya lagi atau bahwa Anda mengganggu lingkungan produksi ketika Anda dapat membuat yang baru dan bersih?
Ned Deily
9
@Ned: Virtualenv tidak membuat lingkungan yang dapat direproduksi, itu membuat lingkungan yang terisolasi. Untuk mereproduksinya, Anda juga perlu menginstal semuanya dengan cara yang sama, virtualenv tidak cukup untuk itu. zc.buildout lebih baik di sana.
Lennart Regebro
1
@Ned: Poin diambil; ini adalah lingkungan pengembangan tempat saya bekerja. Saya ingin mempertahankannya di 2.5 kecuali saya benar-benar perlu melakukan 2.6. Kebutuhan itu muncul, jadi saya ingin tahu apakah Anda dapat memutakhirkan lingkungan yang terisolasi untuk melihat efek pada kode Anda, tanpa harus membangun kembali dan menyalin / menempel direktori ke env baru.
Matt Norris
25

Dalam Python 3.3+ venv mendukung --upgrade flag

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Pemakaian:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Saya baru saja meningkatkan venv saya dari Python 3.7.x menjadi 3.8 pada beberapa proyek tanpa masalah apa pun.

Vlad Bezden
sumber
1
"dengan asumsi Python telah ditingkatkan di tempat" ... sayangnya ini tampaknya berarti bahwa jika sistem saya python3menunjuk ke 3.6, saya tidak dapat membuat get python3to point ke 3.7 di venv saya
joel
4

Anda harus membuat virtualenvpenggunaan baru python2.6dan kemudian, setelah mengaktifkan env baru, gunakan its python2.6dan its easy_installuntuk menginstal versi baru dari paket situs apa pun yang Anda butuhkan. Berhati-hatilah karena nama jalur ke jalan virtualenvsudah tertanam ke dalam berbagai file di dalam lingkungan, jadi, saat Anda siap untuk beralih ke sana, ubah skrip startup Anda dan lain-lain untuk merujuk ke virualenvjalur baru atau berhati-hatilah saat menyalinnya ke direktori lama dan memodifikasi nama jalur di dalamnya.

Ned Deily
sumber
3

Instal Python kedua di CentOS

  1. unduh python
  2. instal ke diff lokal

    configure --prefix=/opt/virtualenv/python 
    make && make install
    
  3. buat virtual env menggunakan new python

    virtualenv /opt/virtualenv --python=/opt/python276/bin/python
    

    catatan: jika perlu, ini dapat dilakukan dengan pengguna lain

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
    
  4. Buat virtual env:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
    
  5. Instal pip dengan python 2.7 (di dalam virtualenv)

    easy_install pip 
    
Xoroz
sumber
0

Jika Anda menggunakan OS X, coba ini jika Anda ingin memutakhirkan Python ke versi yang ditingkatkan kecil (mis. 2.7.6 hingga 2.7.8) sambil tetap menjaga pustaka pihak ketiga tetap berfungsi.

Ini bekerja untuk saya di 5 lingkungan virtual yang berbeda dengan Django terpasang.

Rockallite
sumber