Quy trình con python bắt ngoại lệ

python -m pip 
79

python -m pip 
80

python -m pip 
81

pip là một chương trình dòng lệnh. Khi bạn cài đặt pip, một lệnh

py -m pip install -r requirements.txt
8 sẽ được thêm vào hệ thống của bạn, lệnh này có thể được chạy từ dấu nhắc lệnh như sau

Unix/macOS

python -m pip 

py -m pip install -r requirements.txt
9 thực thi pip bằng trình thông dịch Python mà bạn đã chỉ định là python. Vì vậy,
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
0 có nghĩa là bạn đang thực hiện pip cho thông dịch viên của bạn tại
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
1

các cửa sổ

py -m pip 

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
2 thực thi pip bằng trình thông dịch Python mới nhất mà bạn đã cài đặt. Để biết thêm chi tiết, hãy đọc tài liệu Python Windows launcher

Cài đặt gói #

pip hỗ trợ cài đặt từ PyPI, kiểm soát phiên bản, dự án cục bộ và trực tiếp từ tệp phân phối

Kịch bản phổ biến nhất là cài đặt từ PyPI bằng cách sử dụng Công cụ xác định yêu cầu

Unix/macOS

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version

các cửa sổ

________số 8

Để biết thêm thông tin và ví dụ, hãy xem tài liệu tham khảo cài đặt pip .

Thông tin xác thực cơ bản

Điều này hiện được đề cập trong Xác thực .

hỗ trợ mạng

Điều này hiện được đề cập trong Xác thực .

Hỗ trợ móc khóa

Điều này hiện được đề cập trong Xác thực .

Sử dụng Máy chủ Proxy#

Khi cài đặt các gói từ PyPI, pip yêu cầu truy cập internet, trong nhiều môi trường công ty yêu cầu máy chủ proxy HTTP gửi đi

pip có thể được cấu hình để kết nối thông qua máy chủ proxy theo nhiều cách khác nhau

  • sử dụng tùy chọn dòng lệnh

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    3 để chỉ định proxy ở dạng
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    4

  • sử dụng

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    5 trong Tệp cấu hình

  • bằng cách thiết lập các biến môi trường tiêu chuẩn

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    6,
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    7 và
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    8

  • sử dụng biến môi trường

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    9 để bao gồm một chuỗi được mã hóa JSON trong biến tác nhân người dùng được sử dụng trong các yêu cầu của pip

Tệp yêu cầu #

“Tệp yêu cầu” là các tệp chứa danh sách các mục sẽ được cài đặt bằng cách sử dụng pip install như vậy.

Unix/macOS

python -m pip 
6

các cửa sổ

py -m pip install -r requirements.txt

Chi tiết về định dạng của các tệp có tại đây. Định dạng tệp yêu cầu .

Về mặt logic, tệp Yêu cầu chỉ là danh sách các đối số pip install được đặt trong một tệp. Lưu ý rằng bạn không nên dựa vào các mục trong tệp được cài đặt bởi pip theo bất kỳ thứ tự cụ thể nào.

Trong thực tế, có 4 cách sử dụng tệp Yêu cầu phổ biến

  1. Tệp yêu cầu được sử dụng để giữ kết quả từ pip freeze nhằm mục đích đạt được Lượt cài đặt lặp lại . Trong trường hợp này, tệp yêu cầu của bạn chứa phiên bản được ghim của mọi thứ đã được cài đặt khi chạy

    python -m pip 
    
    80. . In this case, your requirement file contains a pinned version of everything that was installed when
    python -m pip 
    
    80 was run.

    Unix/macOS

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    

    các cửa sổ

    python -m pip 
    
    8

  2. Các tệp yêu cầu được sử dụng để buộc pip giải quyết đúng các phụ thuộc. điểm 20. 2 trở về trước không có độ phân giải phụ thuộc thực sự mà thay vào đó chỉ sử dụng thông số kỹ thuật đầu tiên mà nó tìm thấy cho một dự án. e. g. nếu

    python -m pip 
    
    81 yêu cầu
    python -m pip 
    
    82 và
    python -m pip 
    
    83 yêu cầu
    python -m pip 
    
    84 và nếu
    python -m pip 
    
    81 được giải quyết trước, pip sẽ chỉ sử dụng
    python -m pip 
    
    82 và có thể dễ dàng cài đặt phiên bản
    python -m pip 
    
    87 xung đột với nhu cầu của
    python -m pip 
    
    83. Để giải quyết vấn đề này, bạn có thể đặt
    python -m pip 
    
    84 (i. e. thông số kỹ thuật chính xác) trực tiếp vào tệp yêu cầu của bạn cùng với các yêu cầu cấp cao nhất khác. Như vậy

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    0

  3. Các tệp yêu cầu được sử dụng để buộc pip cài đặt phiên bản thay thế của phụ thuộc phụ. Ví dụ: giả sử

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    00 trong tệp yêu cầu của bạn yêu cầu
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    01, nhưng phiên bản mới nhất (v1. 3) có lỗi, bạn có thể buộc pip chấp nhận các phiên bản cũ hơn như vậy

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    3

  4. Các tệp yêu cầu được sử dụng để ghi đè một phụ thuộc bằng một bản vá cục bộ nằm trong kiểm soát phiên bản. Ví dụ: giả sử phụ thuộc

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    02 từ PyPI có lỗi và bạn không thể đợi bản sửa lỗi ngược dòng. Bạn có thể sao chép/sao chép src, sửa lỗi và đặt nó vào VCS bằng thẻ
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    03. Bạn sẽ tham khảo nó trong tệp yêu cầu của mình với một dòng như vậy

    py -m pip 
    
    0

    Nếu

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    02 trước đây là yêu cầu cấp cao nhất trong tệp yêu cầu của bạn, thì hãy thay thế dòng đó bằng dòng mới. Nếu
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    02 là phụ thuộc phụ, hãy thêm dòng mới

