Co oznaczają nawiasy kwadratowe w instalacji pip?

108

Widzę coraz więcej takich poleceń:

$ pip install "splinter[django]"

Co robią te nawiasy kwadratowe?

Babken Vardanyan
źródło
Zauważ, że powinno być pip install "splinter[django]", aby uniknąć przypadkowego rozszerzenia powłoki wzoru.
chepner
@Ryan Ok, teraz dodaj to jako poprawną odpowiedź i zaakceptuję to.
Babken Vardanyan
@chepner Słuszna uwaga, zredagowałem post.
Babken Vardanyan

Odpowiedzi:

87

Używana składnia to:

pip install "project[extra]"

W twoim przypadku, jesteś pakiet, który ma dodatkową obsługę . Nawiasy kwadratowe ( ) nie są specyficzną składnią, tylko konwencją. Naprawdę, instalujesz pakiet o nazwie: .installingsplinterdjango[]"splinter[django]"

Wyjaśnienie od @chetner:

Polecenie pip install splinter djangozainstalowałoby dwa pakiety o nazwach splinteri django. splinter[django]Z drugiej strony, instaluje wariant splinterpakietu, który zawiera wsparcie dla django. Zauważ, że nie ma to nic wspólnego z samym djangopakietem, ale jest po prostu ciągiem znaków zdefiniowanym przez splinterpakiet dla określonego zestawu funkcji, który zostanie włączony.

Joe Iddon
źródło
1
Chcesz rozszerzyć swoją odpowiedź, aby przyszli użytkownicy mogli skorzystać? Na przykład co to extraznaczy?
Babken Vardanyan
6
@BabkenVardanyan To polecenie zainstalowałoby dwa pakiety o nazwach splinteri django. splinter[django]z drugiej strony instaluje wariant splinterpakietu, który zawiera obsługę django. Zauważ, że nie ma to nic wspólnego z samym djangopakietem, ale jest po prostu ciągiem znaków zdefiniowanym przez splinterpakiet dla określonego zestawu funkcji, który zostanie włączony.
chepner
6
splinterjest nadal nazwą pakietu; pipsama analizuje splinter[django]i rozpoznaje go jako nazwę pakietu z dodatkowym „argumentem”, aby pomóc mu zainstalować prawidłowe pliki. Sposób djangointerpretacji argumentu zależy wyłącznie od setup.pypliku (lub innego pliku konfiguracyjnego? Właściwie nie znam szczegółów) użytego do zdefiniowania pakietu splinter.
chepner
1
Uważam, że jedyną rzeczą, jaką robi składnia [extra], jest określenie dodatkowych z extras_requires, które zostaną zainstalowane. Oznacza to, pip install splinterże zainstaluje mniej wymagań niż pip install splinter[django]. Dodatkowe pakiety, które są instalowane, mogą rzeczywiście (i prawdopodobnie to robią) włączać dodatkowe funkcje splinter, ale nie zmienia to niczego w samym pakiecie splinter. Po prostu informuje pip o dodatkowych zależnościach.
William Pursell
7
Myślę, że ta odpowiedź jest nieprawidłowa. Nie instaluje to pakietu "splinter [django]", ale raczej projekty typu splinter i Django. To są dodatki do setuptools, jak wyjaśniono w odpowiedziach @paul i prosti
user1523170
26

Nawiasy [optional]w PIP oznaczają opcjonalne zależności

Na wypadek, gdyby pojawił się inny programista, który chciałby zaimplementować ten wzorzec we własnym wdrożeniu pakietu Python, oto dalsze wyjaśnienie procesu brackets []in pip.

Na przykład: Apache Airflow

Aby zainstalować airflowz pip , używamy tego polecenia:

pip install 'apache-airflow'

Możesz zainstalować opcjonalne komponenty przepływu powietrza za pomocą:

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

Kiedy szukać PyPI dla apache-airflowpamiętać, że opcjonalne pakiety nie pojawi się:

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

Wdrożenie za pośrednictwem setup.py

Możesz zobaczyć, jak to zostało zrobione w setup.py skrypcie
Po lewej stronie setup.py- extras_requirejest zdefiniowane.
Po prawej stronie znajdują się skorelowane polecenia instalacyjne dla tych opcjonalnych pakietów podrzędnych.

setup.py vs install

Ben DeMott
źródło
12

Jestem pewien, że są to dodatki do setuptools:

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

Czasami projekt ma „zalecane” zależności, które nie są wymagane do wszystkich zastosowań projektu. Na przykład projekt może oferować opcjonalne wyjście PDF, jeśli zainstalowany jest ReportLab, i obsługę reStructuredText, jeśli zainstalowano docutils. Te opcjonalne funkcje nazywane są „dodatkami” ...

Paweł
źródło
4

To jest dokładnie to lista z setup.pypliku do projektu w pytaniu :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
prosti
źródło
0

Może warto wiedzieć, że ta opcjonalna składnia pakietu dopuszcza wiele dodatków (oddzielonych przecinkiem w nawiasach), jak w:

python -m pip install SomePackage[PDF,EPUB]  # multiple extras

Zgodnie z instrukcją pip

SeriousFun01
źródło