Quando faço um congelamento de pip, vejo um grande número de pacotes Python que não instalei explicitamente, por exemplo
$ pip freeze
Cheetah==2.4.3
GnuPGInterface==0.3.2
Landscape-Client==11.01
M2Crypto==0.20.1
PAM==0.4.2
PIL==1.1.7
PyYAML==3.09
Twisted-Core==10.2.0
Twisted-Web==10.2.0
(etc.)
Existe uma maneira de determinar por que o pip instalou esses pacotes dependentes específicos? Em outras palavras, como determino o pacote pai que tinha esses pacotes como dependências?
Por exemplo, talvez eu queira usar o Twisted e não quero depender de um pacote até saber mais sobre não desinstalá-lo ou atualizá-lo acidentalmente.
pipdeptree -r
"Mostra a árvore de dependência de maneira inversa, ou seja, as subdependências são listadas com a lista de pacotes que precisam deles sob eles".pipdeptree
é ótimo. Infelizmente, ele não parece levar em conta as dependências dos pacotes instalados pelo conda: por exemplo, em um ambiente conda ondematplotlib
enumpy
foram instalados usando o pip, masscipy
foi instalado usando o conda,scipy
aparece no pipdeptree como não possuindo dependências nem dependentes (tambémpip show scipy
não mostra requisitos).python -m pipdeptree
contrário (mesmo quando o executável está instalado na virtualenv), ele lista apenas as dependências do sistema.O
pip show
comando mostrará quais pacotes são necessários para o pacote especificado (observe que o pacote especificado já deve estar instalado):pip show
foi introduzido na versão 1.4rc5 do pipfonte
pip show
foi introduzido na versão 1.4rc5, e está presente no (atual como da escrita) 1.4.1pip freeze | grep -v "\-e" | sed s/\=\=.*// | awk 'system("pip show " $1)' | grep -E '^(Name:|Requires:)' | sed s/Name:/\\\nName:/
- mas parece que o pipdeptree agora é uma solução melhor.Como eu disse recentemente em um thread hn , vou recomendar o seguinte:
Tenha um
requirements.txt
arquivo comentado com suas principais dependências:Instale suas dependências:
pip install -r requirements.txt
. Agora você obtém a lista completa de suas dependências compip freeze -r requirements.txt
:Isso permite que você mantenha sua estrutura de arquivos com comentários, separando bem suas dependências das dependências de suas dependências. Dessa forma, você terá um tempo muito melhor no dia em que precisar remover um deles :)
Observe o seguinte:
requirements.raw
com o controle de versão para reconstruir sua totalidaderequirements.txt
.pip install --no-install <package_name>
para listar requisitos específicos.fonte
pip freeze -r requirements.txt
não é amplamente usado. Muito útil para manter as dependências e subdependências.pip install
não suporta mais--no-install
.Você também pode usar um comando de uma linha que canaliza os pacotes nos requisitos para o pip show.
fonte
<package_name>==<package_version>
.Antes de tudo,
pip freeze
exibe todos os pacotes atualmente instalados Python, não necessariamente usando o PIP.Em segundo lugar, os pacotes Python contêm as informações sobre pacotes dependentes, bem como as versões necessárias . Você pode ver as dependências de um pacote específico usando os métodos descritos aqui . Ao atualizar um pacote, o script do instalador, como o PIP, manipulará a atualização de dependências para você.
Para resolver a atualização de pacotes, recomendo o uso de arquivos de requisitos PIP . Você pode definir quais pacotes e versões você precisa e instalá-los imediatamente, usando a instalação do pip.
fonte
Use pipupgrade !
O pipupgrade exibe um gráfico de dependência e destaca cada pacote para uma possível atualização (com base no controle de versão semântico). Ele também exibe dependências filho conflitantes de uma maneira bonita.
pipupgrade
também garante a atualização dos pacotes presentes em vários ambientes Python. Compatível com Python2.7 +, Python3.4 + e pip9 +, pip10 +, pip18 +, pip19 +.fonte
(solução alternativa, resposta não verdadeira)
Tive o mesmo problema, com o lxml não sendo instalado e eu querendo saber quem precisava do lxml. Não quem lxml precisava . Acabou ignorando o problema por.
observando onde os pacotes do meu site estavam sendo colocados.
vá lá e grep recursivo para a importação (o último --invert-match do grep serve para remover os próprios arquivos do lxml da consideração).
Sim, não é uma resposta sobre como usar o pip para fazer isso, mas não obtive sucesso com as sugestões aqui, por qualquer motivo.
fonte
Eu escrevi um script rápido para resolver esse problema. O script a seguir exibirá os pacotes pai (dependentes) de qualquer pacote especificado. Dessa forma, você pode ter certeza de que é seguro atualizar ou instalar qualquer pacote específico. Pode ser usado da seguinte maneira:
dependants.py PACKAGENAME
fonte
get_installed_distributions()
método não está mais disponível. github.com/pypa/pip/issues/5243