Dấu ngoặc vuông có nghĩa là gì trong cài đặt pip?


101

Tôi thấy ngày càng nhiều lệnh như thế này:

$ pip install "splinter[django]"

Những dấu ngoặc vuông này làm gì?




Lưu ý rằng điều đó nên xảy ra pip install "splinter[django]", để tránh bất kỳ sự mở rộng vỏ ngẫu nhiên nào của mẫu.
chepner 16/1017

@Ryan Ok bây giờ hãy thêm câu trả lời đó như một câu trả lời thích hợp và tôi sẽ chấp nhận nó.
Babken Vardanyan

@chepner Điểm tốt, tôi đã chỉnh sửa bài đăng.
Babken Vardanyan

Câu trả lời:


80

Cú pháp mà bạn đang sử dụng là:

pip install "project[extra]"

Trong trường hợp của bạn, bạn sẽ được installingcác splintergói trong đó có sự hỗ trợ thêm cho django. Dấu ngoặc vuông ( []) không phải là cú pháp cụ thể, chỉ là quy ước. Thực sự, bạn đang cài đặt các gói có tên là: "splinter[django]".

Giải thích từ @chetner:

Lệnh pip install splinter djangosẽ cài đặt hai gói có tên splinterdjango. splinter[django], mặt khác, cài đặt một biến thể của splintergói có hỗ trợ cho django. Lưu ý rằng nó không liên quan gì đến djangobản thân gói mà chỉ là một chuỗi được splintergói xác định cho một bộ tính năng cụ thể được bật.


1
Bạn muốn mở rộng câu trả lời của mình để người dùng trong tương lai có thể được hưởng lợi? Ví dụ extranghĩa là gì?
Babken Vardanyan

6
@BabkenVardanyan Lệnh đó sẽ cài đặt hai gói có tên splinterdjango. splinter[django], mặt khác, cài đặt một biến thể của splintergói có hỗ trợ cho django. Lưu ý rằng nó không liên quan gì đến djangobản thân gói mà chỉ là một chuỗi được splintergói xác định cho một bộ tính năng cụ thể được bật.
chepner

5
splintervẫn là tên gói; pipchính nó phân tích cú pháp splinter[django]và nhận ra nó là một tên gói với một "đối số" bổ sung để giúp nó cài đặt các tệp chính xác. Đối số djangođược diễn giải như thế nào hoàn toàn phụ thuộc vào setup.pytệp (hoặc một số tệp cấu hình khác? Tôi thực sự không biết chi tiết) được sử dụng để xác định gói splinter.
chepner 16/1017

1
Tôi tin rằng điều duy nhất mà cú pháp [extra] làm là chỉ định bổ sung từ extras_requires sẽ được cài đặt. Đó là, pip install splintersẽ cài đặt ít yêu cầu hơn pip install splinter[django]. Các gói bổ sung được cài đặt có thể thực sự (và có thể có) cho phép các tính năng bổ sung của splinter hoạt động, nhưng nó không thay đổi bất cứ điều gì về bản thân gói splinter. Nó chỉ cho pip biết về các phụ thuộc bổ sung.
William Pursell

6
Tôi nghĩ câu trả lời này là không chính xác. Điều này không cài đặt gói "splinter [django]", mà là cả hai dự án splinter và Django. Đây là những tính năng bổ sung setuptools như được giải thích trong câu trả lời của @ Paul và prosti
user1523170

19

Dấu ngoặc [optional]trong PIP biểu thị các phụ thuộc tùy chọn

Chỉ trong trường hợp một nhà phát triển khác đến tìm cách triển khai mẫu này trong triển khai gói Python của riêng họ, đây là giải thích thêm về brackets []trong pip.

Ví dụ: Apache Airflow

Để cài đặt airflowtừ pip, chúng tôi sử dụng lệnh này:

pip install 'apache-airflow'

Bạn có thể cài đặt các thành phần tùy chọn của luồng không khí với:

pip install 'apache-airflow[aws]'
#      [optional] -----------^

Khi chúng tôi tìm kiếm pypi để apache-airflowlưu ý rằng các gói tùy chọn không hiển thị:

pip search 'apache-airflow'

apache-airflow (1.10.9)                            - Programmatically author, schedule and monitor data pipelines
pylint-airflow (0.1.0a1)                           - A Pylint plugin to lint Apache Airflow code.
swe-airflow-tools (0.0.3)                          - Tools for Apache Airflow Application
airflow (0.6)                                      - Placeholder for the old Airflow package
...

Thực hiện qua setup.py

Bạn có thể thấy cách thực hiện điều này trong setup.py tập lệnh
Ở bên trái trong setup.py- extras_requiređược định nghĩa.
Ở bên phải là các lệnh cài đặt tương quan cho các gói phụ tùy chọn này.

setup.py so với cài đặt


12

Khá chắc chắn đây là các tính năng bổ sung của setuptools:

https://setuptools.readthedocs.io/en/latest/setuptools.html#dec Tuyên-extras-optional-features-with-their-own-dependencies

Đôi khi một dự án có các phụ thuộc được “khuyến nghị”, không bắt buộc đối với tất cả các mục đích sử dụng của dự án. Ví dụ: một dự án có thể cung cấp đầu ra PDF tùy chọn nếu ReportLab được cài đặt và hỗ trợ reStructuredText nếu docutils được cài đặt. Các tính năng tùy chọn này được gọi là “tính năng bổ sung” ...


4

Đây chính xác là danh sách từ setup.pytệp cho dự án được đề cập :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
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.