Python มีระบบการจัดการแพ็คเกจ / โมดูลหรือไม่?


145

Python มีระบบการจัดการแพ็กเกจ / โมดูลเหมือนกับ Ruby ที่มี rubygems gem install packagenameหรือไม่?

ในการติดตั้งโมดูล Pythonฉันเห็นการอ้างอิงpython setup.py installเท่านั้น แต่คุณต้องหาแพ็คเกจก่อน


3
หากคุณคิดว่าดัชนีแพคเกจ ธ PyPI ควรมีคำแนะนำที่ชัดเจนวิธีการติดตั้งแพคเกจกรุณาลงคะแนนและแสดงความคิดเห็นเกี่ยวกับปัญหาที่bitbucket.org/pypa/pypi/issue/149/...
พันเอก Panic

ในขณะที่มันเป็นปัจจุบันในเวลานั้นการเชื่อมโยงในคำถามนี้อยู่ในเอกสารคู่มือ distutils ดั้งเดิม ฉันได้ยื่นbugs.python.org/issue26014เพื่อปกปิดว่าเอกสารเหล่านี้ต้องชัดเจนว่าเอกสารดังกล่าวไม่เหมาะสำหรับใช้เป็นเอกสารประกอบสำหรับผู้ใช้อีกต่อไป
ncoghlan

คำตอบ:


213

ความคืบหน้าล่

มีนาคม 2014 : ข่าวดี! Python 3.4มาพร้อมกับ Pip Pip เป็นผู้จัดการแพคเกจมาตรฐานของพฤตินัยมานานแล้ว คุณสามารถติดตั้งแพ็คเกจดังนี้:

pip install httpie

Wahey! นี่เป็นคุณสมบัติที่ดีที่สุดของ Python ทุกรุ่น มันทำให้ทุกคนในชุมชนสามารถเข้าถึงห้องสมุดได้ มือใหม่จะไม่ถูกแยกออกจากการใช้ห้องสมุดชุมชนอีกต่อไปด้วยความยากลำบากในการตั้งค่า

อย่างไรก็ตามยังคงมีความผิดหวังอย่างมากกับประสบการณ์บรรจุภัณฑ์ Python พวกเขาทำให้ Python ไม่รู้จักสำหรับมือใหม่มาก นอกจากนี้ประวัติศาสตร์อันยาวนานของการถูกทอดทิ้ง (เช่นไม่ได้จัดส่งกับผู้จัดการแพคเกจเป็นเวลา 14 ปีจาก Python 2.0 ถึง Python 3.3) ได้สร้างความเสียหายให้กับชุมชน ฉันอธิบายทั้งสองด้านล่าง

ความผิดหวังที่โดดเด่น

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

เว็บไซต์ของ PyPI นั้นต่อต้านการทำธุรกรรม

ทุกภาษาที่มีตัวจัดการแพคเกจมีที่เก็บอย่างเป็นทางการ (หรือกึ่งทางการ) สำหรับชุมชนเพื่อดาวน์โหลดและเผยแพร่แพ็คเกจ Python มีดัชนีแพ็คเกจ Python คือ PyPI https://pypi.python.org/pypi

ลองเปรียบเทียบหน้าเว็บกับหน้า RubyGems และ Npm (ตัวจัดการแพ็คเกจ Node)

  1. https://rubygems.org/gems/railsหน้า RubyGems สำหรับแพ็คเกจrails
  2. https://www.npmjs.org/package/expressหน้า Npm สำหรับแพ็คเกจexpress
  3. https://pypi.python.org/pypi/simplejson/หน้า PyPI สำหรับแพ็คเกจsimplejson

คุณจะเห็นหน้า RubyGems และ Npm เริ่มต้นด้วยคำอธิบายหนึ่งบรรทัดของแพคเกจจากนั้นคำแนะนำที่เป็นมิตรขนาดใหญ่วิธีการติดตั้ง