Điều quan trọng cần làm rõ là pip xác định các gói phụ thuộc bằng cách sử dụng siêu dữ liệu install_requires, chứ không phải bằng cách khám phá các tệp

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
06 được nhúng trong các dự án

Xem thêm

  • Định dạng tệp yêu cầu

  • đóng băng pip

  • "cài đặt. py so với yêu cầu. txt” (một bài báo của Donald Stufft)

Tập tin ràng buộc #

Tệp ràng buộc là tệp yêu cầu chỉ kiểm soát phiên bản nào của yêu cầu được cài đặt chứ không phải phiên bản đó có được cài đặt hay không. Cú pháp và nội dung của chúng là một tập hợp con của Tệp yêu cầu , với một số loại cú pháp không được phép. các ràng buộc phải có tên, chúng không thể chỉnh sửa được và chúng không thể chỉ định các phần bổ sung. Về mặt ngữ nghĩa, có một điểm khác biệt chính. Bao gồm một gói trong tệp ràng buộc không kích hoạt cài đặt gói.

Sử dụng một tệp ràng buộc như vậy

Unix/macOS

py -m pip 
1

các cửa sổ

py -m pip 
2

Các tệp ràng buộc được sử dụng vì lý do chính xác giống như các tệp yêu cầu khi bạn không biết chính xác những thứ bạn muốn cài đặt. Chẳng hạn, giả sử rằng gói “helloworld” không hoạt động trong môi trường của bạn, vì vậy bạn có một phiên bản vá cục bộ. Một số thứ bạn cài đặt phụ thuộc vào “helloworld” và một số thì không

Một cách để đảm bảo rằng phiên bản đã vá được sử dụng một cách nhất quán là kiểm tra thủ công các phần phụ thuộc của mọi thứ bạn cài đặt và nếu có “helloworld”, hãy viết một tệp yêu cầu để sử dụng khi cài đặt thứ đó

Các tệp ràng buộc cung cấp một cách tốt hơn. viết một tệp ràng buộc duy nhất cho tổ chức của bạn và sử dụng tệp đó ở mọi nơi. Nếu thứ đang được cài đặt yêu cầu cài đặt “helloworld”, phiên bản cố định được chỉ định trong tệp ràng buộc của bạn sẽ được sử dụng

Hỗ trợ tệp ràng buộc đã được thêm vào trong pip 7. 1. Trong Thay đổi đối với trình phân giải phụ thuộc pip trong 20. 3 (2020) chúng tôi đã thực hiện một cuộc đại tu khá toàn diện, loại bỏ một số lỗi không có giấy tờ và không được hỗ trợ khỏi lần triển khai trước đó, đồng thời loại bỏ các tệp ràng buộc thành một cách hoàn toàn để chỉ định giới hạn (phiên bản) toàn cầu cho các gói.

Cài đặt từ Wheels#

“Wheel” là một định dạng lưu trữ được xây dựng có thể tăng tốc độ cài đặt rất nhiều so với việc xây dựng và cài đặt từ các kho lưu trữ nguồn. Để biết thêm thông tin, hãy xem Tài liệu bánh xe , PEP 427 và PEP 425

pip thích Bánh xe hơn nếu chúng có sẵn. Để tắt tính năng này, hãy sử dụng cờ --no-binary cho pip install.

Nếu không tìm thấy bánh xe ưng ý, pip sẽ mặc định tìm kho lưu trữ nguồn

Để cài đặt trực tiếp từ kho lưu trữ bánh xe

Unix/macOS

py -m pip 
3

các cửa sổ

py -m pip 
4

Để bao gồm các phụ thuộc tùy chọn được cung cấp trong siêu dữ liệu

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
07 trong bánh xe, bạn phải thêm dấu ngoặc kép xung quanh tên mục tiêu cài đặt

Unix/macOS

py -m pip 
5

các cửa sổ

py -m pip 
6

Ghi chú

Trong tương lai, cú pháp

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
08 có thể không được dùng nữa. Nên sử dụng cú pháp PEP 508 bất cứ khi nào có thể

