ความแตกต่างระหว่าง pyenv, virtualenv, anaconda คืออะไร?


142

ฉันเป็นโปรแกรมเมอร์ทับทิมที่พยายามเรียนรู้หลาม ฉันเป็นครอบครัวที่สวยด้วย pyenv เพราะมันเป็นเหมือนสำเนาและวางจาก rbenv Pyenv ช่วยให้มีงูหลามมากกว่าหนึ่งรุ่นในระบบและยังสามารถแยกงูหลามได้โดยไม่ต้องสัมผัสส่วนที่บอบบางของระบบ

ฉันคิดว่าทุกการติดตั้งหลามมาพร้อมกับแพ็คเกจ pip สิ่งที่ฉันยังไม่เข้าใจคือมีไพ ธ อนจำนวนมากที่แนะนำให้ใช้ virtualenv และแอนนาคอนดานี้ ฉันยังสามารถค้นหา virtualenv plugin สำหรับ pyenv ได้

ตอนนี้ฉันสับสนกับวัตถุประสงค์ของ pyenv และ virtualenv สองตัวนี้ ที่แย่กว่านั้นใน pyenv นั่นคือ virtualenv plugin

คำถามของฉันคือ:

  • ความแตกต่างระหว่าง pyenv และ virtualenv คืออะไร?
  • มีความแตกต่างในการใช้คำสั่ง pip ภายใน pyenv และ virtualenv หรือไม่?
  • pyenv virutalenv นี้ทำอะไร

คำอธิบายของคุณด้วยตัวอย่างจะได้รับการชื่นชมอย่างมาก


เกี่ยวข้อง: stackoverflow.com/questions/29950300/…
cel

คำตอบ:


154

แก้ไข: เป็นมูลค่าการกล่าวขวัญpipที่นี่เช่นกันcondaและpipมีความคล้ายคลึงและความแตกต่างที่เกี่ยวข้องกับหัวข้อนี้นี้

pip: Python Package Manager

  • คุณอาจคิดว่าpipเป็นงูหลามเทียบเท่ากับgemคำสั่งruby
  • pip ไม่รวมอยู่ในหลามโดยค่าเริ่มต้น
  • คุณสามารถติดตั้ง Python โดยใช้homebrewซึ่งจะติดตั้ง pip โดยอัตโนมัติ:brew install python
  • OSX เวอร์ชั่นสุดท้ายไม่ได้รวม pip ตามค่าเริ่มต้น ในการเพิ่ม pip ไปยังไพ ธ อนของระบบ Mac คุณสามารถทำได้sudo easy_install pip
  • คุณสามารถค้นหาและเผยแพร่แพ็คเกจ python ได้โดยใช้PyPI: The Python Package Index
  • ไฟล์ requirements.txt เปรียบได้กับทับทิม gemfile
  • ในการสร้างไฟล์ข้อความความต้องการ pip freeze > requirements.txt
  • หมายเหตุ ณ จุดนี้เราได้ติดตั้งไพ ธ อนในระบบของเราและเราได้สร้างไฟล์ requirements.txt ที่แสดงถึงแพ็กเกจหลามทั้งหมดที่ติดตั้งบนระบบของคุณ

pyenv: Python Version Manager

  • จากเอกสาร : pyenv ให้คุณสลับระหว่าง Python หลายเวอร์ชันได้อย่างง่ายดาย มันง่ายไม่สร้างความรำคาญและเป็นไปตามธรรมเนียม UNIX ของเครื่องมือแบบใช้ครั้งเดียวที่ทำได้ดี โครงการนี้ถูกแยกจาก rbenv และ ruby-build และแก้ไขสำหรับ Python
  • หลายคนลังเลที่จะใช้ python3
  • หากคุณต้องการใช้หลามเวอร์ชันต่าง ๆpyenvให้คุณจัดการสิ่งนี้ได้อย่างง่ายดาย

virtualenv: Python Environment Manager

  • จากเอกสาร : ปัญหาพื้นฐานที่ถูกแก้ไขคือหนึ่งในการอ้างอิงและเวอร์ชันและการอนุญาตโดยอ้อม ลองนึกภาพคุณมีแอพพลิเคชั่นที่ต้องการ LibFoo รุ่น 1 แต่แอพพลิเคชั่นอื่นต้องการเวอร์ชั่น 2 คุณจะใช้ทั้งสองแอพพลิเคชั่นเหล่านี้ได้อย่างไร? หากคุณติดตั้งทุกอย่างลงใน /usr/lib/python2.7/site-packages (หรือตำแหน่งมาตรฐานของแพลตฟอร์มของคุณ) มันง่ายที่จะจบลงในสถานการณ์ที่คุณอัพเกรดแอปพลิเคชั่นที่ไม่ควรอัพเกรด
  • ในการสร้างvirtualenvเพียงแค่เรียกใช้virtualenv ENVโดยที่ENVจะมีไดเร็กทอรีเพื่อวางสภาพแวดล้อมเสมือนใหม่
  • ในการเริ่มต้นคุณจะต้องvirtualenv เพื่อหยุดการใช้เพียงโทรsource ENV/bin/activatedeactivate
  • เมื่อคุณเปิดใช้งานvirtualenvคุณอาจติดตั้งข้อกำหนดแพคเกจทั้งหมดของเวิร์กสเปซโดยรันpip install -rกับrequirements.txtไฟล์ของโครงการ

