อะไรคือความแตกต่างระหว่าง venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv และอื่น ๆ ?


1022

งูหลาม 3.3 venvรวมถึงในห้องสมุดมาตรฐานของแพคเกจใหม่ มันทำอะไรและแตกต่างจากแพ็คเกจอื่น ๆ ที่ดูเหมือนจะตรงกับ regex (py)?(v|virtual|pip)?envอย่างไร


20
และเพื่อที่จะยึดเอาคะแนนโหวตที่ใกล้ชิดฉันรู้สึกว่านี่เป็นคำถามทั่วไปมากกว่าstackoverflow.com/questions/29950300/และดังนั้นฉันจึงไม่รู้สึกสบายใจที่จะแก้ไขคำถามนั้นหรือโพสต์คำตอบทั่วไปมากเกินไปในโพสต์นั้น
Flimm

12
คู่มือนี้มีประโยชน์ & อัปเดตอย่างต่อเนื่องเนื่องจากไพ ธ อนยังคงเพิ่มมากขึ้น & เพิ่มเติมว่า "วิธีการที่ชัดเจนและชัดเจน" เพื่อทำสิ่งต่างๆ: docs.python-guide.org/en/latest/dev/virtualenvs
michael

2
จาก 3.6 ฉันพบว่าการทำงานกับ virtualenv ง่ายขึ้นเมื่อเทียบกับ pyenv บน macOS (ฉันเป็น pyNoob)
HashRocketSyntax

@HashRocketSyntax virtualenvและpyenvไม่ทำหน้าที่เหมือนกันและไม่ใช่ทางเลือกซึ่งกันและกัน ดูคำตอบของฉัน
Flimm

6
ฉันเผาทั้งวันด้วย pipenv บรรทัดล่างมัน overmarketed Venv และ virtualenv หากคุณต้องการ py2 เป็นเครื่องมือที่เหมาะสม Conda (miniconda ถ้าคุณไม่ต้องการ stack เต็ม) ก็ดีเหมือนกัน เขียนได้ดีมาก: chriswarrick.com/blog/2018/07/17/…
SwimBikeRun

คำตอบ:


1382

แพ็คเกจ PyPI ไม่ได้อยู่ในไลบรารี่มาตรฐาน:

  • 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 และในสถานการณ์ที่หลากหลายและรับเครื่องมืออื่น ๆ เมื่อคุณเริ่มต้องการมัน


115
สิ่งนี้มีประโยชน์มาก! เหตุใดจึงมี 8 สิ่งพันกันแทน 1 (“ ควรมีอย่างใดอย่างหนึ่ง - และดีกว่าเพียงหนึ่งเดียว - วิธีที่ชัดเจนในการทำมัน” - The Zen of Python)
Jerry101

59
@ Jerry101 การแนะนำของ venv เป็นส่วนหนึ่งในการตอบสนองต่อความยุ่งเหยิงนั้น หากคุณต้องการช่วยปรับปรุงสถานการณ์ฉันขอแนะนำให้คุณใช้ venv และสนับสนุนให้ผู้อื่นทำเช่นเดียวกัน
Magnus Lind Oxlund

31
"การแนะนำของ venv เป็นส่วนหนึ่งในการตอบสนองต่อความยุ่งเหยิงนั้น" ทำไมเมื่อมีหลายสิ่งหลายอย่างที่ทำ 'บางอย่างเช่น X' ผู้คนมักคิดว่าพวกเขาสามารถปรับปรุงความยุ่งเหยิงนั้นได้ด้วยการทำสิ่งอื่น ๆ . มันตลกดีจริง ๆ ตอนนี้เรากำลัง 4 ปีต่อมา ... ดังนั้นอาจจะเกี่ยวข้องกับการถามvenvจริง ๆ แล้วแก้ปัญหาได้หรือไม่?
Kris

