O que os colchetes significam na instalação do pip?

108

Vejo mais e mais comandos como este:

$ pip install "splinter[django]"

O que esses colchetes fazem?

Babken Vardanyan
fonte
Observe que deve ser pip install "splinter[django]", para evitar qualquer expansão acidental da casca do padrão.
chepner de
@Ryan Ok, agora adicione isso como uma resposta adequada e vou aceitá-la.
Babken Vardanyan
@chepner Bom argumento, eu editei o post.
Babken Vardanyan

Respostas:

87

A sintaxe que você está usando é:

pip install "project[extra]"

No seu caso, você é installingo splinterpacote que tem suporte adicional para django. Os colchetes ( []) não são sintaxe específica, apenas convenção. Realmente, você está instalando o pacote chamado: "splinter[django]".

Uma explicação de @chetner:

O comando pip install splinter djangoinstalaria dois pacotes chamados splintere django. splinter[django], por outro lado, instala uma variante do splinterpacote que contém suporte para django. Observe que não tem nada a ver com o djangopacote em si, mas é apenas uma string definida pelo splinterpacote para um determinado conjunto de recursos que é ativado.

Joe Iddon
fonte
1
Importa-se de expandir sua resposta para que futuros usuários possam se beneficiar? Por exemplo, o que extrasignifica?
Babken Vardanyan
6
@BabkenVardanyan Esse comando instalaria dois pacotes chamados splintere django. splinter[django], por outro lado, instala uma variante do splinterpacote que contém suporte para django. Observe que não tem nada a ver com o djangopacote em si, mas é apenas uma string definida pelo splinterpacote para um determinado conjunto de recursos que é ativado.
chepner de
6
splinterainda é o nome do pacote; pipo próprio analisa splinter[django]e reconhece-o como um nome de pacote com um "argumento" extra para ajudá-lo a instalar os arquivos corretos. Como o argumento djangoé interpretado depende inteiramente do setup.pyarquivo (ou algum outro arquivo de configuração? Na verdade, não sei os detalhes) usado para definir o pacote splinter.
chepner de
1
Acredito que a única coisa que a sintaxe [extra] faz é especificar adicionais de extras_requires que serão instalados. Ou seja, pip install splinterinstalará menos requisitos do que pip install splinter[django]. Os pacotes adicionais que são instalados podem de fato (e provavelmente fazem) permitir que recursos adicionais do splinter funcionem, mas isso não muda nada no próprio pacote do splinter. Apenas informa ao pip sobre dependências adicionais.
William Pursell
7
Eu acho que essa resposta está incorreta. Isto não instala um pacote "splinter [django]", mas sim projetos splinter e Django. Esses são
ferramentas de configuração
26

Os colchetes [optional]no PIP significam dependências opcionais

Caso apareça outro desenvolvedor procurando implementar esse padrão em sua própria implantação de pacote Python, aqui está uma explicação adicional do brackets []in pip.

Por exemplo: Apache Airflow

Para instalar a airflowpartir do pip , usamos este comando:

pip install 'apache-airflow'

Você pode instalar componentes opcionais de fluxo de ar com:

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

Quando procurar pypi de apache-airflownota que os pacotes opcionais não aparecem:

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

Implementação via setup.py

Você pode ver como isso foi feito no setup.py script
À esquerda em setup.py- extras_requireestá definido.
À direita estão os comandos de instalação correlacionados para esses subpacotes opcionais.

setup.py vs install

Ben DeMott
fonte
12

Tenho certeza de que são ferramentas de configuração extras:

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

Às vezes, um projeto tem dependências “recomendadas”, que não são necessárias para todos os usos do projeto. Por exemplo, um projeto pode oferecer saída PDF opcional se ReportLab estiver instalado, e suporte a reStructuredText se docutils estiver instalado. Esses recursos opcionais são chamados de “extras” ...

Paulo
fonte
4

Esta é exatamente a lista do setup.pyarquivo para o projeto em questão :

"django": ["Django>=1.7.11;python_version<'3.0'", "Django>=2.0.6;python_version>'3.3'", "lxml>=2.3.6", "cssselect", "six"],
Prosti
fonte
0

Talvez valha a pena saber que esta sintaxe de pacote opcional admite vários extras (separados por vírgula entre colchetes) como em:

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

De acordo com o manual do pip

SeriousFun01
fonte