Pip หยุดเทียบกับรายการ pip


114

การเปรียบเทียบผลลัพธ์แสดงให้เห็นความแตกต่าง:

user@user-VirtualBox:~$ pip list
feedparser (5.1.3)
pip (1.4.1)
setuptools (1.1.5)
wsgiref (0.1.2)
user@user-VirtualBox:~$ pip freeze
feedparser==5.1.3
wsgiref==0.1.2

สถานะเอกสารของ Pip

freeze                      Output installed packages in requirements format.
list                        List installed packages.

แต่ "รูปแบบข้อกำหนด" คืออะไรและเหตุใดจึงpip listสร้างรายการที่ครอบคลุมมากกว่าpip freeze?


5
FYI นี่เป็นเอกสาร
alecxe

คำตอบ:


111

เมื่อคุณใช้ a virtualenvคุณสามารถระบุไฟล์requirements.txtไฟล์เพื่อติดตั้งการอ้างอิงทั้งหมด

การใช้งานทั่วไป:

$ pip install -r requirements.txt

แพ็คเกจต้องอยู่ในรูปแบบเฉพาะเพื่อpipให้เข้าใจซึ่งก็คือ

feedparser==5.1.3
wsgiref==0.1.2
django==1.4.2
...

นั่นคือ "รูปแบบข้อกำหนด"

ในที่นี้django==1.4.2หมายถึงdjangoเวอร์ชันการติดตั้ง1.4.2(แม้ว่าล่าสุดคือ 1.6.x) หากคุณไม่ระบุ==1.4.2เวอร์ชันล่าสุดที่พร้อมใช้งานจะได้รับการติดตั้ง

คุณสามารถอ่านเพิ่มเติมได้ใน " Virtualenv และ pip ​​Basics " และเอกสาร " Requirements File Format " อย่างเป็นทางการ


5
เข้าใจแล้ว มีเหตุผลใดเป็นพิเศษหรือไม่ที่ทำให้ "รายการ" สร้างรายการที่ครอบคลุมมากกว่า "ตรึง"
nitrl

2
ฉันคิดว่าเป็นเพราะpip listแสดงรายการทุกอย่างและpip freezeติดตั้งทุกอย่างที่ติดตั้งโดย pip
karthikr

หืมมมนั่นคือทฤษฎี pip install wsgirefแต่ผมค่อนข้างแน่ใจว่าฉันไม่ได้
nitrl

Python 3.2 รวมwsgiref.egg-infoอยู่ในไดเรกทอรี Lib ด้วยเหตุนี้ pip จึงรู้เรื่องนี้ คุณไม่สามารถ [ยกเลิก] ติดตั้งด้วย pip และ Python เวอร์ชันที่ใหม่กว่าจะละเว้นไฟล์ข้อมูลเมตาดังนั้นจึงไม่ปรากฏ
Zooba

1
@leonid หากคุณกำจัดหมายเลขเวอร์ชันในตอนท้ายก็จะติดตั้งเวอร์ชันล่าสุดจาก pypi อ่านคำตอบให้ครบถ้วน
karthikr

42

เพื่อตอบส่วนที่สองของคำถามนี้ทั้งสองแพ็คเกจที่แสดงในpip listแต่ไม่ใช่pip freezeคือsetuptools(ซึ่งก็คือ easy_install) และpipตัวมันเอง

ดูเหมือนว่าpip freezeจะไม่แสดงรายการแพ็คเกจที่ pip ขึ้นอยู่กับตัวเอง คุณอาจใช้ไฟล์--allแฟล็กเพื่อแสดงแพ็คเกจเหล่านั้นด้วย

จากเอกสารประกอบ :

--all

อย่าข้ามแพ็กเกจเหล่านี้ในเอาต์พุต: pip, setuptools, distribution, wheel


3
pip freezeมีตัวเลือก--allให้แสดงด้วย: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P

กระจายน้อย
Max Kleiner

40

ความแตกต่างที่สำคัญคือผลลัพธ์ของpip freezeสามารถถูกทิ้งลงในไฟล์ requirements.txt และใช้ในภายหลังเพื่อสร้างสภาพแวดล้อม "แช่แข็ง" ใหม่