Đối với những trường hợp không có bánh xe, pip cung cấp bánh xe pip để thuận tiện, tạo bánh xe cho tất cả các yêu cầu và phụ thuộc của bạn.

pip wheel yêu cầu phải cài đặt gói bánh xe, gói này cung cấp tiện ích mở rộng công cụ thiết lập “bdist_wheel” mà gói này sử dụng.

Để xây dựng các bánh xe cho các yêu cầu của bạn và tất cả các phụ thuộc của chúng vào một thư mục cục bộ

Unix/macOS

py -m pip 
7

các cửa sổ

py -m pip 
8

Và sau đó để cài đặt các yêu cầu đó, chỉ cần sử dụng thư mục bánh xe cục bộ của bạn (chứ không phải từ PyPI)

Unix/macOS

py -m pip 
9

các cửa sổ

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
0

Gỡ cài đặt gói #

pip có thể gỡ cài đặt hầu hết các gói như vậy

Unix/macOS

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
1

các cửa sổ

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
2

pip cũng thực hiện gỡ cài đặt tự động phiên bản cũ của gói trước khi nâng cấp lên phiên bản mới hơn

Để biết thêm thông tin và ví dụ, hãy xem tham chiếu gỡ cài đặt pip .

Liệt kê các gói #

Để liệt kê các gói đã cài đặt

Unix/macOS

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
3

các cửa sổ

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
4

Để liệt kê các gói lỗi thời và hiển thị phiên bản mới nhất hiện có

Unix/macOS

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
5

các cửa sổ

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
6

Để hiển thị chi tiết về gói đã cài đặt

Unix/macOS

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
7

các cửa sổ

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
8

Để biết thêm thông tin và ví dụ, hãy xem danh sách pipchương trình pip reference pages.

Tìm kiếm gói #

pip có thể tìm kiếm các gói PyPI bằng lệnh

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
09

Unix/macOS

python -m pip install SomePackage            # latest version
python -m pip install SomePackage==1.0.4     # specific version
python -m pip install 'SomePackage>=1.0.4'     # minimum version
9

các cửa sổ

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
0

Truy vấn sẽ được sử dụng để tìm kiếm tên và tóm tắt của tất cả các gói

Để biết thêm thông tin và ví dụ, hãy xem tài liệu tham khảo pip search .

Cấu hình

Điều này hiện có trong Cấu hình .

Tập tin cấu hình

Điều này hiện có trong Cấu hình .

Biến môi trường

Điều này hiện có trong Cấu hình .

Ưu tiên cấu hình

Điều này hiện có trong Cấu hình .

Hoàn thành lệnh#

pip hỗ trợ hoàn thành dòng lệnh trong bash, zsh và fish

Để thiết lập cho bash

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
1

Để thiết lập cho zsh

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
2

Để thiết lập cho cá

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
3

Để thiết lập cho powershell

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
4

Ngoài ra, bạn có thể sử dụng trực tiếp kết quả của lệnh

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
30 với hàm eval của trình bao của bạn, e. g. bằng cách thêm phần sau vào tệp khởi động của bạn

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
5

Cài đặt từ các gói cục bộ#

Trong một số trường hợp, bạn có thể chỉ muốn cài đặt từ các gói cục bộ, không có lưu lượng truy cập đến PyPI

Trước tiên, hãy tải xuống các kho lưu trữ đáp ứng yêu cầu của bạn

Unix/macOS

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
6

các cửa sổ

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
7

Lưu ý rằng

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
31 sẽ tìm trong bộ đệm bánh xe của bạn trước, trước khi thử tải xuống từ PyPI. Nếu bạn chưa bao giờ cài đặt các yêu cầu của mình trước đây, thì bạn sẽ không có bộ đệm bánh xe cho các mục đó. Trong trường hợp đó, nếu một số yêu cầu của bạn không có dạng bánh xe từ PyPI và bạn muốn có bánh xe, thì hãy chạy cái này để thay thế

Unix/macOS

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
8

các cửa sổ

py -m pip install SomePackage            # latest version
py -m pip install SomePackage==1.0.4     # specific version
py -m pip install 'SomePackage>=1.0.4'   # minimum version
9

Sau đó, để chỉ cài đặt từ cục bộ, bạn sẽ sử dụng --tìm liên kết--no-index like so:

Unix/macOS

python -m pip 
60

các cửa sổ

python -m pip 
61

“Chỉ khi cần” Nâng cấp đệ quy#

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
32 hiện có tùy chọn
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
33 kiểm soát cách pip xử lý việc nâng cấp các phụ thuộc. Có 2 chiến lược nâng cấp được hỗ trợ

  • python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    34. nâng cấp tất cả các phụ thuộc bất kể chúng có đáp ứng các yêu cầu mới của cha mẹ hay không

  • python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    35. chỉ nâng cấp một phụ thuộc nếu nó không đáp ứng các yêu cầu mới của cha mẹ

Chiến lược mặc định là

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
35. Điều này đã được thay đổi trong pip 10. 0 do tính chất vi phạm của
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
34 khi nâng cấp các phụ thuộc xung đột

