Pembekuan pip vs. daftar pip


111

Perbandingan keluaran menunjukkan perbedaan:

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

Dokumentasi Pip menyatakan

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

tapi apa itu "format persyaratan", dan mengapa pip listmenghasilkan daftar yang lebih komprehensif pip freeze?


5
FYI, ini dokumentasinya .
— alecxe

Jawaban:


109

Saat Anda menggunakan virtualenv, Anda dapat menentukan arequirements.txt file untuk menginstal semua dependensi.

Penggunaan tipikal:

$ pip install -r requirements.txt

Paket-paket tersebut harus dalam format tertentu agar pipdapat dipahami, yaitu

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

Itu adalah "format persyaratan".

Di sini, django==1.4.2tersirat djangoversi instal 1.4.2(meskipun yang terbaru adalah 1.6.x). Jika Anda tidak menentukan ==1.4.2, versi terbaru yang tersedia akan diinstal.

Anda dapat membaca lebih lanjut di " Virtualenv and pip Basics ", dan dokumentasi resmi " Requirements File Format ".


5
Mengerti. Adakah alasan khusus mengapa "daftar" menghasilkan daftar yang lebih komprehensif daripada "dibekukan"?
— nitrl

2
saya pikir itu karena pip listdaftar semuanya, dan pip freezemenginstal semua yang diinstal oleh pip.
— karthikr

Hm, itu teori, tapi saya cukup yakin tidak pip install wsgiref.
— nitrl

Python 3.2 termasuk wsgiref.egg-infodalam direktori Lib, itulah sebabnya pip tahu tentang itu. Anda tidak dapat [membatalkan] menginstalnya dengan pip, dan versi Python yang lebih baru menghilangkan file metadata sehingga tidak akan muncul.
— Zooba

1
@leonid jika Anda menghilangkan nomor versi di akhir, itu akan menginstal versi terbaru dari pypi. Bacalah jawabannya dengan lengkap
— karthikr

42

Untuk menjawab bagian kedua dari pertanyaan ini, dua paket ditampilkan di pip listtetapi tidak pip freezeyang setuptools(yang easy_install) dan pipdirinya sendiri.

Sepertinya pip freezetidak mencantumkan paket yang bergantung pada pip itu sendiri. Anda dapat menggunakan --allbendera untuk menunjukkan juga paket-paket itu.

Dari dokumentasi :

--all

Jangan lewati paket-paket ini di output: pip, setuptools, distribut, wheel


3
pip freezememiliki opsi --alluntuk ditampilkan juga: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
— Chananel P

kurang didistribusikan
— Max Kleiner

37

Perbedaan utamanya adalah hasil dari pip freeze dapat dibuang ke file Requirement.txt dan digunakan nanti untuk membangun kembali lingkungan "beku".

Dengan kata lain Anda dapat menjalankan: pip freeze > frozen-requirements.txtpada satu mesin dan kemudian pada mesin yang berbeda atau pada lingkungan yang bersih yang dapat Anda lakukan: pip install -r frozen-requirements.txt dan Anda akan mendapatkan lingkungan yang identik dengan dependensi yang sama persis terpasang seperti yang Anda miliki di lingkungan asli tempat Anda menghasilkan frozen-requirement.txt.


26

Lihat dokumentasi pip , yang menjelaskan fungsionalitas keduanya sebagai:

daftar pip

Buat daftar paket yang diinstal, termasuk yang dapat diedit.

pip freeze

Keluarkan paket yang diinstal dalam format persyaratan.

Jadi ada dua perbedaan:

  1. Format keluaran, freezememberi kita format persyaratan standar yang dapat digunakan nanti dengan pip install -runtuk menginstal persyaratan.

  2. Output konten, pip listtermasuk editable yang pip freezetidak.


apa yang kami maksud dengan dapat diedit?
— Tn. Suryaa Jha


6

pip listmenunjukkan SEMUA paket yang diinstal.

pip freezemenunjukkan paket yang ANDA instal melalui pip(ataupipenv jika menggunakan alat itu) perintah dalam format persyaratan.

Catatan di bawah bahwa setuptools , pip , wheel diinstal saat pipenv shellmembuat amplop virtual saya. Paket-paket ini TIDAK diinstal oleh saya menggunakan 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>

Sekarang tinjau & bandingkan output dari masing-masing perintah di mana saya hanya menginstal cool-lib dan sampleproject (di mana merica adalah ketergantungan):

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

daftar pip - menunjukkan paket yang diinstal, bukan SEMUA. Cek dokumentasi resmi dan jawaban dari Daniel Lahyani.
— filler36

1
@ filler36: Saya pikir "terinstal" tersirat, namun tetap memasukkan umpan balik Anda untuk memastikan ambiguitas tidak menimbulkan potensi kebingungan. Terima kasih atas tanggapan Anda, sangat berterima kasih! - T
— F1Linux
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.