วิธีการจำลอง virtualenv


130

ฉันมี virtualenv ที่มีอยู่แล้วด้วยแพ็คเกจจำนวนมาก แต่ Django เวอร์ชันเก่า

สิ่งที่ฉันต้องการทำคือทำซ้ำสภาพแวดล้อมนี้ดังนั้นฉันจึงมีสภาพแวดล้อมอื่นที่มีแพ็คเกจเดียวกันแน่นอนแต่เป็น Django เวอร์ชันใหม่กว่า ฉันจะทำสิ่งนี้ได้อย่างไร


3
ฉันจะตรึงความต้องการทั้งหมดของคุณลงในไฟล์ 'requirements.txt' และสร้าง virtualenv อีกอันและเรียกใช้ pip install.txt requirements
Calvin Cheng

หากเวอร์ชันไพ ธ อนของสภาพแวดล้อมเสมือนที่คุณต้องการคัดลอกนั้นแตกต่างจากสภาพแวดล้อมของไพ ธ อนที่เป็นค่าเริ่มต้นคุณสามารถตั้งค่าสภาพแวดล้อมใหม่ได้virtualenv -p /path/to/older/venv/bin/python new_venvจากนั้นใช้สิ่งrequirements.txtที่คุณสร้างขึ้นหลังจากนั้นpip freeze
GiriB

คำตอบ:


183

วิธีที่ง่ายที่สุดคือใช้ pip เพื่อสร้างไฟล์ข้อกำหนด ไฟล์ข้อกำหนดนั้นเป็นไฟล์ที่มีรายการแพ็กเกจหลามทั้งหมดที่คุณต้องการติดตั้ง (หรือติดตั้งแล้วในกรณีของไฟล์ที่สร้างโดย pip) และเวอร์ชันที่ใช้งานอยู่

ในการสร้างไฟล์ข้อกำหนดให้ไปที่ virtualenv ดั้งเดิมของคุณแล้วเรียกใช้:

pip freeze > requirements.txt

สิ่งนี้จะสร้างไฟล์requirements.txtให้คุณ หากคุณเปิดไฟล์นั้นในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบคุณจะเห็นสิ่งต่อไปนี้:

Django==1.3
Fabric==1.0.1
etc...

ตอนนี้แก้ไขบรรทัดที่บอกว่าDjango==x.xจะพูดDjango==1.3(หรือรุ่นที่คุณต้องการติดตั้งใน virtualenv ใหม่ของคุณ)

สุดท้ายเปิดใช้งานvirtualenv ใหม่ของคุณและเรียกใช้:

pip install -r requirements.txt

และ pip ​​จะดาวน์โหลดและติดตั้งโมดูลหลามทั้งหมดที่ระบุไว้ในไฟล์requirements.txtของคุณโดยอัตโนมัติตามที่คุณระบุ!


3
ขอบคุณ! ในขณะที่ googling ฉันพบว่าหน้าเว็บที่มีเสียงดังยุ่งเหยิงและสับสนมาก ... ทางออกของคุณสะอาดและเรียบง่าย ... มันทำให้วันของฉัน;)
dolma33

ถ้าฉันคัดลอกโฟลเดอร์แล้ววางลงในเครื่องอื่น มันจะทำงานอย่างไร สมมติว่าการพึ่งพา apt-get นั้นได้รับการแก้ไขแล้ว
Tales Pádua

อันที่จริงมันไม่ได้เป็นในขณะที่ฉันกำลังหาตอนนี้
horcle_buzz

ฉันเห็นข้อความมากมายCould not find a version that satisfies the requirement a_package=#.#.#ฉันสามารถแก้ไขได้อย่างง่ายดายหรือไม่ ฉันลบบรรทัดหรือเปลี่ยนความเท่าเทียมกันเป็นอสมการ
เปลี่ยนแปลงโลก

ใช้งานได้pyenvดีเช่นกัน คำตอบที่ยอดเยี่ยม
Leonard

29

ตัวเลือกอื่นคือใช้virtualenv-cloneแพ็คเกจ:

สคริปต์สำหรับการโคลเวอร์ virtualenv ที่ไม่สามารถเปลี่ยนตำแหน่งได้


สวัสดีฉันคิดว่าสิ่งนี้จะช่วยให้ฉันสามารถคัดลอกสภาพแวดล้อมหลามทั้งหมดลงในไฟล์ แล้วฉันก็จะต้องโหลดไฟล์ในคอมพิวเตอร์เครื่องใหม่ / OS และฉันจะได้รับแพคเกจเว็บไซต์ของฉันทั้งหมดที่ติดตั้งกลับ
aceminer