ในขณะเดียวกันความฉิบหายของผู้ใช้ Python ผู้เคราะห์ร้ายที่เรียกดู PyPI อย่างไร้เดียงสา ในhttps://pypi.python.org/pypi/simplejson/พวกเขาจะไม่พบคำแนะนำที่เป็นประโยชน์เช่นนั้น อย่างไรก็ตามมีลิงค์ 'ดาวน์โหลด' สีเขียวขนาดใหญ่ ไม่มีเหตุผลที่จะติดตามมัน อ๊ะพวกเขาคลิก! เบราว์เซอร์ของพวกเขาดาวน์โหลด.tar.gzไฟล์ ผู้ใช้ Windows หลายคนไม่สามารถเปิดได้ แต่ถ้าพวกเขาพยายามอย่างหนักในที่สุดพวกเขาก็สามารถดึงมันออกมาจากนั้นก็ทำงานsetup.pyและในที่สุดด้วยความช่วยเหลือของ Google setup.py installบางคนจะยอมแพ้และบูรณาการล้อ ..

แน่นอนว่าทั้งหมดนี้ผิด ง่ายที่สุดวิธีการติดตั้งแพคเกจอยู่กับคำสั่ง Pip แต่ PyPI ไม่ได้พูดถึง Pip แต่มันนำพวกเขาไปสู่เส้นทางที่เก่าแก่และน่าเบื่อ

ข้อผิดพลาด: ไม่พบ vcvarsall.bat

Numpy เป็นหนึ่งในห้องสมุดยอดนิยมของไพ ธ อน ลองติดตั้งด้วย Pip คุณจะได้รับข้อความแสดงข้อผิดพลาด:

ข้อผิดพลาด: ไม่พบ vcvarsall.bat

กำลังพยายามแก้ไขที่เป็นหนึ่งในคำถามยอดนิยมใน Stack Overflow: " ข้อผิดพลาด: ไม่พบ vcvarsall.bat "

ไม่กี่คนที่ประสบความสำเร็จ

สำหรับการเปรียบเทียบในสถานการณ์เดียวกันทับทิมพิมพ์ข้อความนี้ซึ่งอธิบายสิ่งที่เกิดขึ้นและวิธีแก้ไข:

โปรดอัปเดต PATH ของคุณเพื่อรวมเครื่องมือสร้างหรือดาวน์โหลด DevKit จากhttp://rubyinstaller.org/downloadsและทำตามคำแนะนำที่http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

แพ็คเกจการพิมพ์นั้นยาก

Ruby และ Nodejs มาพร้อมกับผู้จัดการแพคเกจเต็มรูปแบบ, Gem (ตั้งแต่ปี 2007) และ Npm (ตั้งแต่ปี 2011) และมีชุมชนการแบ่งปันที่ได้รับการอบรมเป็นศูนย์กลาง GitHub Npm ทำให้แพ็คเกจการประกาศเป็นเรื่องง่ายเหมือนกับการติดตั้งแพคเกจนั้นมีแพคเกจ 64kอยู่แล้ว RubyGems รายการแพคเกจ 72K เคารพหลามรายการดัชนีแพคเกจเพียง 41K

ประวัติศาสตร์

บินผ่านหน้าคำขวัญ " รวมแบตเตอรี่ " ของมัน Python จัดส่งโดยไม่มีผู้จัดการแพ็คเกจจนถึงปี 2014

จนกระทั่ง Pip easy_installมาตรฐานพฤตินัยเป็นคำสั่ง มันไม่เพียงพอละห้อย คำสั่ง was ไม่มีคำสั่งให้ถอนการติดตั้งแพ็กเกจ

พิพเป็นการปรับปรุงครั้งใหญ่ มันมีคุณสมบัติส่วนใหญ่ของ Ruby's Ruby น่าเสียดายที่ Pip เป็น - จนกระทั่งเมื่อไม่นานมานี้ - ติดตั้งยาก ความจริงแล้วปัญหายังคงเป็นคำถาม Python อันดับต้น ๆ ของ Stack Overflow: " ฉันจะติดตั้ง pip บน Windows ได้อย่างไร "


