apt-get install vs pip install


103

ฉันสับสนเล็กน้อยเกี่ยวกับกรณีที่ต้องใช้คำสั่งข้างต้นเมื่อดาวน์โหลดแพ็คเกจหลาม ฉันพยายามดาวน์โหลดแพ็คเกจชื่อ pyudev ตามคำตอบของคำถามนี้ ฉันใช้คำสั่งนี้:

sudo pip install python-pyudev

แต่ได้รับข้อความต่อไปนี้:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

อย่างไรก็ตามสิ่งต่อไปนี้ใช้ได้ผล:

sudo apt-get install python-pyudev

เมื่อเป็นที่apt-getควรจะนำมาใช้ในการติดตั้งแพคเกจและเมื่อมีการpython-pipใช้งานอย่างไร


2
pipใช้เพื่อติดตั้งแพ็กเกจหลามเท่านั้น แต่apt-getใช้เพื่อติดตั้งแพ็คเกจทั้งหมด
Avinash Raj

3
ตกลง .. ดังนั้นทำไม pip ไม่สามารถติดตั้ง python-pyudev ได้
Vineet Kaushik

คำตอบ:


100

PyPIเป็นดัชนี Python Package - ที่เก็บของโมดูล python

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

apt-get ใช้ในการดาวน์โหลดและติดตั้งแพคเกจจากแหล่งเก็บข้อมูล Ubuntu ซึ่งโฮสต์โดย Canonical

ข้อแตกต่างบางประการระหว่างการติดตั้งแพ็กเกจหลามจากapt-getและpipมีดังนี้:

  • Canonical ให้บริการแพ็คเกจสำหรับโมดูลหลามที่เลือกเท่านั้น ในขณะที่ PyPI โฮสต์โมดูลหลามที่กว้างกว่ามาก ดังนั้นจึงมีโมดูลหลามมากมายที่คุณจะไม่สามารถติดตั้งapt-getได้

  • Canonical โฮสต์เพียงแพ็คเกจเดียวเท่านั้น (โดยทั่วไปคือรุ่นล่าสุดหรือรุ่นที่เผยแพร่ในอดีตที่ผ่านมา) ดังนั้นด้วยapt-getเราไม่สามารถตัดสินใจเวอร์ชันของ python-package ที่เราต้องการ pipช่วยเราในสถานการณ์เช่นนี้ เราสามารถติดตั้งแพ็คเกจใดก็ได้ที่เคยอัพโหลดไว้บน PyPI สิ่งนี้มีประโยชน์อย่างมากในกรณีที่มีความขัดแย้งในการพึ่งพา

  • apt-getติดตั้งโมดูลหลามในตำแหน่งที่ทั้งระบบ เราก็ไม่สามารถติดตั้งโมดูลในโครงการของเราvirtualenv pipแก้ปัญหานี้ให้เรา ถ้าเราใช้pipหลังจากเปิดใช้งาน virtualenv มันก็ฉลาดพอที่จะติดตั้งเฉพาะโมดูลใน virtualenv โครงการของเรา ตามที่กล่าวไว้ในประเด็นก่อนหน้านี้หากมีแพคเกจหลามรุ่นหนึ่งที่ติดตั้งไว้แล้วในตำแหน่งที่ใช้กับระบบและหนึ่งในโครงการของเราต้องการแพ็คเกจหลามรุ่นเก่ากว่าในสถานการณ์เช่นนี้เราสามารถใช้ virtualenv และ pip ​​เพื่อติดตั้ง แพ็คเกจ python เวอร์ชันเก่ากว่านั้นโดยไม่มีข้อขัดแย้งใด ๆ

  • เนื่องจาก@Radu Rădeanuชี้ให้เห็นในคำตอบนี้โดยทั่วไปจะมีความแตกต่างในชื่อของแพคเกจเช่นกัน Canonical มักจะชื่องูหลาม 2 แพคเกจpython-<package_name>และ Python 3 python3-<package_name>แพคเกจ โดยpipทั่วไปแล้วเราจำเป็นต้องใช้<package_name>ทั้งแพ็คเกจ Python 2 และ Python3 เท่านั้น

คุณควรใช้อันไหน:

ทั้งสองapt-getและpipเป็นผู้จัดการแพคเกจที่เป็นผู้ใหญ่ซึ่งติดตั้งแพคเกจพึ่งพาอื่น ๆ โดยอัตโนมัติขณะติดตั้ง คุณสามารถใช้ใครก็ได้ตามที่คุณต้องการ อย่างไรก็ตามถ้าคุณต้องการติดตั้ง python-package รุ่นใดรุ่นหนึ่งหรือติดตั้งแพ็คเกจใน virtualenv หรือติดตั้งแพ็คเกจที่โฮสต์บน PyPI เท่านั้น เพียง แต่pipจะช่วยให้คุณแก้ปัญหาที่ มิฉะนั้นถ้าคุณไม่ทราบติดตั้งแพคเกจในสถานที่ทั้งระบบมันไม่ได้เรื่องจริงๆว่าคุณจะใช้หรือapt-getpip