2
"virtualenv-clone source / target /" ทำงานได้อย่างยอดเยี่ยม!
ajankuv

ตรวจสอบให้แน่ใจว่าเราติดตั้งvirtualenv-cloneหลังจากเปิดใช้งาน virtualenv
4givN

15

virtualenvwrapperจัดเตรียมคำสั่งเพื่อทำซ้ำ virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]

7
ไม่ใช่ความคิดที่ดีจริงๆ "การคัดลอกสภาพแวดล้อมเสมือนไม่ได้รับการสนับสนุนอย่างดี virtualenv แต่ละตัวมีข้อมูลเส้นทางที่กำหนดรหัสแล้วและอาจมีบางกรณีที่รหัสคัดลอกไม่ทราบว่าจำเป็นต้องอัปเดตไฟล์เฉพาะใช้ด้วยความระมัดระวัง"
Temak

5

หากคุณใช้แอนนาคอนดาคุณสามารถเรียกใช้:

conda create --name myclone --clone myenv

นี้จะคัดลอกไปยังสภาพแวดล้อมที่สร้างขึ้นใหม่ที่เรียกว่าmyenvmyclone


4

ตัวเลือกที่ง่ายที่สุดคือการใช้virtualenv-cloneแพ็คเกจ

หากต้องการทำซ้ำvenv1ให้venv2ทำตามขั้นตอนเหล่านี้:

  1. ติดตั้งvirtualenv-cloneทั้งในหรือสภาพแวดล้อมเสมือนหุ่นvenv1 venv_dummyวิธีสร้างvenv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. วิธีติดตั้งvirtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. หากต้องการซ้ำvenv1กับvenv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/

พรอมต์ในทุบตีไม่เปลี่ยนแปลงต้องแก้ไข bin / เปิดใช้งานและไม่ชัดเจน 100% อย่างไร
MrR

@MrR .. คุณไม่ต้องแก้ไขbin/activateถ้าคุณทำตามคำตอบนี้ ทำไมคุณต้องแก้ไขbin/activate?
Safwan

หลังจากที่ฉันโคลน, การแจ้งเตือนของฉันใน bash มีชื่อสภาพแวดล้อมดั้งเดิม, เนื่องจากส่วน PS1 ภายในbin/activate
MrR

1

คุณไม่เพียงแค่:

  • คัดลอกไดเร็กทอรี env เสมือนที่มีอยู่ไปยังไดเร็กทอรีใหม่
  • อัปเดตเป็น Django ใหม่หรือไม่

7
บางครั้งฉันใช้วิธีการนี้ แต่มีความไม่สะดวกที่จะต้องอัปเดตบางเส้นทางภายในสคริปต์ถังขยะ / เปิดใช้งาน
Armando PérezMarqués

3
การเปลี่ยนแปลงนั้นง่าย ๆ ในการค้นหาและแทนที่การอ้างอิงไปยังชื่อ env หรือมันซับซ้อนกว่านั้นหรือไม่?
เกร็ก

1
ในกรณีของฉันเพียงแค่อัปเดตพา ธ ในค่าคงที่ VIRTUAL_ENV ในถังขยะ / เปิดใช้งานได้หลอกลวง
bryanph

1
ในทางกลับกันการเปลี่ยน bin / เปิดใช้งานค่อนข้างแฮ็คและเราต้องสงสัยว่าสิ่งนี้สามารถทำลายบางสิ่งได้ในบางจุด โดยเฉพาะอย่างยิ่งเมื่อใช้สภาพแวดล้อมเสมือนจริงในการตั้งค่าการผลิต
เฮอร์เบิร์ต

2
มันทำลายหลายสิ่งหลายอย่าง มันง่ายกว่าที่จะสร้างหรือจำลอง virtualenv ฉันพยายามทำสิ่งนี้ (ในขณะที่รอให้พร็อกซีเซิร์ฟเวอร์เปิดขึ้นเพื่อให้ฉันสามารถติดตั้งแพคเกจที่จำเป็นทั้งหมดใหม่และเริ่มจากศูนย์) และมันไม่ทำงาน! ฉันคิดว่าตัวเองฉลาด แต่ก็ต้องใช้การแฮ็คจำนวนมากเพื่อที่จะทำสิ่งนี้ให้สำเร็จและจริง ๆ แล้วมีสิ่งที่ต้องทำอีกมาก
horcle_buzz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.