อนาคอนด้า: ผู้จัดการแพ็คเกจ + ผู้จัดการสิ่งแวดล้อม + ห้องสมุดวิทยาศาสตร์เพิ่มเติม

  • จากเอกสาร : Anaconda 4.2.0 มีการติดตั้ง Python (2.7.12, 3.4.5, และ / หรือ 3.5.2) ที่ง่ายและอัพเดทมากกว่า 100 แพ็กเกจ Python ทางวิทยาศาสตร์และการวิเคราะห์ที่สร้างไว้ล่วงหน้าและทดสอบแล้วซึ่งรวมถึง NumPy, Pandas , SciPy, Matplotlib และ IPython พร้อมแพ็กเกจมากกว่า 620 แพ็กเกจให้ใช้งานง่ายconda install <packagename>
  • ในฐานะนักพัฒนาเว็บฉันไม่ได้ใช้ Anaconda มัน ~ 3GB รวมถึงแพ็คเกจทั้งหมด
  • มีรุ่นที่บางลงminicondaซึ่งดูเหมือนว่าอาจเป็นตัวเลือกที่ง่ายกว่าการใช้pip+ virtualenvแม้ว่าฉันจะไม่มีประสบการณ์ในการใช้มันเป็นการส่วนตัว
  • แม้ว่าcondaคุณจะสามารถติดตั้งแพ็คเกจได้ แต่แพ็คเกจเหล่านี้แยกต่างหากจากแพ็คเกจ PyPI ดังนั้นคุณอาจต้องใช้ pip เพิ่มเติมตามประเภทของแพ็คเกจที่คุณต้องติดตั้ง

ดูสิ่งนี้ด้วย:


3
นี่อาจใช้การรีเฟรชได้ในขณะนี้ cf stackoverflow.com/a/49084152/14420
matt wilkie

9
สามารถอัปเดตเป็นรวมเป็นpipenv ได้หรือไม่เนื่องจากปัจจุบันเป็นเครื่องมือ Python ที่แนะนำอย่างเป็นทางการจาก Python.org
Wavesailor

1
ปัญหาในการติดตั้งห้องสมุดมูลค่า 3GB เป็นอย่างไร คุณไม่ต้องการปรับใช้ไลบรารีเหล่านั้นทั้งหมด แต่เพียงเพราะคุณมีการติดตั้งห้องสมุดมูลค่า 3GB ไม่ได้หมายความว่าคุณจำเป็นต้องปรับใช้ไลบรารีทั้งหมด และนั่นคือพื้นที่ว่างบนฮาร์ดไดรฟ์ในปัจจุบัน ปัจจุบันฉันใช้การติดตั้งอนาคอนดาและพวกเขาจัดการสภาพแวดล้อมของฉันด้วย venv แต่ฉันกำลังพิจารณาว่าจะใช้ conda สำหรับสภาพแวดล้อมเสมือนจริงของฉันด้วยหรือไม่ (ฉันไม่คิดว่าฉันจะทำ
David

@ David ฉันมาสายนิดหน่อย แต่คุณสามารถขยายvenv ดูเหมือนว่าเป็นขั้นตอนการทำงานที่ราบรื่นกว่าสำหรับฉันได้หรือไม่?
AMC

1

การเปรียบเทียบง่าย ๆ :

  • pyenv ~ rbenv
  • pip ~ bundler
  • virtual env ~ gemset ใน rvm สิ่งนี้สามารถจัดการได้โดย bundler โดยตรงโดยไม่มี gemset

ตั้งแต่ผมใช้ python3 ฉันชอบ python3 ตัวในสภาพแวดล้อมเสมือนจริงชื่อvenv venvนั้นง่ายและใช้งานง่าย ฉันอยากจะแนะนำให้คุณอ่านเอกสารอย่างเป็นทางการของมัน เอกสารสั้นและกระชับ

ในทับทิมเราไม่ต้องการสภาพแวดล้อมเสมือนจริงเพราะบันเดิลดูแลมัน ทั้ง virtual env และ bundler นั้นยอดเยี่ยม แต่มีแนวคิดที่แตกต่างกัน แต่พวกเขาพยายามที่จะแก้ปัญหาเดียวกัน

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