Widzę coraz więcej takich poleceń:
$ pip install "splinter[django]"
Co robią te nawiasy kwadratowe?
python
pip
dependency-management
Babken Vardanyan
źródło
źródło
pip install "splinter[django]"
, aby uniknąć przypadkowego rozszerzenia powłoki wzoru.Odpowiedzi:
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: .
installing
splinter
django
[]
"splinter[django]"
Wyjaśnienie od
@chetner
:źródło
extra
znaczy?splinter
idjango
.splinter[django]
z drugiej strony instaluje wariantsplinter
pakietu, który zawiera obsługędjango
. Zauważ, że nie ma to nic wspólnego z samymdjango
pakietem, ale jest po prostu ciągiem znaków zdefiniowanym przezsplinter
pakiet dla określonego zestawu funkcji, który zostanie włączony.splinter
jest nadal nazwą pakietu;pip
sama analizujesplinter[django]
i rozpoznaje go jako nazwę pakietu z dodatkowym „argumentem”, aby pomóc mu zainstalować prawidłowe pliki. Sposóbdjango
interpretacji argumentu zależy wyłącznie odsetup.py
pliku (lub innego pliku konfiguracyjnego? Właściwie nie znam szczegółów) użytego do zdefiniowania pakietusplinter
.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.Nawiasy
[optional]
w PIP oznaczają opcjonalne zależnościNa 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ć
airflow
z 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-airflow
pamię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
skrypciePo lewej stronie
setup.py
-extras_require
jest zdefiniowane.Po prawej stronie znajdują się skorelowane polecenia instalacyjne dla tych opcjonalnych pakietów podrzędnych.
źródło
Jestem pewien, że są to dodatki do setuptools:
https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
źródło
To jest dokładnie to lista z
setup.py
pliku 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"],
źródło
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
źródło