Virtualenv hiện có có thể được nâng cấp một cách duyên dáng không?


95

Tôi có một virtualenv được tạo cho Python 2.5 và muốn "nâng cấp" nó lên Python 2.6.

Đây là cách nó được thiết lập ban đầu:

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

Bây giờ tôi chạy virtualenv trong cùng một thư mục để nâng cấp:

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 mặc định vẫn là 2,5, mặc dù tôi cũng có thể chỉ định 2,6. Có cách nào để xóa hoàn toàn 2,5 và thay vào đó 'bin / python' trỏ đến 2,6 không?

Câu trả lời:


64

Bạn có thể sử dụng Python 2.6 virtualenv để "đánh thức" thư mục hiện có. Bạn sẽ phải cài đặt lại tất cả các mô-đun bạn đã cài đặt. Tôi thường có một thư mục ảo để phát triển một mô-đun và virtualenv cùng một thư mục với nhiều phiên bản Python và nó hoạt động tốt. :)


1
Cảm ơn! Tôi đã thử phương pháp của bạn và thấy rằng tập lệnh 'kích hoạt' được cập nhật, nhưng phiên bản cũ vẫn còn (vui lòng xem câu hỏi đã sửa đổi). Bạn có thể cung cấp một ví dụ?
Matt Norris,

13
bạn chỉ có thể xóa tệp thực thi bin / python trong virtualenv trước khi chạy lại virtualenv với python 2.6.
Carl Meyer,

9
Chà, bạn có thể làm cho nó hoạt động - nhưng tại sao? Điểm thu hút lớn của virtualenvnó là nó dễ dàng và rẻ tiền tạo ra môi trường có thể sinh sản được. Tại sao lại nhầm lẫn với một cái và không chắc rằng bạn đã sửa mọi thứ hoặc bạn có thể tái tạo lại nó hoặc bạn đang làm phiền môi trường sản xuất của mình khi bạn chỉ có thể tạo một cái mới sạch sẽ?
Ned Deily,

9
@Ned: Virtualenv không tạo ra các môi trường có thể tái tạo, nó tạo ra các môi trường bị cô lập. Để tái tạo chúng, bạn cũng cần cài đặt mọi thứ theo cùng một cách, virtualenv là không đủ cho điều đó. zc.buildout thì tốt hơn ở đó.
Lennart Regebro,

1
@Ned: Đã lấy điểm; đây là môi trường phát triển mà tôi đang làm việc. Tôi muốn giữ nó ở phiên bản 2.5 trừ khi tôi thực sự cần làm 2.6. Nhu cầu đó nảy sinh, vì vậy tôi tò mò liệu bạn có thể nâng cấp một môi trường biệt lập để xem các hiệu ứng trên mã của bạn mà không cần phải xây dựng lại và sao chép / dán các thư mục vào env mới hay không.
Matt Norris

25

Trong Python 3.3+ venv hỗ trợ - cờ nâng cấp

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

Sử dụng:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Tôi vừa nâng cấp venv của mình từ Python 3.7.x lên 3.8 trên một số dự án mà không gặp vấn đề gì.


1
"giả sử Python đã được nâng cấp tại chỗ" ... điều này thật không may có nghĩa là nếu hệ thống của tôi python3chỉ đến 3,6, tôi không thể tạo python3điểm đến 3,7 trong venv của mình
joel

4

Bạn nên tạo mới virtualenvbằng cách sử dụng python2.6và sau đó, sau khi kích hoạt env mới, sử dụng env python2.6và của nó easy_installđể cài đặt các phiên bản mới của bất kỳ gói trang web nào bạn cần. Hãy lưu ý rằng tên đường dẫn đến virtualenvđược hardwired thành các tệp khác nhau trong môi trường, vì vậy, khi bạn đã sẵn sàng chuyển sang nó, hãy thay đổi các tập lệnh khởi động của bạn và cộng sự để tham chiếu đến virualenvđường dẫn mới hoặc rất cẩn thận về việc sao chép nó sang thư mục cũ và sửa đổi tên đường dẫn bên trong nó.


3

Cài đặt Python thứ hai trên CentOS

  1. tải xuống python
  2. cài đặt để khác cục bộ

    configure --prefix=/opt/virtualenv/python 
    make && make install
    
  3. tạo env ảo bằng cách sử dụng python mới

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

    lưu ý: nếu cần nó có thể được thực hiện với một người dùng khác

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
    
  4. Tạo env ảo:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
    
  5. Cài đặt pip với python 2.7 (bên trong virtualenv)

    easy_install pip 
    

0

Nếu bạn đang sử dụng OS X, hãy thử điều này nếu bạn muốn nâng cấp Python lên phiên bản tăng nhẹ (ví dụ: 2.7.6 lên 2.7.8) trong khi vẫn giữ cho các thư viện của bên thứ ba hoạt động.

Nó hoạt động với tôi trên 5 môi trường ảo khác nhau với Django được cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.