Điều quan trọng cần lưu ý là

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
38 ảnh hưởng đến các yêu cầu trực tiếp (e. g. những thứ được chỉ định trên dòng lệnh hoặc thông qua tệp yêu cầu) trong khi
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
33 ảnh hưởng đến các yêu cầu gián tiếp (sự phụ thuộc của các yêu cầu trực tiếp)

Ví dụ: giả sử

py -m pip 
00 có một phụ thuộc,
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
02 và cả hai đều đã được cài đặt nhưng không phải là phiên bản mới nhất hiện có

  • py -m pip 
    
    02. sẽ không nâng cấp
    py -m pip 
    
    00 hoặc
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    02 hiện có

  • py -m pip 
    
    05. sẽ nâng cấp
    py -m pip 
    
    00, nhưng không nâng cấp
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    02 (trừ khi không đáp ứng yêu cầu tối thiểu)

  • py -m pip 
    
    08. nâng cấp cả
    py -m pip 
    
    00 và
    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    
    02

Như một ghi chú lịch sử, một "bản sửa lỗi" trước đó để có được hành vi

python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
35 là

Unix/macOS

python -m pip 
62

các cửa sổ

python -m pip 
63

Một đề xuất cho lệnh

py -m pip 
12 đang được coi là một giải pháp thay thế an toàn hơn cho hành vi háo hức nâng cấp

Số lượt cài đặt của người dùng

Với Python 2. 6 đã xuất hiện “sơ đồ người dùng” để cài đặt, có nghĩa là tất cả các bản phân phối Python đều hỗ trợ một vị trí cài đặt thay thế dành riêng cho người dùng. Vị trí mặc định cho mỗi hệ điều hành được giải thích trong tài liệu python cho trang web. biến USER_BASE. Chế độ cài đặt này có thể được bật bằng cách chỉ định tùy chọn --người dùng cho

py -m pip 
13.

Hơn nữa, “sơ đồ người dùng” có thể được tùy chỉnh bằng cách đặt biến môi trường

py -m pip 
14, biến này cập nhật giá trị của
py -m pip 
15

Để cài đặt “SomePackage” vào môi trường có

py -m pip 
15 được tùy chỉnh thành ‘/myappenv’, hãy làm như sau

Unix/macOS

python -m pip 
64

các cửa sổ

python -m pip 
65

py -m pip 
17 tuân theo bốn quy tắc

  1. Khi các gói được cài đặt trên toàn cầu nằm trên đường dẫn python và chúng xung đột với các yêu cầu cài đặt, chúng sẽ bị bỏ qua và không được gỡ cài đặt

  2. Khi các gói được cài đặt toàn cầu nằm trên đường dẫn python và chúng đáp ứng các yêu cầu cài đặt, pip không làm gì cả và báo cáo rằng yêu cầu đó đã được đáp ứng (tương tự như cách các gói toàn cầu có thể đáp ứng các yêu cầu khi cài đặt các gói trong virtualenv

    py -m pip 
    
    18)

  3. pip sẽ không thực hiện cài đặt

    py -m pip 
    
    19 trong
    py -m pip 
    
    20 virtualenv (i. e. loại virtualenv mặc định), do trang web của người dùng không nằm trên đường dẫn python. Việc cài đặt sẽ là vô nghĩa

  4. Trong virtualenv

    py -m pip 
    
    18, pip sẽ không cài đặt gói xung đột với gói trong gói trang web virtualenv. Cài đặt --user sẽ thiếu sys. ưu tiên đường dẫn và vô nghĩa

Để làm cho các quy tắc rõ ràng hơn, đây là một số ví dụ

Từ trong một

py -m pip 
20 virtualenv (i. e. loại mặc định)

Unix/macOS

python -m pip 
66

các cửa sổ

python -m pip 
67

Từ trong một virtualenv

py -m pip 
18 trong đó
py -m pip 
24 đã được cài đặt trong virtualenv

Unix/macOS

python -m pip 
68

các cửa sổ

python -m pip 
69

Từ bên trong một con trăn thực, nơi mà

py -m pip 
00 không được cài đặt trên toàn cầu

Unix/macOS

py -m pip install -r requirements.txt
0

các cửa sổ

py -m pip install -r requirements.txt
1

Từ bên trong một con trăn thực, trong đó

py -m pip 
00 được cài đặt trên toàn cầu, nhưng không phải là phiên bản mới nhất

Unix/macOS

py -m pip install -r requirements.txt
2

các cửa sổ

py -m pip install -r requirements.txt
3

Từ bên trong một con trăn thực, nơi

py -m pip 
00 được cài đặt trên toàn cầu và là phiên bản mới nhất

Unix/macOS

py -m pip install -r requirements.txt
4

các cửa sổ

py -m pip install -r requirements.txt
5

Đảm bảo khả năng lặp lại

Điều này hiện được đề cập trong Lượt cài đặt lặp lại .

Sửa chữa các phụ thuộc xung đột