34
เครื่องมือเพียงสองรายการในรายการที่ครอบคลุมสิ่งที่เป็นจริงในอาณาเขตเดียวกันคือ virtualenv และ venv ดังนั้นลักษณะที่เราจัดการกับความยุ่งเหยิงที่เกิดจากเครื่องมือการแข่งขันหลายอย่างนั้นไม่แม่นยำมากนัก อย่างไรก็ตามรายการดังกล่าวประกอบด้วยเครื่องมือที่เกี่ยวข้องกับสภาพแวดล้อมเสมือนจริงหลายรายการทั้งหมดที่มีชื่อที่มีเสียงคล้ายกัน ซึ่งอาจสร้างความสับสนโดยเฉพาะกับผู้ใช้ที่เพิ่งเรียนรู้เกี่ยวกับพวกเขา venv ปรับปรุงสถานการณ์หรือไม่? มันนำเสนอทางเลือกที่มีน้ำหนักเบามากขึ้นสำหรับเครื่องมือสภาพแวดล้อมเสมือนจริงอื่น ๆ ซึ่งได้รับประโยชน์จากการปรับเปลี่ยนแบบเนทีฟและจุดในไลบรารีมาตรฐาน …
Magnus Lind Oxlund

11
@cowbert หลังจากเพิ่งอัพเกรดจาก Python 3.5 เป็น Python 3.6 และการแบ่ง virtualenvs ทั้งหมดของฉันดูเหมือนว่าvenvให้คุณอัพเกรดเป็น Python เวอร์ชั่นใหม่ได้ง่ายขึ้น
Daniel H

276

ฉันจะหลีกเลี่ยงการใช้ของ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ผมคิดว่างูใหญ่จะเป็นแพลตฟอร์มที่ดีขึ้นเมื่อเรากำจัดนี้ตัวเลือกเพิ่มเติมและการใช้งานเท่านั้น


3
add2virtualenvปรับแต่งของคุณPYTHONPATHโดยการเพิ่มที่กำหนดเองไฟล์ภายใต้_virtualenv_path_extensions.pth site-packagesหรือคุณสามารถอัปเดตPYTHONPATHตัวแปรสภาพแวดล้อมในbin/activateไฟล์ที่คุณโทรทุกครั้งที่คุณเปิดใช้งานสภาพแวดล้อมเสมือน หรือคุณสามารถเพิ่ม symlink ใต้site-packagesเพื่อชี้ไปที่ไดเรกทอรีพิเศษ ตัวเลือกทั้งสองนี้มีความโปร่งใสมากกว่าสำหรับผู้พัฒนาเครื่องมือบรรทัดคำสั่งแบบดั้งเดิมที่ใช้กันอย่างแพร่หลายเพื่อแก้ไขปัญหา การใช้งานแบบกำหนดเอง.pthที่ไม่มีชื่อที่ไม่มีเอกสารทำให้ IMO ดูน่าอัศจรรย์ยิ่งขึ้น
Riaz Rizvi

15
เอาล่ะดังนั้นฉันได้รับการยืนยันเมื่อstackoverflow.com/questions/48130371/...ว่าการปรับปรุงที่ถูกต้องเพื่อPYTHONPATHobviates add2virtualenvความจำเป็นสำหรับ เกี่ยวกับการขาดความช่วยเหลือเกี่ยวกับ SO จากความคิดเห็นแรกของคุณคำแนะนำเดียวของฉันคือคำตอบไม่ลงคะแนนหากพวกเขาแก้ไขปัญหาของคุณเพื่อกระตุ้นให้ผู้คนแก้ไขปัญหาให้คุณเมื่อคุณโพสต์? ครึ่งชั่วโมงของการสอบสวน + การเขียนเพื่อแลกกับการคลิกเมาส์? ฟังดูเหมือนเป็นการแลกเปลี่ยนที่ดี ...
Riaz Rizvi

7
ไม่คุณพูดถูก - ฉันพยายามทำตัวให้เก่ง เฮคถ้าคุณอยู่ในพื้นที่ของฉันฉันจะซื้อเบียร์ให้คุณ ฉันจะทำตามคำสัญญาของฉันและดูว่าผู้คนใน python doc จะให้ฉันเพิ่มการเปลี่ยนแปลงใน / bin / เปิดใช้งานเอกสารอย่างเป็นทางการเพื่อความชัดเจนหรือไม่ แม้ว่าฉันจะไม่เก่ง แต่ฉันก็ไม่ได้กลัวงูหลามเลย ถ้ามันยากสำหรับฉัน ... เอาล่ะขอบคุณสำหรับเวลาของคุณ - ขอให้คุณดีที่สุด
SteveJ

9
@ MalikA.Rumi พรได้ลดลงเล็กน้อยเป็น "ผู้สร้าง Pipenv ทำการตลาดอย่างขยันขันแข็งกับเราและคนอื่น ๆ ซึ่งเป็นเหตุผลที่เราพูดถึง Pipenv"
Rob Grant

