Ich sehe immer mehr Befehle wie diesen:
$ pip install "splinter[django]"
Was machen diese eckigen Klammern?
python
pip
dependency-management
Babken Vardanyan
quelle
quelle
pip install "splinter[django]"
, um eine versehentliche Ausdehnung des Musters zu vermeiden.Antworten:
Die von Ihnen verwendete Syntax lautet:
pip install "project[extra]"
In Ihrem Fall sind Sie
installing
dassplinter
Paket, für das zusätzliche Unterstützung bereitgestellt wirddjango
. Die eckigen Klammern ([]
) sind keine spezifische Syntax, sondern nur Konventionen. Wirklich, Sie installieren das Paket mit dem Namen :"splinter[django]"
.Eine Erklärung von
@chetner
:quelle
extra
?splinter
und installierendjango
.splinter[django]
Installiert andererseits eine Variante dessplinter
Pakets, die Unterstützung für enthältdjango
. Beachten Sie, dass es nichts mit demdjango
Paket selbst zu tun hat, sondern nur eine vomsplinter
Paket definierte Zeichenfolge für einen bestimmten Funktionssatz, der aktiviert wird.splinter
ist immer noch der Paketname;pip
selbst analysiertsplinter[django]
und erkennt es als Paketnamen mit einem zusätzlichen "Argument", um die Installation der richtigen Dateien zu erleichtern. Wie das Argumentdjango
interpretiert wird, hängt ganz von dersetup.py
Datei (oder einer anderen Konfigurationsdatei? Ich kenne die Details nicht wirklich) ab, die zum Definieren des Pakets verwendet wirdsplinter
.pip install splinter
werden weniger Anforderungen installiert alspip install splinter[django]
. Die zusätzlichen Pakete, die installiert werden, können zwar (und wahrscheinlich auch) zusätzliche Funktionen des Splitters ermöglichen, ändern jedoch nichts am Splitterpaket selbst. Es informiert pip nur über zusätzliche Abhängigkeiten.Klammern
[optional]
in PIP kennzeichnen optionale AbhängigkeitenFür den Fall, dass ein anderer Entwickler dieses Muster in seiner eigenen Python-Paketbereitstellung implementieren möchte, finden Sie hier eine weitere Erläuterung des
brackets []
In-Pip.Zum Beispiel: Apache Airflow
Um
airflow
von pip zu installieren, verwenden wir diesen Befehl:pip install 'apache-airflow'
Sie können optionale Komponenten des Luftstroms installieren mit:
pip install 'apache-airflow[aws]' # [optional] -----------^
Wenn wir pypi nach Hinweis durchsuchen , dass die optionalen Pakete nicht angezeigt
apache-airflow
werden: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 ...
Implementierung über
setup.py
Wie dies erreicht wurde, sehen Sie im
setup.py
Skript.Links in
setup.py
-extras_require
ist definiert.Rechts sind die entsprechenden Installationsbefehle für diese optionalen Unterpakete aufgeführt.
quelle
Ziemlich sicher, dass dies Setuptools-Extras sind:
https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
quelle
Dies ist genau die Liste aus der
setup.py
Datei für das betreffende Projekt :"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
quelle