3
สำหรับผู้ที่สนใจPEP 439กำลังเสนอวิธีการปรับปรุงกระบวนการติดตั้ง pip แม้ว่าฉันคิดว่า PEP นี้เป็นเพียงส่วนหนึ่งของกลยุทธ์ที่กว้างขึ้นที่ถูกมอง ดูการสนทนาที่นี่ด้วย
Cartroo

3
@ Cartroo นั่นเป็นข่าวดี! Python สมควรได้รับการเป็นผู้จัดการแพ็คเกจฉันหวังว่า devs สามารถทำให้มันเกิดขึ้นได้
พันเอก Panic

แน่นอนเกินกำหนดเป็นเวลานาน ฉันหวังอย่างยิ่งว่ามันจะทำให้เป็น Python 3.4 อย่างน้อย น่าเสียดายที่ฉันสงสัยมากว่ามันจะจบลงด้วยการถูกย้ายกลับไปที่ 2.x แต่มีแสงสว่างอย่างน้อยที่ปลายอุโมงค์ เราแค่หวังว่ามันจะไม่ใช่มังกรที่กำลังจะมาถึง ... (^_^)
Cartroo

6
ในการป้องกันของ Python ภาษาที่ใหม่กว่าเช่น Ruby และ Node นั้นโชคดีที่สามารถสังเกตความผิดพลาดของภาษาก่อนหน้าและหลีกเลี่ยง ที่กล่าวว่าฉันต้องการการจัดการแพ็กเกจบน Python จริง ๆ จะได้รับความรักและการดูแลมากขึ้นดังนั้นฉันดีใจที่ได้เห็น PEP 439 ตามที่ระบุไว้โดย @Cartroo
เดนนิส

ฉันยอมรับว่าการจัดการแพ็คเกจของ Ruby เป็นสิ่งที่ยอดเยี่ยมจากมุมมองของฉัน (ผู้ใช้ปลายทาง) .. gem install Xดูเหมือนว่าจะใช้ได้กับทุกแพลตฟอร์ม ดังนั้นพวกเขาจัดการเรื่องนี้สำหรับอัญมณีที่ต้องมีการรวบรวมรหัส C บน Windows ได้อย่างไร?
bsa

64

Python Package Index (PyPI)ดูเหมือนจะเป็นมาตรฐาน:

  • ในการติดตั้งแพ็คเกจ: pip install MyProject
  • เพื่ออัพเดทแพ็คเกจ pip install --upgrade MyProject
  • เพื่อแก้ไขเวอร์ชันของแพ็คเกจpip install MyProject==1.0

คุณสามารถติดตั้งตัวจัดการแพ็คเกจได้ดังนี้:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

อ้างอิง:


3
นี่คือคำตอบที่ทันสมัย
Gringo Suave

6
ฉันค้นหาอินเทอร์เน็ตเป็นเวลา 20 นาทีและคำตอบนี้ไม่มีที่ไหนเลย ขอบคุณมาก. นอกจากนี้ฉันมีข้อสงสัยอย่างจริงจังเกี่ยวกับการใช้ python ถ้าเอกสารนี้ไม่ดี ... นี่ควรจะอยู่ในหน้าหลักของ Python หรือสามารถเข้าถึงได้จาก google หรือบางสิ่งบางอย่าง
Chris J

63

และเพื่อให้ความแตกต่างมีpipด้วย


2
ขอบคุณ! ทำไม pip ถึงไม่ได้กล่าวถึงในหน้าเอกสารการติดตั้งโมดูล
tommy chheng

โปรดทราบว่า pip ไม่รองรับไข่ แต่จะติดตั้งแพ็คเกจต้นทางเท่านั้น โดยทั่วไปแล้ว pip จะทำสิ่งต่าง ๆ ได้ดีกว่า easy_install มาก แต่ easy_install มีแนวโน้มที่จะถูกติดตั้งตามค่าเริ่มต้นใน unixes ส่วนใหญ่ pip ไม่ได้
Jeffrey Harris

