งูหลาม 3.3 venv
รวมถึงในห้องสมุดมาตรฐานของแพคเกจใหม่ มันทำอะไรและแตกต่างจากแพ็คเกจอื่น ๆ ที่ดูเหมือนจะตรงกับ regex (py)?(v|virtual|pip)?env
อย่างไร
virtualenv
และpyenv
ไม่ทำหน้าที่เหมือนกันและไม่ใช่ทางเลือกซึ่งกันและกัน ดูคำตอบของฉัน
งูหลาม 3.3 venv
รวมถึงในห้องสมุดมาตรฐานของแพคเกจใหม่ มันทำอะไรและแตกต่างจากแพ็คเกจอื่น ๆ ที่ดูเหมือนจะตรงกับ regex (py)?(v|virtual|pip)?env
อย่างไร
virtualenv
และpyenv
ไม่ทำหน้าที่เหมือนกันและไม่ใช่ทางเลือกซึ่งกันและกัน ดูคำตอบของฉัน
คำตอบ:
virtualenv
เป็นเครื่องมือที่นิยมอย่างมากที่สร้างสภาพแวดล้อม Python แยกสำหรับห้องสมุด Python หากคุณไม่คุ้นเคยกับเครื่องมือนี้ฉันขอแนะนำให้เรียนรู้เพราะเป็นเครื่องมือที่มีประโยชน์มากและฉันจะทำการเปรียบเทียบกับคำตอบที่เหลือของคำตอบนี้
มันทำงานโดยการติดตั้งพวงของไฟล์ในไดเรกทอรี (เช่น: env/
) แล้วปรับเปลี่ยนPATH
ตัวแปรสภาพแวดล้อมคำนำหน้ามันด้วยที่กำหนดเองbin
ไดเรกทอรี (เช่นenv/bin/
) สำเนาที่แน่นอนของpython
หรือpython3
ไบนารีจะอยู่ในไดเรกทอรีนี้ แต่ Python ได้รับการตั้งโปรแกรมให้ค้นหาไลบรารีที่เกี่ยวข้องกับพา ธ ของมันก่อนในไดเรกทอรีสภาพแวดล้อม มันไม่ได้เป็นส่วนหนึ่งของไลบรารี่มาตรฐานของไพ ธ อน แต่ได้รับพรจาก PyPA (Python Packaging Authority) อย่างเป็นทางการ pip
เมื่อเปิดใช้งานคุณสามารถติดตั้งแพคเกจในสภาพแวดล้อมเสมือนจริงโดยใช้
pyenv
ใช้เพื่อแยกรุ่น Python ตัวอย่างเช่นคุณอาจต้องการทดสอบรหัสของคุณกับ Python 2.7, 3.6, 3.7 และ 3.8 ดังนั้นคุณจะต้องมีวิธีการสลับระหว่างพวกเขา เมื่อเปิดใช้งานมันจะนำหน้าPATH
ตัวแปรสภาพแวดล้อมด้วย~/.pyenv/shims
ซึ่งมีไฟล์พิเศษที่ตรงกับคำสั่ง Python ( python
, pip
) สิ่งเหล่านี้ไม่ใช่สำเนาของคำสั่งที่ส่งมาจาก Python เป็นสคริปต์พิเศษที่ตัดสินใจได้ทันทีว่า Python เวอร์ชันใดที่เรียกใช้ตามPYENV_VERSION
ตัวแปรสภาพแวดล้อมหรือ.python-version
ไฟล์หรือ~/.pyenv/version
ไฟล์ นอกจากนี้ยังทำให้ขั้นตอนการดาวน์โหลดและติดตั้งหลายรุ่นหลามง่ายขึ้นโดยใช้คำสั่งpyenv
pyenv install
pyenv-virtualenv
เป็นปลั๊กอินสำหรับpyenv
โดยผู้เขียนคนเดียวกันpyenv
เพื่อให้คุณใช้pyenv
และvirtualenv
ในเวลาเดียวกันได้อย่างสะดวก แต่ถ้าคุณกำลังใช้งูหลาม 3.3 หรือในภายหลังpyenv-virtualenv
จะพยายามที่จะทำงานถ้ามันมีอยู่แทนpython -m venv
virtualenv
คุณสามารถใช้virtualenv
และpyenv
รวมกันได้pyenv-virtualenv
หากไม่ต้องการคุณสมบัติด้านความสะดวกสบาย
virtualenvwrapper
เป็นชุดของส่วนขยายที่virtualenv
(ดูเอกสาร ) มันทำให้คุณมีคำสั่งเช่นmkvirtualenv
, lssitepackages
และโดยเฉพาะอย่างยิ่งworkon
สำหรับการสลับไปมาระหว่างที่แตกต่างกันvirtualenv
ไดเรกทอรี เครื่องมือนี้มีประโยชน์อย่างยิ่งหากคุณต้องการหลายvirtualenv
ไดเรกทอรี
pyenv-virtualenvwrapper
เป็นปลั๊กอินสำหรับpyenv
โดยผู้เขียนคนเดียวกันเป็นpyenv
ไปอย่างสะดวกสบายบูรณาการเข้าไปในvirtualenvwrapper
pyenv
pipenv
มีจุดมุ่งหมายที่จะรวมPipfile
, pip
และvirtualenv
เป็นคำสั่งหนึ่งในบรรทัดคำสั่ง โดยvirtualenv
ทั่วไปแล้วไดเรกทอรีจะถูกวางไว้~/.local/share/virtualenvs/XXX
โดยXXX
มีแฮชของพา ธ ของไดเรกทอรีโครงการ สิ่งนี้แตกต่างจากvirtualenv
ที่ซึ่งโดยปกติแล้วไดเรกทอรีจะอยู่ในไดเรกทอรีการทำงานปัจจุบัน pipenv
มีวัตถุประสงค์เพื่อใช้เมื่อพัฒนาแอปพลิเคชัน Python (ตรงข้ามกับไลบรารี) มีทางเลือกอื่นpipenv
เช่นpoetry
ฉันจะไม่แสดงรายการที่นี่เนื่องจากคำถามนี้เกี่ยวกับแพ็คเกจที่มีชื่อคล้ายกันเท่านั้น
pyvenv
เป็นสคริปต์ที่มาพร้อมกับ Python 3 แต่เลิกใช้ใน Python 3.6เนื่องจากมีปัญหา (ไม่ต้องพูดถึงชื่อที่สับสน) ในหลาม 3.6 python3 -m venv
ขึ้นไปเทียบเท่าแน่นอน
venv
เป็นแพ็คเกจที่มาพร้อมกับ Python 3 ซึ่งคุณสามารถใช้งานได้python3 -m venv
(แม้ว่าจะมีเหตุผลบางอย่างที่ distros แยกมันออกเป็นแพ็คเกจ distro อื่นเช่นpython3-venv
บน Ubuntu / Debian) มันทำหน้าที่เพื่อจุดประสงค์เดียวกันvirtualenv
แต่มีเพียงส่วนย่อยของคุณสมบัติ ( ดูการเปรียบเทียบที่นี่ ) virtualenv
ยังคงได้รับความนิยมมากกว่าvenv
โดยเฉพาะตั้งแต่อดีตรองรับทั้ง Python 2 และ 3
นี่คือคำแนะนำส่วนตัวของฉันสำหรับผู้เริ่มต้น: เริ่มต้นด้วยการเรียนรู้virtualenv
และpip
เครื่องมือที่ทำงานกับทั้ง Python 2 และ 3 และในสถานการณ์ที่หลากหลายและรับเครื่องมืออื่น ๆ เมื่อคุณเริ่มต้องการมัน
venv
จริง ๆ แล้วแก้ปัญหาได้หรือไม่?
venv
ให้คุณอัพเกรดเป็น Python เวอร์ชั่นใหม่ได้ง่ายขึ้น
ฉันจะหลีกเลี่ยงการใช้ของvirtualenv
หลังจาก Python3.3 + venv
และแทนที่จะใช้ห้องสมุดมาตรฐานส่ง ในการสร้างสภาพแวดล้อมเสมือนใหม่ให้พิมพ์:
$ python3 -m venv <MYVENV>
virtualenv
พยายามคัดลอกไบนารี Python ลงในไดเรกทอรี bin ของสภาพแวดล้อมเสมือน อย่างไรก็ตามจะไม่อัปเดตลิงก์ไฟล์ไลบรารีที่ฝังอยู่ในไบนารีนั้นดังนั้นหากคุณสร้าง Python จากแหล่งลงในไดเรกทอรีที่ไม่ใช่ระบบที่มีชื่อพา ธ สัมพัทธ์ เนื่องจากนี่คือวิธีที่คุณทำสำเนา Python ที่สามารถแจกจ่ายได้ซึ่งเป็นข้อบกพร่องที่ยิ่งใหญ่ BTW ในการตรวจสอบการเชื่อมโยงฝังไฟล์ไลบรารีบน OS X otool
ใช้ ตัวอย่างเช่นจากภายในสภาพแวดล้อมเสมือนของคุณให้พิมพ์:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
ดังนั้นฉันจะหลีกเลี่ยงและvirtualenvwrapper
เลิกใช้แล้ว ดูเหมือนว่าจะถูกนำมาใช้บ่อยครั้งที่ถูกนำมาใช้ แต่ฉันจะอยู่ห่างจากมันยังเพราะผมคิดว่ายังไม่สิ่งที่ถูกสร้างขึ้นสำหรับ pipenv
pyvenv
pyenv
virtualenv
venv
pyenv
venv
สร้างสภาพแวดล้อมเสมือนในเชลล์ที่สดใหม่และแซนด์บ็อกซ์พร้อมไลบรารีที่ผู้ใช้ติดตั้งได้และมันปลอดภัยหลายไพธ อน ใหม่เนื่องจากสภาพแวดล้อมเสมือนเริ่มต้นด้วยไลบรารีมาตรฐานที่จัดส่งมาพร้อมกับไพ ธ อนเท่านั้นคุณจะต้องติดตั้งไลบรารีอื่นทั้งหมดอีกครั้งด้วยpip install
ในขณะที่สภาพแวดล้อมเสมือนเปิดใช้งานอยู่ แซนด์บ็อกซ์เนื่องจากไม่มีการติดตั้งไลบรารีใหม่เหล่านี้ที่สามารถมองเห็นได้นอกสภาพแวดล้อมเสมือนดังนั้นคุณสามารถลบสภาพแวดล้อมทั้งหมดและเริ่มต้นอีกครั้งโดยไม่ต้องกังวลว่าจะมีผลกระทบกับการติดตั้งไพ ธ อนของคุณ ไลบรารีที่ผู้ใช้ติดตั้งได้เนื่องจากโฟลเดอร์เป้าหมายของสภาพแวดล้อมเสมือนถูกสร้างขึ้นโดยไม่มีsudo
ในบางไดเรกทอรีที่คุณเป็นเจ้าของอยู่แล้วดังนั้นคุณไม่จำเป็นต้องมีsudo
สิทธิ์ในการติดตั้งไลบรารีเข้าไป ในที่สุดมันก็ปลอดภัยแบบ multi-pythonเนื่องจากเมื่อสภาพแวดล้อมเสมือนเปิดใช้งานเชลล์จะเห็นเฉพาะเวอร์ชันของงูหลาม (3.4, 3.5 และอื่น ๆ ) ที่ใช้เพื่อสร้างสภาพแวดล้อมเสมือนนั้น
pyenv
คล้ายกับvenv
ที่ช่วยให้คุณจัดการสภาพแวดล้อมหลามหลาย ๆ อย่างไรก็ตามเมื่อpyenv
คุณไม่สามารถย้อนกลับไปติดตั้งไลบรารี่ในบางสถานะเริ่มต้นได้และคุณอาจต้องการadmin
สิทธิ์ในการอัปเดตไลบรารี venv
ดังนั้นผมจึงคิดว่ามันเป็นยังดีที่สุดในการใช้งาน
ในคู่สุดท้ายของปีที่ผ่านมาฉันได้พบปัญหามากมายในการสร้างระบบ (แพคเกจ emacs ผู้สร้างแอปพลิเคหลามแบบสแตนด์อโลน, ติดตั้ง ... ) virtualenv
ว่าในท้ายที่สุดลงมาปัญหาเกี่ยวกับ venv
ผมคิดว่างูใหญ่จะเป็นแพลตฟอร์มที่ดีขึ้นเมื่อเรากำจัดนี้ตัวเลือกเพิ่มเติมและการใช้งานเท่านั้น
add2virtualenv
ปรับแต่งของคุณPYTHONPATH
โดยการเพิ่มที่กำหนดเองไฟล์ภายใต้_virtualenv_path_extensions.pth
site-packages
หรือคุณสามารถอัปเดตPYTHONPATH
ตัวแปรสภาพแวดล้อมในbin/activate
ไฟล์ที่คุณโทรทุกครั้งที่คุณเปิดใช้งานสภาพแวดล้อมเสมือน หรือคุณสามารถเพิ่ม symlink ใต้site-packages
เพื่อชี้ไปที่ไดเรกทอรีพิเศษ ตัวเลือกทั้งสองนี้มีความโปร่งใสมากกว่าสำหรับผู้พัฒนาเครื่องมือบรรทัดคำสั่งแบบดั้งเดิมที่ใช้กันอย่างแพร่หลายเพื่อแก้ไขปัญหา การใช้งานแบบกำหนดเอง.pth
ที่ไม่มีชื่อที่ไม่มีเอกสารทำให้ IMO ดูน่าอัศจรรย์ยิ่งขึ้น
PYTHONPATH
obviates add2virtualenv
ความจำเป็นสำหรับ เกี่ยวกับการขาดความช่วยเหลือเกี่ยวกับ SO จากความคิดเห็นแรกของคุณคำแนะนำเดียวของฉันคือคำตอบไม่ลงคะแนนหากพวกเขาแก้ไขปัญหาของคุณเพื่อกระตุ้นให้ผู้คนแก้ไขปัญหาให้คุณเมื่อคุณโพสต์? ครึ่งชั่วโมงของการสอบสวน + การเขียนเพื่อแลกกับการคลิกเมาส์? ฟังดูเหมือนเป็นการแลกเปลี่ยนที่ดี ...
pyvenv
pyenv
ง่ายมากที่จะสับสนกับชื่อของเครื่องมือเหล่านี้
ฉันลงpipenv
หลุมกระต่าย ( มันเป็นหลุมลึกและมืดแน่นอน ... ) และเนื่องจากคำตอบสุดท้ายเมื่อ 2 ปีที่แล้วรู้สึกว่ามันมีประโยชน์ในการอัปเดตการอภิปรายด้วยการพัฒนาล่าสุดในหัวข้อซองจดหมายเสมือน Python ฉัน พบแล้ว
คำตอบนี้ไม่เกี่ยวกับการดำเนินการต่อการอภิปรายโกรธเกี่ยวกับประโยชน์ของpipenv เมื่อเทียบกับ venvเป็นซองจดหมายโซลูชั่นฉันจะทำให้การรับรองของอย่างใดอย่างหนึ่ง มันเกี่ยวกับPyPAรับรองมาตรฐานที่ขัดแย้งกันและการพัฒนาในอนาคตของvirtualenvสัญญาว่าจะปฏิเสธที่จะทำอย่างใดอย่างหนึ่ง / หรือทางเลือกระหว่างพวกเขาเลย ผมจดจ่ออยู่กับทั้งสองเครื่องมือแม่นยำเพราะพวกเขาเป็นคนเจิมไว้โดยPyPA
ในฐานะที่เป็นบันทึก OP, venvเป็นเครื่องมือสำหรับการจำลองสภาพแวดล้อม ไม่ใช่โซลูชันของบุคคลที่สาม แต่เป็นเครื่องมือดั้งเดิม PyPAรับรองvenvสำหรับการสร้างVIRTUAL ENVELOPES : " เปลี่ยนเป็นเวอร์ชั่น 3.5: แนะนำให้ใช้ venv เพื่อสร้างสภาพแวดล้อมเสมือนจริง "
pipenv - เหมือน venv - สามารถใช้ในการสร้างซองจดหมายเสมือน แต่ยังม้วนในการจัดการบรรจุภัณฑ์และช่องโหว่ของการตรวจสอบการทำงาน แทนการใช้requirements.txt
,pipenv
ให้การจัดการแพคเกจผ่านPipfile ในฐานะที่เป็น PyPAราชบัณฑิต pipenv สำหรับแพคเกจการบริหารจัดการที่ดูเหมือนจะบ่งบอกถึงการเป็นที่จะมาแทนที่pipfile
requirements.txt
อย่างไรก็ตาม : pipenvใช้virtualenvเป็นเครื่องมือสำหรับการสร้างซองจดหมายเสมือนไม่ venvซึ่งเป็นที่รับรองโดยPyPAเป็นไปเพื่อเครื่องมือสำหรับการสร้างซองจดหมายเสมือน
ดังนั้นหากการชำระเงินบนโซลูชันซองจดหมายเสมือนไม่ยากพอตอนนี้เรามีPyPAรับรองเครื่องมือสองแบบที่ใช้โซลูชันซองจดหมายเสมือนที่แตกต่างกัน โกรธอภิปราย Github ในvenv VS virtualenvซึ่งไฮไลท์ความขัดแย้งนี้สามารถพบได้ที่นี่
การอภิปราย Github ที่อ้างถึงในลิงค์ด้านบนได้นำการพัฒนาvirtualenvในทิศทางของการรองรับvenvในรุ่นอนาคต :
ชอบ venv ในตัว: ถ้าไพ ธ อนเป้าหมายมี venv เราจะสร้างสภาพแวดล้อมโดยใช้สิ่งนั้น (จากนั้นดำเนินการในภายหลังเพื่อความสะดวกในการรับประกันอื่น ๆ ที่เรานำเสนอ)
ดังนั้นดูเหมือนว่าจะมีบางบรรจบกันในอนาคตระหว่างสองโซลูชั่นซองเสมือนคู่แข่ง แต่ ณ ขณะนี้pipenv - ซึ่งใช้virtualenv
- venv
แตกต่างกันอย่างมากจาก
ได้รับปัญหาpipenvแก้และความจริงที่ว่าPyPAได้ให้ศีลให้พรของมันก็จะปรากฏขึ้นที่จะมีอนาคตที่สดใส และถ้าvirtualenvส่งมอบตามวัตถุประสงค์ในการพัฒนาที่เสนอไว้การเลือกโซลูชันซองจดหมายเสมือนไม่ควรเป็นกรณีของpipenvหรือvenvอีกต่อไป
อัพเดตเดือนเมษายน 2563
ฉันค้นหาเหมือนกันเมื่อฉันเจอโพสต์นี้ ฉันคิดว่าปัญหาของเครื่องมือที่ใช้นี้ค่อนข้างสับสนและยากสำหรับผู้ใช้ Python ใหม่อย่างฉัน นี่คือโดยตรงจากเว็บไซต์ PyPA เกี่ยวกับ pipenv:
ในขณะที่บทช่วยสอนนี้ครอบคลุมโครงการ pipenv เป็นเครื่องมือที่เน้นความต้องการของการพัฒนาแอพพลิเคชั่น Python มากกว่าการพัฒนาไลบรารี่ของ Python แต่ตัวโครงการกำลังทำงานผ่านกระบวนการและปัญหาการบำรุงรักษาที่ป้องกันไม่ให้แก้ไขบั๊กและคุณสมบัติใหม่ ๆ ด้วยจำนวน 2019 ผ่านไปโดยไม่มีการเปิดตัวใหม่) ซึ่งหมายความว่าในระยะเวลาอันใกล้นี้ pipenv ยังคงได้รับความทุกข์ทรมานจากปัญหาที่เกิดขึ้นหลายประการและปัญหาด้านประสิทธิภาพโดยไม่มีกำหนดเวลาชัดเจนสำหรับการแก้ไขปัญหาของผู้ออก
ในขณะที่เรื่องนี้ยังคงอยู่ผู้ดูแลโครงการมีแนวโน้มที่จะต้องการตรวจสอบเครื่องมืออื่น ๆ สำหรับการจัดการการพึ่งพาแอปพลิเคชันสำหรับใช้แทนหรือร่วมกับ pipenv
สมมติว่าการปล่อย pipenv ในเดือนเมษายน 2020 ดำเนินต่อไปตามแผนที่วางไว้และการเปิดตัวหลังจากนั้นยังคงอยู่ในเส้นทางจากนั้นคำเตือนในบทช่วยสอนนี้จะถูกลบออก หากรีลีสเหล่านั้นไม่อยู่ในการติดตามการสอนตัวเองจะถูกลบออกและแทนที่ด้วยหน้าอภิปรายในตัวเลือกการจัดการการพึ่งพาที่มีอยู่
pipenv
ทีมได้เปิดตัว PyPI 2 เวอร์ชั่น2020.5.28
และอีกไม่นานนี้2020.6.2
: pypi.org/project/pipenv/#history