Virtualenv ที่มีอยู่สามารถอัพเกรดได้อย่างงดงามหรือไม่


96

ฉันมี Virtualenv ที่สร้างขึ้นสำหรับ Python 2.5 และต้องการ "อัปเกรด" เป็น Python 2.6

นี่คือวิธีการตั้งค่าในตอนแรก:

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

ตอนนี้ฉันเรียกใช้ Virtualenv ในไดเร็กทอรีเดียวกันเพื่ออัปเกรด:

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 เริ่มต้นยังคงเป็น 2.5 แม้ว่าฉันจะระบุ 2.6 ได้ด้วยก็ตาม มีวิธีใดบ้างที่จะลบ 2.5 ทั้งหมดและให้ 'bin / python' ชี้เป็น 2.6 แทน?

คำตอบ:


64

คุณสามารถใช้ Python 2.6 Virtualenv เพื่อ "revirtual" ไดเร็กทอรีที่มีอยู่ คุณจะต้องติดตั้งโมดูลทั้งหมดที่คุณติดตั้งใหม่ ฉันมักจะมีไดเร็กทอรีเสมือนสำหรับการพัฒนาโมดูลและ Virtualenv เป็นไดเร็กทอรีเดียวกันกับ Python หลายเวอร์ชันและใช้งานได้ดี :)


1
ขอบคุณ! ฉันลองใช้วิธีของคุณแล้วและพบว่ามีการอัปเดตสคริปต์ "เปิดใช้งาน" แต่เวอร์ชันเก่ายังคงอยู่ (โปรดดูคำถามที่แก้ไข) คุณสามารถยกตัวอย่างได้หรือไม่?
Matt Norris

13
คุณสามารถลบ bin / python ที่เรียกใช้งานได้ใน Virtualenv ก่อนที่จะรัน Virtualenv อีกครั้งด้วย python 2.6
Carl Meyer

9
คุณสามารถทำให้มันใช้งานได้ - แต่ทำไมล่ะ? ความน่าสนใจที่ยิ่งใหญ่virtualenvคือการสร้างสภาพแวดล้อมหลามที่ทำซ้ำได้ง่ายและราคาถูก ทำไมต้องยุ่งกับสิ่งหนึ่งและไม่แน่ใจว่าคุณได้แก้ไขทุกอย่างแล้วหรือคุณสามารถทำซ้ำได้อีกครั้งหรือคุณกำลังรบกวนสภาพแวดล้อมการผลิตของคุณเมื่อคุณสามารถสร้างใหม่ที่สะอาดได้
Ned Deily

9
@Ned: Virtualenv ไม่ได้สร้างสภาพแวดล้อมที่ทำซ้ำได้มันทำให้สภาพแวดล้อมที่แยกได้ ในการสร้างซ้ำคุณต้องติดตั้งทุกอย่างในลักษณะเดียวกัน Virtualenv ไม่เพียงพอสำหรับสิ่งนั้น zc.buildout ดีกว่าที่นั่น
Lennart Regebro

1
@Ned: จุดที่ถ่าย; นี่คือสภาพแวดล้อมการพัฒนาที่ฉันกำลังทำงานอยู่ฉันต้องการเก็บไว้ใน 2.5 เว้นแต่ฉันจะต้องทำ 2.6 อย่างแน่นอน ความต้องการดังกล่าวเกิดขึ้นดังนั้นฉันจึงอยากรู้ว่าคุณสามารถอัปเกรดสภาพแวดล้อมแบบแยกเพื่อดูผลกระทบกับโค้ดของคุณได้หรือไม่โดยไม่ต้องสร้างและคัดลอก / วางไดเร็กทอรีไปยัง env ใหม่
Matt Norris

25

ใน Python 3.3+ venvรองรับ - อัพเกรดแฟล็ก

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

การใช้งาน:

python -m venv --upgrade YOUR_VENV_DIRECTORY

ฉันเพิ่งอัปเกรด venv จาก Python 3.7.x เป็น 3.8 ในหลายโครงการโดยไม่มีปัญหาใด ๆ


1
"สมมติว่า Python ได้รับการอัปเกรดแล้ว" ... น่าเสียดายที่ดูเหมือนว่าถ้าระบบของฉันpython3ชี้ไปที่ 3.6 ฉันไม่สามารถสร้างpython3ให้ชี้ไปที่ 3.7 ใน venv ของฉันได้
joel

4

คุณควรสร้างใหม่virtualenvโดยใช้python2.6จากนั้นหลังจากเปิดใช้งาน env ใหม่แล้วให้ใช้python2.6และeasy_installเพื่อติดตั้งแพ็คเกจไซต์เวอร์ชันใหม่ที่คุณต้องการ ระวังว่าชื่อพา ธ ไปยังvirtualenvเดินสายไปยังไฟล์ต่างๆภายในสภาพแวดล้อมดังนั้นเมื่อคุณพร้อมที่จะเปลี่ยนไปใช้ให้เปลี่ยนสคริปต์เริ่มต้นของคุณและคณะเพื่ออ้างถึงvirualenvเส้นทางใหม่หรือระมัดระวังในการคัดลอกไปยัง ไดเร็กทอรีเก่าและแก้ไขชื่อพา ธ ภายใน


3

ติดตั้ง Python ตัวที่สองบน CentOS

  1. ดาวน์โหลด python
  2. ติดตั้งให้แตกต่างกันในท้องถิ่น

    configure --prefix=/opt/virtualenv/python 
    make && make install
    
  3. สร้าง env เสมือนโดยใช้ python ใหม่

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

    หมายเหตุ: หากจำเป็นสามารถทำได้กับผู้ใช้รายอื่น

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
    
  4. สร้าง env เสมือน:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
    
  5. ติดตั้ง pip ด้วย python 2.7 (ภายใน Virtualenv)

    easy_install pip 
    

0

หากคุณใช้ OS X ให้ลองทำเช่นนี้หากคุณต้องการอัปเกรด Python เป็นเวอร์ชันที่เพิ่มขึ้นเล็กน้อย (เช่น 2.7.6 ถึง 2.7.8) ในขณะที่ทำให้ไลบรารีของบุคคลที่สามทำงานได้

มันใช้ได้กับฉันในสภาพแวดล้อมเสมือนจริง 5 แบบที่ติดตั้ง Django

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.