Điều này hiện được đề cập trong Giải pháp phụ thuộc .

Sử dụng pip từ chương trình của bạn#

Như đã lưu ý trước đây, pip là một chương trình dòng lệnh. Mặc dù nó được triển khai bằng Python và do đó có sẵn từ mã Python của bạn thông qua

py -m pip 
28, nhưng bạn không được sử dụng các API nội bộ của pip theo cách này. Có một số lý do cho việc này

  1. Mã pip giả định rằng nó nằm trong quyền kiểm soát duy nhất đối với trạng thái chung của chương trình. pip quản lý những thứ như cấu hình hệ thống ghi nhật ký hoặc giá trị của luồng IO tiêu chuẩn mà không xem xét khả năng mã người dùng có thể bị ảnh hưởng

  2. mã của pip không phải là luồng an toàn. Nếu bạn chạy pip trong một luồng, không có gì đảm bảo rằng mã của bạn hoặc của pip sẽ hoạt động như bạn mong đợi

  3. pip giả định rằng sau khi hoàn thành công việc, quá trình sẽ kết thúc. Không cần xử lý khả năng mã khác sẽ tiếp tục chạy sau thời điểm đó, vì vậy (ví dụ) gọi pip hai lần trong cùng một quy trình có khả năng xảy ra sự cố

Điều này không có nghĩa là về nguyên tắc, các nhà phát triển pip phản đối ý tưởng rằng pip có thể được sử dụng làm thư viện - chỉ là đây không phải là cách nó được viết và sẽ cần rất nhiều công việc để thiết kế lại nội bộ để sử dụng . Và đơn giản là chúng tôi hiện không có đủ nguồn lực để xem xét một nhiệm vụ như vậy

Điều này có nghĩa là trong thực tế, mọi thứ bên trong pip được coi là chi tiết triển khai. Ngay cả tên nhập khẩu là

py -m pip install -r requirements.txt
8 cũng có thể thay đổi mà không cần báo trước. Mặc dù chúng tôi cố gắng không làm hỏng mọi thứ nhiều nhất có thể, nhưng tất cả các API nội bộ có thể thay đổi bất cứ lúc nào, vì bất kỳ lý do gì. Điều đó cũng có nghĩa là chúng tôi thường không khắc phục các sự cố do sử dụng pip theo cách không được hỗ trợ

Cũng cần lưu ý rằng việc cài đặt các gói vào

py -m pip 
30 trong quy trình Python đang chạy là điều chỉ nên được thực hiện cẩn thận. Hệ thống nhập lưu trữ một số dữ liệu nhất định và việc cài đặt các gói mới trong khi chương trình đang chạy có thể không phải lúc nào cũng hoạt động như mong đợi. Trong thực tế, hiếm khi có vấn đề xảy ra, nhưng đó là điều cần lưu ý

Đã nói tất cả những điều trên, bạn nên bao gồm các tùy chọn có sẵn nếu bạn quyết định rằng bạn muốn chạy pip từ bên trong chương trình của mình. Cách tiếp cận đáng tin cậy nhất và được hỗ trợ đầy đủ là chạy pip trong quy trình con. Điều này được thực hiện dễ dàng bằng cách sử dụng mô-đun

py -m pip 
31 tiêu chuẩn

py -m pip install -r requirements.txt
6

Nếu bạn muốn xử lý thêm đầu ra, hãy sử dụng một trong các API khác trong mô-đun. Chúng tôi đang sử dụng đóng băng ở đây để xuất các gói đã cài đặt ở định dạng yêu cầu

py -m pip install -r requirements.txt
7

Nếu bạn không muốn sử dụng chức năng dòng lệnh của pip mà muốn triển khai mã hoạt động với các gói Python, siêu dữ liệu của chúng hoặc PyPI, thì bạn nên xem xét các gói khác, được hỗ trợ, cung cấp loại khả năng này. Một số ví dụ mà bạn có thể xem xét bao gồm

  • py -m pip 
    
    32 - Các tiện ích để làm việc với siêu dữ liệu gói tiêu chuẩn (phiên bản, yêu cầu, v.v. )

  • py -m pip 
    
    33 (cụ thể là
    py -m pip 
    
    34) - Chức năng truy vấn gói mà người dùng đã cài đặt trên hệ thống của họ

  • py -m pip 
    
    35 - Các tiện ích đóng gói và phân phối (bao gồm các chức năng tương tác với PyPI)

Các thay đổi đối với trình phân giải phụ thuộc pip trong 20. 3 (2020)#

điểm 20. 3 có trình phân giải phụ thuộc mới, được bật theo mặc định cho người dùng Python 3. (pip 20. 1 và 20. Đã bao gồm 2 phiên bản phát hành trước của trình phân giải phụ thuộc mới, ẩn sau các cờ người dùng tùy chọn. ) Đọc bên dưới để biết hướng dẫn di chuyển, cách gọi trình phân giải kế thừa và tiến trình ngừng sử dụng. Chúng tôi cũng đã thực hiện một video giải thích dài hai phút mà bạn có thể xem

