งูหลาม 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ไฟล์ นอกจากนี้ยังทำให้ขั้นตอนการดาวน์โหลดและติดตั้งหลายรุ่นหลามง่ายขึ้นโดยใช้คำสั่งpyenvpyenv 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ไปอย่างสะดวกสบายบูรณาการเข้าไปในvirtualenvwrapperpyenv
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 เลิกใช้แล้ว ดูเหมือนว่าจะถูกนำมาใช้บ่อยครั้งที่ถูกนำมาใช้ แต่ฉันจะอยู่ห่างจากมันยังเพราะผมคิดว่ายังไม่สิ่งที่ถูกสร้างขึ้นสำหรับ  pipenvpyvenvpyenvvirtualenvvenvpyenv
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 ดูน่าอัศจรรย์ยิ่งขึ้น
                    PYTHONPATHobviates 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 สำหรับแพคเกจการบริหารจัดการที่ดูเหมือนจะบ่งบอกถึงการเป็นที่จะมาแทนที่pipfilerequirements.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