Was bedeuten eckige Klammern bei der Pip-Installation?

99

Ich sehe immer mehr Befehle wie diesen:

$ pip install "splinter[django]"

Was machen diese eckigen Klammern?

Babken Vardanyan
quelle
Beachten Sie, dass dies der Fall sein sollte pip install "splinter[django]", um eine versehentliche Ausdehnung des Musters zu vermeiden.
Chepper
@ Ryan Ok, füge das jetzt als richtige Antwort hinzu und ich werde es akzeptieren.
Babken Vardanyan
@chepner Guter Punkt, ich habe den Beitrag bearbeitet.
Babken Vardanyan

Antworten:

78

Die von Ihnen verwendete Syntax lautet:

pip install "project[extra]"

In Ihrem Fall sind Sie installingdas splinterPaket, 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 djangowürde zwei Pakete mit dem Namen splinterund installieren django. splinter[django]Installiert andererseits eine Variante des splinterPakets, die Unterstützung für enthält django. Beachten Sie, dass es nichts mit dem djangoPaket selbst zu tun hat, sondern nur eine vom splinterPaket definierte Zeichenfolge für einen bestimmten Funktionssatz, der aktiviert wird.

Joe Iddon
quelle
1
Möchten Sie Ihre Antwort erweitern, damit zukünftige Benutzer davon profitieren können? Was bedeutet zum Beispiel extra?
Babken Vardanyan
5
@BabkenVardanyan Dieser Befehl würde zwei Pakete mit dem Namen splinterund installieren django. splinter[django]Installiert andererseits eine Variante des splinterPakets, die Unterstützung für enthält django. Beachten Sie, dass es nichts mit dem djangoPaket selbst zu tun hat, sondern nur eine vom splinterPaket definierte Zeichenfolge für einen bestimmten Funktionssatz, der aktiviert wird.
Chepner
4
splinterist immer noch der Paketname; pipselbst analysiert splinter[django]und erkennt es als Paketnamen mit einem zusätzlichen "Argument", um die Installation der richtigen Dateien zu erleichtern. Wie das Argument djangointerpretiert wird, hängt ganz von der setup.pyDatei (oder einer anderen Konfigurationsdatei? Ich kenne die Details nicht wirklich) ab, die zum Definieren des Pakets verwendet wird splinter.
Chepner
1
Ich glaube, das einzige, was die [zusätzliche] Syntax bewirkt, ist die Angabe von zusätzlichen aus extras_requires, die installiert werden. Das heißt, es pip install splinterwerden 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.
William Pursell
5
Ich denke, diese Antwort ist falsch. Dadurch wird kein "splinter [django]" - Paket installiert, sondern sowohl Splitter- als auch Django-Projekte. Dies sind Setuptools-Extras, wie in den Antworten von @paul und prosti
user1523170
17

Klammern [optional]in PIP kennzeichnen optionale Abhängigkeiten

Fü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 airflowvon 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
...

Implementierung über setup.py

Wie dies erreicht wurde, sehen Sie im setup.py Skript.
Links in setup.py- extras_requireist definiert.
Rechts sind die entsprechenden Installationsbefehle für diese optionalen Unterpakete aufgeführt.

setup.py vs install

Ben DeMott
quelle
12

Ziemlich sicher, dass dies Setuptools-Extras sind:

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

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

Paul
quelle
4

Dies ist genau die Liste aus der setup.pyDatei 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"],
Prosti
quelle