Что означают квадратные скобки при установке pip?

100

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

$ pip install "splinter[django]"

Что делают эти квадратные скобки?

Бабкен Варданян
источник
Обратите внимание, что так должно быть pip install "splinter[django]", чтобы избежать случайного расширения оболочки шаблона.
Чепнер
@Ryan Хорошо, теперь добавь это как правильный ответ, и я приму его.
Бабкен Варданян
@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
Я считаю, что единственное, что делает синтаксис [extra], - это указывает дополнительные из 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

Для установки 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

Уверен, что это дополнительные средства настройки:

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

Иногда у проекта есть «рекомендуемые» зависимости, которые не требуются для всех видов использования проекта. Например, проект может предлагать дополнительный вывод PDF, если установлен ReportLab, и поддержку reStructuredText, если установлен Docutils. Эти дополнительные функции называются «дополнительными функциями» ...

Павел
источник
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"],
Прости
источник