8
@ ทอมมี่ถูกต้อง! ถ้า Python devs ใส่ใจกับประสบการณ์การใช้งานของพวกเขาพวกเขาจะจัดส่ง Python กับผู้จัดการแพ็คเกจ (เช่น pip) Ruby มาพร้อมกับ Gem และ Nodejs ที่มี Npm stackoverflow.com/a/13445719/284795
พันเอก Panic

21

ในฐานะนักพัฒนา Ruby และ Perl และการเรียนรู้ -Python ผู้ชายฉันไม่พบ easy_install หรือ pip ที่เทียบเท่ากับ RubyGems หรือ CPAN

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

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

ดังนั้นฟังก์ชั่นพื้นฐานมีอยู่ใน pip และ easy_install แต่มีคุณสมบัติที่ขาดหายไปซึ่งฉันต้องการดูว่าจะทำให้ใช้งานได้ง่ายขึ้นและใช้งานได้ดีกว่าเสมอกับ CPAN และ RubyGems


คำตอบนี้ดีและล้าสมัยอย่างแท้จริงแล้ว
ncoghlan


11

อย่างน้อยช่วงปลายปี 2014 การแจกจ่ายAnaconda Python ของAn งูonda Analyticsกับผู้จัดการแพคเกจcondaควรได้รับการพิจารณา ช่วยแก้ปัญหาร้ายแรงส่วนใหญ่ที่คนใช้กับ Python โดยทั่วไป (การจัดการเวอร์ชัน Python ที่แตกต่างกัน, การอัพเดตเวอร์ชัน Python, การจัดการแพ็คเกจ, สภาพแวดล้อมเสมือนจริง, การทำงานร่วมกันของ Windows / Mac) ในการดาวน์โหลดหนึ่งครั้ง

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


7

ที่ต้องการจะeasy_install


1
หากคุณต้องการลงคะแนนให้กับทุกคนในหน้าเว็บที่กล่าวeasy_installโปรดตรวจสอบวันที่ก่อน นั่นเป็นคำแนะนำที่ถูกต้องเมื่อมันได้รับเกือบ 7 ปีที่ผ่านมา ฉันไม่คิดว่าพวกเราผู้ตอบจะต้องทบทวนสิ่งนี้เพื่ออัพเดทอยู่เสมอดังนั้นการ downvoting จึงเป็นเรื่องโง่
Kirk Strauser


5

ฉันไม่เห็นMacPortsหรือHomebrew ที่กล่าวถึงในคำตอบอื่น ๆ ที่นี่ แต่เนื่องจากฉันเห็นพวกเขากล่าวถึงที่อื่น ๆ ใน Stack Overflow สำหรับคำถามที่เกี่ยวข้องฉันจะเพิ่ม US $ 0.02 ของตัวเองเพื่อให้คนจำนวนมากมองว่าMacPortsไม่ใช่แค่แพ็คเกจ ผู้จัดการสำหรับแพ็คเกจโดยทั่วไป (ณ วันนี้พวกเขาแสดงรายการแพคเกจ / พอร์ต 16311, 2931 ที่ตรงกับ "python" แม้ว่าจะเป็นเพียงสำหรับ Macs) แต่ยังเป็นตัวจัดการแพ็คเกจที่ดี (อาจจะดีกว่า) สำหรับแพ็คเกจ / โมดูล Python:

คำถาม

"... วิธีการที่นักพัฒนางูหลาม Mac ใช้ในการจัดการโมดูลของพวกเขาคืออะไร"

คำตอบ

SciPy

"Mac (ไม่เหมือน Linux) ไม่ได้มาพร้อมกับตัวจัดการแพ็คเกจ แต่มีตัวจัดการแพคเกจยอดนิยมสองสามตัวที่คุณสามารถติดตั้งได้ Macports ... "

ฉันยังคงถกเถียงกันว่าควรจะใช้ MacPort ด้วยตัวเองหรือไม่ แต่ตอนนี้ฉันกำลังโน้มตัวไปในทิศทางนั้น


