Ich sehe immer mehr Befehle wie diesen:
$ pip install "splinter[django]"
Was machen diese eckigen Klammern?
Ich sehe immer mehr Befehle wie diesen:
$ pip install "splinter[django]"
Was machen diese eckigen Klammern?
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
das splinter
Paket, für das zusätzliche Unterstützung bereitgestellt wird django
. 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
:
Der Befehl
pip install splinter django
würde zwei Pakete mit dem Namensplinter
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.
extra
?
splinter
und installieren django
. splinter[django]
Installiert andererseits eine Variante des splinter
Pakets, die Unterstützung für enthält django
. Beachten Sie, dass es nichts mit dem django
Paket selbst zu tun hat, sondern nur eine vom splinter
Paket definierte Zeichenfolge für einen bestimmten Funktionssatz, der aktiviert wird.
splinter
ist immer noch der Paketname; pip
selbst analysiert splinter[django]
und erkennt es als Paketnamen mit einem zusätzlichen "Argument", um die Installation der richtigen Dateien zu erleichtern. Wie das Argument django
interpretiert wird, hängt ganz von der setup.py
Datei (oder einer anderen Konfigurationsdatei? Ich kenne die Details nicht wirklich) ab, die zum Definieren des Pakets verwendet wird splinter
.
pip install splinter
werden weniger Anforderungen installiert als pip 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.
[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.
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 angezeigtapache-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
...
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.
Ziemlich sicher, dass dies Setuptools-Extras sind:
Manchmal hat ein Projekt „empfohlene“ Abhängigkeiten, die nicht für alle Verwendungen des Projekts erforderlich sind. Beispielsweise kann ein Projekt eine optionale PDF-Ausgabe bieten, wenn ReportLab installiert ist, und die Unterstützung von reStructuredText, wenn docutils installiert ist. Diese optionalen Funktionen werden als "Extras" bezeichnet ...
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"],