Що означають квадратні дужки в pip install?


101

Я бачу все більше і більше таких команд:

$ pip install "splinter[django]"

Що роблять ці квадратні дужки?




Зверніть увагу, що це повинно бути pip install "splinter[django]", щоб уникнути випадкового розширення шаблону оболонки.
chepner

@Ryan Ok, додайте це як правильну відповідь, і я прийму його.
Бабкен Варданян

@chepner Хороший момент, я відредагував допис.
Бабкен Варданян

Відповіді:


80

Синтаксис, який ви використовуєте:

pip install "project[extra]"

У вашому випадку, ви пакет , який має додаткову підтримку . Квадратні дужки ( ) не є специфічним синтаксисом, лише домовленістю. На насправді, ви встановлюєте пакет з ім'ям: .installingsplinterdjango[]"splinter[django]"

Пояснення від @chetner:

Команда pip install splinter djangoвстановить два пакети з іменем splinterта django. splinter[django], З іншого боку, встановлює варіант splinterпакету , який містить підтримку для django. Зауважте, що це не має нічого спільного з самим djangoпакетом, а є лише рядком, визначеним splinterпакетом для певного набору функцій, який вмикається.


1
Хочете розширити свою відповідь, щоб майбутні користувачі могли отримати вигоду? Наприклад, що extraозначає?
Бабкен Варданян

6
@BabkenVardanyan Ця команда встановить два пакети з іменем splinterта django. splinter[django], з іншого боку, встановлює варіант splinterпакета, який містить підтримку django. Зауважте, що це не має нічого спільного з самим djangoпакетом, а є лише рядком, визначеним splinterпакетом для певного набору функцій, який вмикається.
chepner

5
splinterвсе ще є назвою пакета; pipсам аналізує splinter[django]і розпізнає його як ім'я пакета з додатковим "аргументом", щоб допомогти йому встановити правильні файли. Як djangoінтерпретується аргумент , повністю залежить від setup.pyфайлу (або якогось іншого конфігураційного файлу? Я насправді не знаю деталей), який використовується для визначення пакету splinter.
chepner

1
Я вважаю, що єдине, що робить [додатковий] синтаксис, це вказати додаткове з extras_requires, яке буде встановлено. Тобто pip install splinterвстановить менше вимог, ніж pip install splinter[django]. Встановлені додаткові пакети дійсно можуть (і, можливо, роблять це) дозволити працювати додаткові функції splinter, але це не змінює нічого про сам пакет splinter. Він просто повідомляє pip про додаткові залежності.
Вільям Перселл,

6
Я вважаю, що ця відповідь неправильна. Це не встановлює пакет "splinter [django]", а як проекти splinter, так і Django. Це додаткові додатки для setuptools, як пояснено у відповідях @paul та prosti
user1523170

19

Дужки [optional]у PIP означають необов’язкові залежності

Про всяк випадок, коли прийде інший розробник, який прагне реалізувати цей шаблон у власному розгортанні пакету Python, ось подальше пояснення brackets []in pip.

Наприклад: Потік повітря Apache

Для встановлення airflow з pip ми використовуємо цю команду:

pip install 'apache-airflow'

Ви можете встановити додаткові компоненти повітряного потоку за допомогою:

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

Коли ми шукаємо PyPi для apache-airflowзазначають , що додаткові пакети не відображаються:

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
...

Реалізація через setup.py

Ви можете побачити, як це було зроблено, у setup.py сценарії
зліва у setup.py- extras_requireвизначено.
Праворуч розташовані відповідні команди встановлення для цих додаткових підпакетів.

setup.py проти встановлення


12

Цілком впевнений, що це додаткові додатки до setuptools:

https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies

Іноді проект має "рекомендовані" залежності, які не потрібні для всіх видів використання проекту. Наприклад, проект може запропонувати необов’язковий вихід PDF, якщо встановлено ReportLab, та підтримку reStructuredText, якщо встановлені документи. Ці додаткові функції називаються "додатковими послугами" ...


4

Це саме список з setup.pyфайлу для проекту в питанні :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.