กล่าวอีกนัยหนึ่งคุณสามารถเรียกใช้: pip freeze > frozen-requirements.txtบนเครื่องเดียวจากนั้นในเครื่องอื่นหรือในสภาพแวดล้อมที่สะอาดที่คุณสามารถทำได้: pip install -r frozen-requirements.txt และคุณจะได้รับสภาพแวดล้อมที่เหมือนกันพร้อมการติดตั้งการอ้างอิงเดียวกันกับที่คุณมีในสภาพแวดล้อมดั้งเดิมที่คุณ สร้างความต้องการแช่แข็ง txt


26

ดูเอกสาร pipซึ่งอธิบายการทำงานของทั้งสองอย่างดังนี้:

รายการ pip

แสดงรายการแพ็คเกจที่ติดตั้งรวมถึงสิ่งที่แก้ไขได้

pip แช่แข็ง

เอาต์พุตแพ็กเกจที่ติดตั้งในรูปแบบข้อกำหนด

ดังนั้นจึงมีความแตกต่างสองประการ:

  1. รูปแบบผลลัพธ์freezeทำให้เรามีรูปแบบข้อกำหนดมาตรฐานที่อาจใช้ในภายหลังpip install -rเพื่อติดตั้งข้อกำหนดจาก

  2. เนื้อหาที่ส่งออกpip listรวมถึงสิ่งที่แก้ไขได้ซึ่งpip freezeไม่มี



6

pip listแสดงแพ็คเกจที่ติดตั้งทั้งหมด

pip freezeแสดงแพ็คเกจที่คุณติดตั้งผ่านคำสั่งpip(หรือpipenvหากใช้เครื่องมือนั้น) ในรูปแบบข้อกำหนด

โปรดสังเกตด้านล่างว่าsetuptools , pip , wheel ได้รับการติดตั้งเมื่อpipenv shellสร้างซองเสมือนของฉัน ฉันไม่ได้ติดตั้งแพ็คเกจเหล่านี้โดยใช้pip:

test1 % pipenv shell
Creating a virtualenv for this project
Pipfile: /Users/terrence/Development/Python/Projects/test1/Pipfile
Using /usr/local/Cellar/pipenv/2018.11.26_3/libexec/bin/python3.8 (3.8.1) to create virtualenv
 Creating virtual environment...
<SNIP>
Installing setuptools, pip, wheel...
done.
 Successfully created virtual environment! 
<SNIP>

ตอนนี้ตรวจสอบและเปรียบเทียบผลลัพธ์ของคำสั่งที่เกี่ยวข้องซึ่งฉันได้ติดตั้งเฉพาะcool-libและsampleproject (ซึ่งpeppercornเป็นการพึ่งพา):

test1 % pip freeze       <== Packages I'VE installed w/ pip

-e git+https://github.com/gdamjan/hello-world-python-package.git@10<snip>71#egg=cool_lib
peppercorn==0.6
sampleproject==1.3.1


test1 % pip list         <== All packages, incl. ones I've NOT installed w/ pip

Package       Version Location                                                                    
------------- ------- --------------------------------------------------------------------------
cool-lib      0.1  /Users/terrence/.local/share/virtualenvs/test1-y2Zgz1D2/src/cool-lib           <== Installed w/ `pip` command
peppercorn    0.6       <== Dependency of "sampleproject"
pip           20.0.2  
sampleproject 1.3.1     <== Installed w/ `pip` command
setuptools    45.1.0  
wheel         0.34.2

รายการ pip - แสดงแพ็คเกจที่ติดตั้งไม่ใช่ทั้งหมด ตรวจสอบเอกสารอย่างเป็นทางการและคำตอบจาก Daniel Lahyani
filler36

1
@ filler36: ฉันคิดว่ามีการ "ติดตั้ง" โดยนัย แต่อย่างไรก็ตามได้รวมเอาคำติชมของคุณเข้าด้วยกันเพื่อให้แน่ใจว่าความคลุมเครือไม่ได้สร้างความสับสนที่อาจเกิดขึ้น ขอบคุณสำหรับความคิดเห็นของคุณเป็นอย่างยิ่ง! - T
F1Linux
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.