Pip đóng băng so với danh sách pip


110

So sánh kết quả đầu ra cho thấy sự khác biệt:

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

Tài liệu của Pip nêu rõ

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

nhưng "định dạng yêu cầu" là gì và tại sao lại pip listtạo ra một danh sách toàn diện hơn pip freeze?


5
FYI, đây là tài liệu .
alecxe

Câu trả lời:


108

Khi bạn đang sử dụng a virtualenv, bạn có thể chỉ định một requirements.txttệp để cài đặt tất cả các phần phụ thuộc.

Một cách sử dụng điển hình:

$ pip install -r requirements.txt

Các gói cần phải ở một định dạng cụ thể pipđể dễ hiểu, đó là

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

Đó là "định dạng yêu cầu".

Ở đây, django==1.4.2ngụ ý djangophiên bản cài đặt 1.4.2(mặc dù mới nhất là 1.6.x). Nếu bạn không chỉ định ==1.4.2, phiên bản mới nhất có sẵn sẽ được cài đặt.

Bạn có thể đọc thêm trong " Kiến thức cơ bản về Virtualenv và pip " và tài liệu " Định dạng tệp yêu cầu " chính thức .


5
Hiểu rồi. Có lý do cụ thể nào khiến "danh sách" tạo ra một danh sách toàn diện hơn "đóng băng" không?
nitrl

2
Tôi nghĩ đó là vì pip listliệt kê mọi thứ và pip freezecài đặt mọi thứ được cài đặt bằng pip.
karthikr

Hừm, đó là lý thuyết, nhưng tôi khá chắc chắn là mình đã không làm pip install wsgiref.
nitrl 24/09/13

Python 3.2 bao gồm wsgiref.egg-infotrong thư mục Lib, đó là lý do tại sao pip biết về nó. Bạn không thể [un] cài đặt nó bằng pip và các phiên bản Python sau này sẽ bỏ qua tệp siêu dữ liệu để nó sẽ không xuất hiện.
Zooba

1
@leonid nếu bạn loại bỏ số phiên bản ở cuối, nó sẽ cài đặt phiên bản mới nhất từ ​​pypi. Đọc câu trả lời hoàn toàn
karthikr

42

Để trả lời phần thứ hai của câu hỏi này, hai gói được hiển thị trong pip listnhưng không phải pip freezesetuptools(đó là easy_install) và pipchính nó.

Có vẻ như pip freezekhông liệt kê các gói mà chính pip phụ thuộc vào. Bạn có thể sử dụng --allcờ để hiển thị các gói đó.

Từ tài liệu :

--all

Đừng bỏ qua các gói này trong đầu ra: pip, setuptools, phân phối, bánh xe


3
pip freezecũng có một tùy chọn --allđể hiển thị: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P

ít phân phối hơn
Max Kleiner

37

Sự khác biệt chính là đầu ra của pip freezecó thể được kết xuất vào một tệp tin request.txt và được sử dụng sau đó để xây dựng lại môi trường "đóng băng".

Nói cách khác, bạn có thể chạy: pip freeze > frozen-requirements.txttrên một máy và sau đó trên một máy khác hoặc trên một môi trường sạch mà bạn có thể làm: pip install -r frozen-requirements.txt và bạn sẽ nhận được một môi trường giống hệt với các phần phụ thuộc được cài đặt chính xác như bạn đã có trong môi trường ban đầu nơi bạn đã tạo tệp tin đông lạnh-request.txt.


26

Xem tài liệu về pip , mô tả chức năng của cả hai như:

danh sách pip

Liệt kê các gói đã cài đặt, bao gồm cả các gói có thể chỉnh sửa.

đóng băng pip

Xuất các gói đã cài đặt ở định dạng yêu cầu.

Vì vậy, có hai điểm khác biệt:

  1. Định dạng đầu ra, freezecung cấp cho chúng tôi định dạng yêu cầu tiêu chuẩn có thể được sử dụng sau này pip install -rđể cài đặt các yêu cầu từ.

  2. Nội dung đầu ra, pip listbao gồm các nội dung có thể chỉnh sửa mà pip freezekhông.


chúng tôi có nghĩa là gì bởi có thể chỉnh sửa?
Ông Suryaa Jha


5

pip listhiển thị TẤT CẢ các gói.

pip freezehiển thị các gói BẠN đã cài đặt qua pip(hoặc pipenvnếu sử dụng công cụ đó) lệnh ở định dạng yêu cầu.

Ghi chú bên dưới đó setuptools , pip , wheel được cài đặt khipipenv shelltạo phong bì ảo của tôi. Các gói này KHÔNG được tôi cài đặt bằng cách sử dụngpip:

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>

Bây giờ hãy xem lại và so sánh kết quả của các lệnh tương ứng mà tôi chỉ cài đặt cool-libsampleproject (trong đó hạt tiêu là một sự phụ thuộc):

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.