1
Homebrew เองบอกว่า: คุณสามารถติดตั้งแพ็กเกจ Python ด้วย (the easy_install ที่ล้าสมัยหรือ) pip install <your_favorite_package>
Simone

4

ใน Windows ให้ติดตั้งhttp://chocolatey.org/จากนั้น

choco install python

เปิดหน้าต่าง cmd ใหม่พร้อมกับ PATH ที่อัพเดท ถัดไปทำ

choco install pip

หลังจากนั้นคุณสามารถ

pip install pyside
pip install ipython
...

ผมอยากจะตอบคำถามนี้เป็นความคิดเห็นที่จะตอบโทมัสแบรต แต่ฉันไม่ได้มีชื่อเสียงพอ ...
hansvb

3

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

ดังที่ @ColonelPanic กล่าวถึงมีปัญหาหลายประการเกี่ยวกับPython Package Indexและpipและvirtualenvด้วย

Pipenvแก้ปัญหาส่วนใหญ่ด้วย pip และให้คุณสมบัติเพิ่มเติมด้วย

คุณสมบัติ Pipenv

Pipenv มีวัตถุประสงค์เพื่อแทนที่ pip และ virtualenv ซึ่งหมายความว่า pipenv จะสร้างสภาพแวดล้อมเสมือนจริงแยกต่างหากโดยอัตโนมัติสำหรับทุกโครงการจึงหลีกเลี่ยงความขัดแย้งระหว่างเวอร์ชันของงูหลาม / แพ็คเกจรุ่นที่แตกต่างกันสำหรับโครงการที่แตกต่างกัน

  • เปิดใช้งานการสร้างที่กำหนดขึ้นจริงอย่างแท้จริงในขณะที่ระบุสิ่งที่คุณต้องการได้อย่างง่ายดาย
  • สร้างและตรวจสอบไฟล์แฮชสำหรับการขึ้นต่อกันที่ถูกล็อค
  • ติดตั้ง Pythons ที่ต้องการโดยอัตโนมัติหากมี pyenv
  • ค้นหาโปรเจคของคุณที่บ้านโดยอัตโนมัติซ้ำโดยค้นหา Pipfile
  • สร้าง Pipfile โดยอัตโนมัติหากไม่มีอยู่
  • สร้าง virtualenv โดยอัตโนมัติในตำแหน่งมาตรฐาน
  • เพิ่ม / ลบแพ็คเกจไปยัง Pipfile โดยอัตโนมัติเมื่อไม่ได้ติดตั้ง
  • โหลดไฟล์. env โดยอัตโนมัติหากมีอยู่

หากคุณเคยทำงานในโครงการงูหลามมาก่อนคุณจะตระหนักถึงคุณสมบัติเหล่านี้ทำให้การจัดการแพ็คเกจทำได้ง่ายขึ้น

คำสั่งอื่น ๆ

  • checkตรวจสอบช่องโหว่ด้านความปลอดภัยและยืนยันว่าเป็นไปตามข้อกำหนด PEP 508 ตามสภาพแวดล้อมปัจจุบัน ( ซึ่งฉันคิดว่าเป็นคุณสมบัติที่ยอดเยี่ยมโดยเฉพาะหลังจากนี้ - แพ็คเกจที่เป็นอันตรายใน PyPi )
  • graph จะแสดงกราฟการพึ่งพาของการอ้างอิงที่ติดตั้งของคุณ

คุณสามารถอ่านเพิ่มเติมได้ที่นี่ - Pipenv

การติดตั้ง

คุณสามารถค้นหาเอกสารการติดตั้งได้ที่นี่

PS: ถ้าคุณชอบทำงานกับคำขอ Python Package คุณยินดีที่จะรู้ว่าpipenvนั้นเป็นผู้พัฒนารายเดียวกันKenneth Reitz



0

บทกวีคือสิ่งที่คุณกำลังมองหา จะดูแลการจัดการการพึ่งพาสภาพแวดล้อมเสมือนจริงทำงาน

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