Chúng tôi sẽ tiếp tục cải thiện trình giải quyết phụ thuộc pip để đáp lại phản hồi của người thử nghiệm. Vui lòng gửi phản hồi cho chúng tôi thông qua khảo sát kiểm tra trình giải quyết

Coi chừng #

Thay đổi lớn trong bản phát hành này là trình phân giải phụ thuộc pip trong pip

Máy tính cần biết thứ tự phù hợp để cài đặt các phần mềm (“để cài đặt

py -m pip 
36, bạn cần cài đặt
py -m pip 
37 trước”). Vì vậy, khi các lập trình viên Python chia sẻ phần mềm dưới dạng các gói, họ phải mô tả chính xác các điều kiện tiên quyết cài đặt đó và pip cần điều hướng các tình huống khó khăn khi nhận được các hướng dẫn xung đột. Trình giải quyết phụ thuộc mới này sẽ giúp pip xử lý logic phức tạp đó tốt hơn, đồng thời giúp bạn sử dụng và khắc phục sự cố pip dễ dàng hơn

Những thay đổi quan trọng nhất đối với trình giải quyết là

  • Nó sẽ làm giảm sự không nhất quán. nó sẽ không còn cài đặt tổ hợp các gói không nhất quán lẫn nhau. Trong các phiên bản cũ hơn của pip, pip có thể cài đặt gói không đáp ứng các yêu cầu đã khai báo của gói đã cài đặt khác. Ví dụ, trong pip 20. 0,

    py -m pip 
    
    38 thực hiện sai, cài đặt “thành công”
    py -m pip 
    
    39, mặc dù
    py -m pip 
    
    40 yêu cầu
    py -m pip 
    
    41 (được xác định tại đây). Thay vào đó, trình phân giải mới hoàn toàn từ chối cài đặt bất cứ thứ gì nếu nó nhận được đầu vào đó

  • Nó sẽ nghiêm ngặt hơn - nếu bạn yêu cầu pip cài đặt hai gói có yêu cầu không tương thích, nó sẽ từ chối (chứ không phải cài đặt một kết hợp bị hỏng, giống như trong các phiên bản trước)

Vì vậy, nếu bạn đang sử dụng các giải pháp thay thế để buộc pip xử lý các tổ hợp yêu cầu không tương thích hoặc không nhất quán, thì bây giờ là thời điểm tốt để khắc phục sự cố tiềm ẩn trong các gói, vì pip sẽ nghiêm ngặt hơn từ đây trở đi

Điều này cũng có nghĩa là khi bạn chạy lệnh