5
นอกจากนี้คุณควรพยายามใช้อย่างใดอย่างหนึ่งและไม่ใช่ทั้งสองอย่างpipและพร้อมapt-getกัน
earthmeLon

3
apt-getไม่ช้าก็เร็วคนหนึ่งอาจต้องแพคเกจหรือรุ่นดังกล่าวที่ไม่ได้จัดไว้ให้โดย เนื่องจากการใช้ทั้งสองอย่างapt-getและpipอาจทำให้เกิดข้อขัดแย้งคำแนะนำควรใช้pipกับแพ็คเกจที่สนับสนุนเสมอpipหรือไม่
Abhishek Anand

2
@Abhishek วิธีการที่ฉันชอบคือใช้ Python ผ่าน virtualenv เสมอดังนั้นใช่ฉันชอบใช้ pip มากกว่า apt ..
Aditya

ที่เปิดกระป๋องหนอนของตัวเองในบางสถานการณ์ สมมติว่าคุณติดตั้งแพคเกจส่วนใหญ่ของคุณsudo pipโดยที่ไม่มีvirtualenvเพราะโครงการส่วนใหญ่ของคุณต้องการสภาพแวดล้อมเดียวกัน (แต่ครอบคลุมมากกว่าสิ่งที่มาพร้อมกับการติดตั้ง Ubuntu ที่สะอาด) จากนั้นเมื่อคุณทำอัพเกรดระบบและ Ubuntu ตัดสินใจที่จะอัพเกรด Python เป็นรุ่นใหม่ (เช่นเดียวกับzestyการartful- งูหลาม 3.5-3.6) ทั้งหมดของแพคเกจ pip ติดตั้งของคุณในการ/usrทิ้งและการpip.get_installed_distributions()ผลิตรายการที่ว่างเปล่า
z33k

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

21

ในฐานะที่เป็น @AvinashRaj กล่าวว่าในความคิดเห็นของเขา , pipจะใช้ในการติดตั้งแพคเกจหลามเพียง แต่apt-getจะใช้ในการติดตั้งแพคเกจที่สร้างขึ้นในการเขียนโปรแกรมภาษาใด ๆ

ปัญหาหลักของคุณคือค้นหาชื่อแพ็คเกจที่ถูกต้องในทั้งสองกรณี:

pip search pyudev

จะให้ชื่อที่เหมาะสมสำหรับแพคเกจที่คุณต้องการในการติดตั้งใช้pip installเป็น

apt-cache search pyudev

จะให้ชื่อที่ถูกต้องสำหรับแพ็คเกจที่คุณต้องการติดตั้งโดยใช้apt-get install:

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

ดังนั้นใน conlusion ผู้สื่อข่าวของsudo apt-get install python-pyudevคือไม่sudo pip install pyudevsudo pip install python-pyudev

ตอนนี้ขึ้นอยู่กับสิ่งที่คุณต้องการที่จะเลือกเมื่อคุณต้องการติดตั้งแพคเกจหลาม: หรือpip apt-getดูตัวอย่างQ & A นี้เกี่ยวกับความแตกต่างในการติดตั้งแพคเกจที่ใช้และpipapt-get


2

วิธีที่ฉันชอบคือใช้ตลอดเวลาaptและเฉพาะในกรณีที่โมดูลยังไม่สามารถใช้ได้ในที่เก็บ Debian / Ubuntu ที่จะใช้pipแต่เฉพาะในบริบทผู้ใช้ - --userตั้งค่าสถานะ โดยการใช้งานpipอย่างใดอย่างหนึ่งจะต้องได้รับการติดตั้ง build-dependencies ทั้งหมดจากสมมุติว่าที่เก็บของ Ubuntu หรือให้พวกเขาเองซึ่งอาจเป็นงานที่น่าเบื่อ apt-getติดตั้งแพคเกจไบนารีในขณะที่pipสร้างพวกเขาหลังจากดาวน์โหลด ไม่ควรใช้ pip เพื่อติดตั้งโมดูลในตำแหน่งของระบบ นี่เป็นสิ่งที่ผิดธรรมดา ใช้--userค่าสถานะเพื่อติดตั้งโมดูลไปยังตำแหน่งบ้านเสมอ กำหนดค่าอย่างถูก PYTHONPATH apt-getให้งูหลามจะรับโมดูลจากที่บ้านเป็นครั้งแรกแล้วโมดูลระบบที่ติดตั้งด้วย

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