6
@AndreaMoro มันว่าจะเลิกไม่ได้pyvenv pyenvง่ายมากที่จะสับสนกับชื่อของเครื่องมือเหล่านี้
Daniel Holmes

24

ฉันลงpipenvหลุมกระต่าย ( มันเป็นหลุมลึกและมืดแน่นอน ... ) และเนื่องจากคำตอบสุดท้ายเมื่อ 2 ปีที่แล้วรู้สึกว่ามันมีประโยชน์ในการอัปเดตการอภิปรายด้วยการพัฒนาล่าสุดในหัวข้อซองจดหมายเสมือน Python ฉัน พบแล้ว

หมายเหตุ:

คำตอบนี้ไม่เกี่ยวกับการดำเนินการต่อการอภิปรายโกรธเกี่ยวกับประโยชน์ของpipenv เมื่อเทียบกับ venvเป็นซองจดหมายโซลูชั่นฉันจะทำให้การรับรองของอย่างใดอย่างหนึ่ง มันเกี่ยวกับPyPAรับรองมาตรฐานที่ขัดแย้งกันและการพัฒนาในอนาคตของvirtualenvสัญญาว่าจะปฏิเสธที่จะทำอย่างใดอย่างหนึ่ง / หรือทางเลือกระหว่างพวกเขาเลย ผมจดจ่ออยู่กับทั้งสองเครื่องมือแม่นยำเพราะพวกเขาเป็นคนเจิมไว้โดยPyPA

venv

ในฐานะที่เป็นบันทึก OP, venvเป็นเครื่องมือสำหรับการจำลองสภาพแวดล้อม ไม่ใช่โซลูชันของบุคคลที่สาม แต่เป็นเครื่องมือดั้งเดิม PyPAรับรองvenvสำหรับการสร้างVIRTUAL ENVELOPES : " เปลี่ยนเป็นเวอร์ชั่น 3.5: แนะนำให้ใช้ venv เพื่อสร้างสภาพแวดล้อมเสมือนจริง "

pipenv

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อีกต่อไป


6
จากสิ่งที่ฉันเข้าใจ: มูลค่าที่แท้จริงของpipenvได้รับการถกเถียงกันมาระยะหนึ่งแล้วและยังไม่ได้เปิดตัวในปีนี้ หลายสิ่งหลายอย่างเปลี่ยนไปตั้งแต่นั้นมาและฉันจะเถียงว่ามันเลวร้ายกว่าสำหรับpipenv (เครื่องมือต่าง ๆ เช่นบทกวีและpip-toolsมีรูปร่างที่ดีกว่ามาก) PyPAหน้าจะล้าสมัยและฉันจะยืนยันพวกเขาควรจะลดระดับpipenv venvเป็นเครื่องมือมาตรฐานและมีประสิทธิภาพมาก แต่มีชุดคุณสมบัติที่ จำกัด virtualenvไม่แข่งขันกับvenvแต่พยายามครอบคลุมพื้นที่ที่venvไม่สามารถหรือไม่ต้องการไป (เนื่องจากเป็นมาตรฐาน)
sinoroc

@sinoroc โพสต์ของฉันไม่ได้เกี่ยวกับข้อดีหรือ pipenv, มันเป็นเรื่องเกี่ยวกับแนวทางที่ขัดแย้งกันของ PyPA ที่สนับสนุนทั้ง pipenv และ venv การเลือกโซลูชันซองจดหมายที่ยากขึ้น ระหว่างพวกเขาเลย โปรดทราบว่าฉันไม่รับรองอะไรเลยเพียงแบ่งปันสิ่งที่ฉันได้เรียนรู้เกี่ยวกับวิธีที่โซลูชันทั้งสองนี้รับรองโดย PyPAกำลังพัฒนา ไม่ว่าฉันจะชอบหรือไม่ชอบก็ตาม: Pyenv และ venv ดูเหมือนจะกลายเป็นส่วนหนึ่งของภูมิประเทศ
F1Linux