py -m pip 
13, pip chỉ xem xét các gói bạn đang cài đặt trong lệnh đó và có thể phá vỡ các gói đã cài đặt. Nó sẽ không đảm bảo rằng môi trường của bạn sẽ luôn nhất quán. Nếu bạn
py -m pip 
43 và sau đó là
py -m pip 
44, có thể phiên bản của
py -m pip 
37 bạn nhận được sẽ khác so với phiên bản bạn đã chạy
py -m pip 
46 trong một lệnh. Chúng tôi đang xem xét thay đổi hành vi này (theo #7744) và muốn biết suy nghĩ của bạn về hành vi của pip;

Chúng tôi cũng đang thay đổi hỗ trợ cho Tệp ràng buộc , cài đặt có thể chỉnh sửa và chức năng liên quan. Chúng tôi đã thực hiện một cuộc đại tu khá toàn diện và loại bỏ các tệp ràng buộc thành một cách hoàn toàn để chỉ định giới hạn (phiên bản) toàn cầu cho các gói và do đó, một số kết hợp từng được cho phép giờ đây sẽ gây ra lỗi. Đặc biệt.

  • Các ràng buộc không ghi đè các yêu cầu hiện có;

  • Việc cung cấp một yêu cầu có thể chỉnh sửa (

    py -m pip 
    
    47) không khiến pip bỏ qua các giới hạn hoặc hạn chế của phiên bản (xem #8076) và nếu bạn có xung đột giữa một yêu cầu được ghim và một thư mục cục bộ thì pip sẽ cho biết rằng nó không thể tìm thấy phiên bản nào thỏa mãn cả hai (

  • Chế độ kiểm tra hàm băm yêu cầu tất cả các yêu cầu được chỉ định là khớp với

    py -m pip 
    
    48 trên một phiên bản và có thể không hoạt động tốt khi kết hợp với các ràng buộc (xem #9020 và #8792)

  • Nếu cần để đáp ứng các ràng buộc, pip sẽ vui vẻ cài đặt lại các gói, nâng cấp hoặc hạ cấp mà không cần bất kỳ tùy chọn dòng lệnh bổ sung nào (xem #8115 và Các tùy chọn kiểm soát quá trình cài đặt<)

  • Các yêu cầu chưa được đặt tên không được phép dưới dạng ràng buộc (xem #6628 và #8210)

  • Liên kết không được phép dưới dạng ràng buộc (xem #8253)

  • Các ràng buộc không thể có các tính năng bổ sung (xem #6628)

Theo chính sách Hỗ trợ Python 2 của chúng tôi, pip 20. 3 người dùng đang sử dụng Python 2 sẽ sử dụng trình phân giải kế thừa theo mặc định. Người dùng Python 2 nên nâng cấp lên Python 3 càng sớm càng tốt, vì trong pip 21. 0 vào tháng 1 năm 2021, pip hoàn toàn ngừng hỗ trợ Python 2.

Cách nâng cấp và di chuyển#

  1. Cài đặt pip 20. 3 với

    py -m pip 
    
    49

  2. Xác thực môi trường hiện tại của bạn bằng cách chạy

    py -m pip 
    
    50. Điều này sẽ báo cáo nếu bạn có bất kỳ mâu thuẫn nào trong bộ gói đã cài đặt của mình. Có một bản cài đặt sạch sẽ giúp bạn ít gặp sự cố hơn với trình giải quyết mới (và có thể giải quyết các sự cố tiềm ẩn trong môi trường hiện tại của bạn. ). Nếu bạn chạy
    py -m pip 
    
    50 và gặp phải nội dung mà bạn không thể tìm ra, vui lòng yêu cầu trợ giúp trong trình theo dõi vấn đề hoặc trò chuyện của chúng tôi

  3. Kiểm tra phiên bản mới của pip

    Mặc dù chúng tôi đã cố gắng đảm bảo rằng bộ thử nghiệm của pip bao gồm nhiều trường hợp nhất có thể, nhưng chúng tôi biết rằng có những người sử dụng pip với nhiều quy trình công việc và quy trình xây dựng khác nhau và chúng tôi sẽ không thể bao gồm tất cả những trường hợp đó nếu không có bạn

    • Nếu bạn sử dụng pip để cài đặt phần mềm của mình, hãy dùng thử trình phân giải mới và cho chúng tôi biết nếu nó hoạt động với bạn với

      py -m pip 
      
      13. Cố gắng

      • cài đặt đồng thời nhiều gói

      • tạo lại môi trường bằng tệp

        python -m pip freeze > requirements.txt
        python -m pip install -r requirements.txt
        
        06

      • sử dụng

        py -m pip 
        
        54 để kiểm tra xem nó có hoạt động như bạn nghĩ không

      • sử dụng các tập tin ràng buộc

      • phần “Thiết lập để kiểm tra với sự chú ý đặc biệt” và “Ví dụ để thử” bên dưới

    • Nếu bạn có một quy trình xây dựng phụ thuộc vào việc pip cài đặt các phụ thuộc cho bạn, hãy kiểm tra xem trình phân giải mới có thực hiện những gì bạn cần không

    • Chạy CI của dự án của bạn (bộ thử nghiệm, quy trình xây dựng, v.v. ) bằng cách sử dụng trình phân giải mới và cho chúng tôi biết về bất kỳ sự cố nào

    • Nếu trước đây bạn gặp phải sự cố trình phân giải với pip, hãy kiểm tra xem trình phân giải mới có khắc phục được các sự cố đó hay không và đọc Xử lý xung đột phụ thuộc . Ngoài ra, hãy cho chúng tôi biết nếu trình phân giải mới gặp sự cố với bất kỳ giải pháp thay thế nào bạn đưa vào để giải quyết các hạn chế của trình phân giải hiện tại. Chúng tôi sẽ cần đảm bảo rằng mọi người có thể chuyển đổi các cách giải quyết như vậy một cách suôn sẻ.

    • Nếu bạn phát triển hoặc hỗ trợ một công cụ bao bọc pip hoặc sử dụng nó để cung cấp một phần chức năng của mình, vui lòng kiểm tra khả năng tích hợp của bạn với pip 20. 3

  4. Khắc phục sự cố và thử các cách giải quyết này nếu cần

    • Nếu pip mất nhiều thời gian hơn để cài đặt các gói, hãy đọc Quay ngược giải pháp phụ thuộc để biết các cách giảm thời gian pip dành cho việc quay lui do xung đột phụ thuộc.

    • Nếu bạn không muốn pip thực sự giải quyết các phụ thuộc, hãy sử dụng tùy chọn

      py -m pip 
      
      55. Điều này hữu ích khi bạn có một tập hợp các phiên bản gói hoạt động cùng nhau trong thực tế, mặc dù siêu dữ liệu của chúng nói rằng chúng xung đột. Để được hướng dẫn về cách khắc phục dài hạn, hãy đọc Xử lý xung đột phụ thuộc .

    • Nếu bạn gặp phải lỗi giải quyết và cần giải pháp thay thế trong khi đang khắc phục nguyên nhân gốc rễ của chúng, bạn có thể chọn hành vi của trình giải quyết cũ bằng cách sử dụng cờ

      py -m pip 
      
      56. Điều này sẽ hoạt động cho đến khi chúng tôi phát hành pip 21. 0 (xem Tiến trình ngừng sử dụng ).

  5. Vui lòng báo cáo lỗi thông qua khảo sát kiểm tra trình giải quyết

Thiết lập để kiểm tra với sự chú ý đặc biệt#

  • Tệp yêu cầu với hơn 100 gói

  • Quy trình cài đặt liên quan đến nhiều tệp yêu cầu

  • Các tệp yêu cầu bao gồm hàm băm ( Chế độ kiểm tra hàm băm ) hoặc các phần phụ thuộc được ghim (có thể là đầu ra từ

    py -m pip 
    
    57 trong
    py -m pip 
    
    58)

  • Sử dụng Tệp ràng buộc

  • Tích hợp liên tục/thiết lập triển khai liên tục

  • Cài đặt từ bất kỳ loại hệ thống kiểm soát phiên bản nào (i. e. , Git, Subversion, Mercurial hoặc CVS), theo Hỗ trợ VCS

  • Cài đặt từ mã nguồn được lưu trữ trong các thư mục cục bộ

Ví dụ để thử#

Cài đặt

  • dòng chảy căng

  • py -m pip 
    
    59

  • py -m pip 
    
    60

  • py -m pip 
    
    61

  • py -m pip 
    
    62

  • py -m pip 
    
    63 và
    py -m pip 
    
    64 cùng nhau

  • py -m pip 
    
    65 và
    py -m pip 
    
    66 cùng nhau

  • py -m pip 
    
    67

  • py -m pip 
    
    68

Cố gắng

  • py -m pip 
    
    13

  • py -m pip 
    
    70

  • py -m pip 
    
    50

  • py -m pip 
    
    72

Cho chúng tôi biết về#

Những điều cụ thể mà chúng tôi muốn nhận phản hồi về

  • Các trường hợp trình phân giải mới tạo ra kết quả sai, rõ ràng. Chúng tôi hy vọng sẽ không có quá nhiều lỗi như vậy, nhưng chúng tôi muốn bẫy những lỗi như vậy trước khi xóa trình giải quyết cũ

  • Các trường hợp trình giải quyết tạo ra lỗi khi bạn tin rằng nó có thể tìm ra việc cần làm

  • Các trường hợp trình giải quyết đưa ra lỗi do có vấn đề với các yêu cầu của bạn, nhưng bạn cần thông tin tốt hơn để tìm ra lỗi

  • Nếu bạn có giải pháp thay thế để giải quyết các sự cố với trình phân giải hiện tại, thì trình giải quyết mới có cho phép bạn xóa các giải pháp đó không?

Vui lòng cho chúng tôi biết thông qua khảo sát kiểm tra trình phân giải

Dòng thời gian khấu hao#

Chúng tôi dự định tiến hành chuyển đổi trình phân giải như sau, sử dụng Cờ tính năng và tuân theo Bản phát hành của chúng tôi . :

  • điểm 20. 1. đã có phiên bản alpha của trình phân giải mới, chọn tham gia, sử dụng cờ tùy chọn

    py -m pip 
    
    73. pip được mặc định là hành vi kế thừa

  • điểm 20. 2. đã có bản beta của trình phân giải mới, chọn tham gia, sử dụng cờ

    py -m pip 
    
    74. pip được mặc định là hành vi kế thừa. Người dùng pip 20. 2 người muốn pip mặc định sử dụng trình phân giải mới có thể chạy
    py -m pip 
    
    75 (để biết thêm về điều đó và tùy chọn biến môi trường thay thế
    py -m pip 
    
    76, hãy xem vấn đề 8661)

  • điểm 20. 3. pip mặc định là trình phân giải mới trong môi trường Python 3, nhưng người dùng có thể từ chối và chọn hành vi của trình phân giải cũ, sử dụng cờ

    py -m pip 
    
    56. Trong môi trường Python 2, pip mặc định là trình phân giải cũ và trình phân giải mới khả dụng bằng cờ
    py -m pip 
    
    74

  • pip 21. 0. pip sử dụng trình phân giải mới theo mặc định và trình phân giải cũ không còn được hỗ trợ. Nó sẽ bị xóa sau một khoảng thời gian hiện chưa được quyết định, vì việc xóa phụ thuộc vào sự sẵn có của những người bảo trì tình nguyện của pip. Hỗ trợ Python 2 bị xóa theo chính sách Hỗ trợ Python 2 của chúng tôi.

Vì công việc này sẽ không thay đổi hành vi mà người dùng có thể nhìn thấy được mô tả trong tài liệu về pip nên thay đổi này không nằm trong Chính sách ngừng sử dụng .

Bối cảnh và theo dõi #

Như đã thảo luận trong thông báo của chúng tôi trên blog PSF, nhóm pip đang trong quá trình phát triển một "trình giải quyết phụ thuộc" mới (một phần của pip tìm ra những gì cần cài đặt dựa trên yêu cầu của bạn)

Chúng tôi đang theo dõi quá trình triển khai của mình trong #6536 và bạn có thể xem các thông báo trên danh sách thông báo về bao bì có lưu lượng truy cập thấp và blog chính thức của Python