8
ฉันจะบอกว่าติดvenvและpipมากที่สุด ทั้งสองอยู่ที่นี่เพื่อการเข้าพัก, venvเป็นส่วนหนึ่งของมาตรฐานห้องสมุดหลามและในความรู้สึกpipเช่นกันเพราะมัน vendored ในหลาม (ผ่านensurepip ) เครื่องมืออื่น ๆ ( pyenvชุดสำรอง: สิ่งที่แตกต่างอย่างสิ้นเชิง) ดูเหมือนจะทั้งพึ่งพาหรือเลียนแบบ (กับความสำเร็จมากขึ้นหรือน้อยกว่า) venvและpip อันไหนดี แต่ถ้าสิ่งต่าง ๆ เป็นเหม็นvenvและpipเป็นทางเลือกที่ปลอดภัย เครื่องมืออื่น ๆ ที่ฉันใช้คือtox (พร้อมกับtox-venv) เพื่อช่วยสร้างและเติมสภาพแวดล้อมเสมือนจริง (ตรงไปตรงมาไม่มีเวทมนตร์แปลก ๆ ที่ยังไม่ได้กล่าวถึง)
sinoroc

2
โพสต์ล่าสุดนี้เป็นทองคำเพราะมันทำงานได้ดีเยี่ยมในการลดเลือนริ้วรอย ฉันเกาะติดกับ pip และ venv เนื่องจากฉันมีปัญหากับ dangling binaries โดยใช้ virtualenv เมื่ออัพเกรดระบบไพ ธ อน
codeviper

1
ในอดีตที่ผ่านมาฉันพบปัญหากับ pipenv nonverbose เกี่ยวกับข้อผิดพลาด เถียงและคู นอกจากนี้: chriswarrick.com/blog/2018/07/17/…
qrtLs

3

อัพเดตเดือนเมษายน 2563

ฉันค้นหาเหมือนกันเมื่อฉันเจอโพสต์นี้ ฉันคิดว่าปัญหาของเครื่องมือที่ใช้นี้ค่อนข้างสับสนและยากสำหรับผู้ใช้ Python ใหม่อย่างฉัน นี่คือโดยตรงจากเว็บไซต์ PyPA เกี่ยวกับ pipenv:

ในขณะที่บทช่วยสอนนี้ครอบคลุมโครงการ pipenv เป็นเครื่องมือที่เน้นความต้องการของการพัฒนาแอพพลิเคชั่น Python มากกว่าการพัฒนาไลบรารี่ของ Python แต่ตัวโครงการกำลังทำงานผ่านกระบวนการและปัญหาการบำรุงรักษาที่ป้องกันไม่ให้แก้ไขบั๊กและคุณสมบัติใหม่ ๆ ด้วยจำนวน 2019 ผ่านไปโดยไม่มีการเปิดตัวใหม่) ซึ่งหมายความว่าในระยะเวลาอันใกล้นี้ pipenv ยังคงได้รับความทุกข์ทรมานจากปัญหาที่เกิดขึ้นหลายประการและปัญหาด้านประสิทธิภาพโดยไม่มีกำหนดเวลาชัดเจนสำหรับการแก้ไขปัญหาของผู้ออก

ในขณะที่เรื่องนี้ยังคงอยู่ผู้ดูแลโครงการมีแนวโน้มที่จะต้องการตรวจสอบเครื่องมืออื่น ๆ สำหรับการจัดการการพึ่งพาแอปพลิเคชันสำหรับใช้แทนหรือร่วมกับ pipenv

สมมติว่าการปล่อย pipenv ในเดือนเมษายน 2020 ดำเนินต่อไปตามแผนที่วางไว้และการเปิดตัวหลังจากนั้นยังคงอยู่ในเส้นทางจากนั้นคำเตือนในบทช่วยสอนนี้จะถูกลบออก หากรีลีสเหล่านั้นไม่อยู่ในการติดตามการสอนตัวเองจะถูกลบออกและแทนที่ด้วยหน้าอภิปรายในตัวเลือกการจัดการการพึ่งพาที่มีอยู่


ดูเหมือนว่า pipenv ปัจจุบัน (เช่นในเดือนพฤษภาคม 2563) ยังอยู่ในช่วงเตรียมการสำหรับการเปิดตัวเมษายน 2563 ดูที่นี่
andrewjames

สิ่งนี้ไม่ตอบคำถาม
Flimm

ฉันคิดว่า @Flimm ตอบคำถามได้ดี ฉันตอบกลับการตอบกลับของ
F1Linux

1
ตั้งแต่วันที่ 4 มิถุนายน 2563 pipenvทีมได้เปิดตัว PyPI 2 เวอร์ชั่น2020.5.28และอีกไม่นานนี้2020.6.2: pypi.org/project/pipenv/#history
nonbeing
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.