A resposta aceita não é mais relevante para as versões mais atuais do pip e não fornece uma resposta imediata sem examinar vários comentários, portanto, estou fornecendo uma resposta atualizada.
Isso foi testado com as versões do pip 8.1.2 , 9.0.1 , 10.0.1 e 18.1 .
Para obter a saída sem bagunçar seu diretório atual no Linux, use
Uma leitura muito ( muito ) grosseira de como requirements.txtusar isso:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
Ian Clark
@ hans-musgrave fez um bom argumento em outra resposta que eu não tinha notado anteriormente, então atualizei o script bash para excluir apenas as linhas que correspondem ao pacote junto com o fim da linha ou o início de um especificador de versão válido em vez de qualquer linha que contém o nome do pacote.
Jmills
2
Alguns pacotes fornecem apenas binários, então --no-binary :all:não é uma boa ideia. Um projeto que enviasse apenas roda e não sdist iria falhar.
wim
3
Isso acaba baixando e compilando para todos os pacotes de dependência que podem ser muito lentos ....
Louis Yang
1
Observe que isso não lista dependências que já estão instaladas (o que é bom para o OP).
$ johnnydep requests
name summary
------------------------- ----------------------------------------------------------------------
requests Python HTTP for Humans.
├── certifi>=2017.4.17 Python package for providing Mozilla's CA Bundle.
├── chardet<3.1.0,>=3.0.2 Universal encoding detector for Python 2 and 3
├── idna<2.7,>=2.5 Internationalized Domain Names in Applications (IDNA)
└── urllib3<1.23,>=1.21.1 HTTP library with thread-safe connection pooling, file post, and more.
Uma árvore mais complexa:
$ johnnydep ipython
name summary
-------------------------------- -----------------------------------------------------------------------------
ipython IPython: Productive Interactive Computing
├── appnope Disable App Nap on OS X 10.9
├── decorator Better living through Python with decorators
├── jedi>=0.10 An autocompletion tool for Python that can be used for text editors.
│ └── parso==0.1.1 A Python Parser
├── pexpect Pexpect allows easy control of interactive console applications.
│ └── ptyprocess>=0.5 Run a subprocess in a pseudo terminal
├── pickleshare Tiny 'shelve'-like database with concurrency support
├── prompt-toolkit<2.0.0,>=1.0.4 Library for building powerful interactive command lines in Python
│ ├── six>=1.9.0 Python 2and3 compatibility utilities
│ └── wcwidth Measures number of Terminal column cells of wide-character codes
├── pygments Pygments is a syntax highlighting package written in Python.
├── setuptools>=18.5 Easily download, build, install, upgrade, and uninstall Python packages
├── simplegeneric>0.8 Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)
└── traitlets>=4.2 Traitlets Python config system
├── decorator Better living through Python with decorators
├── ipython-genutils Vestigial utilities from IPython
└── six Python 2 and 3 compatibility utilities
Eu baixei e usei, é um ótimo pacote. MAS não requer que os pacotes sejam instalados? O OP está solicitando especificamente uma abordagem que não requer instalação. Importante ressaltar.
so860
5
@ so860 Não, não requer que os pacotes sejam instalados. Esse é o ponto, funciona em um ambiente isolado.
wim
Para ser claro: a johnnydepprópria instalação instala dependências.
GPHemsley
1
@wim: este projeto é puro brilho! Adoro !
Jonathan DEKHTIAR
Este parece ser um bom pacote, mas não parecem instalar os pacotes. Em um env separado, com certeza, mas ainda precisa realmente instalar os pacotes lá, o que é muito lento quando há muitos pacotes e falha se a instalação de um pacote falhar. Portanto, não acho que cumpra o requisito do OP para ver as dependências sem passar pelo processo de instalação.
Ben Farmer
18
Se e somente se o pacote estiver instalado, você pode usar pip show <package>. Procure o campo Requires:no final da saída. Claramente, isso quebra seus requisitos, mas pode ser útil mesmo assim.
Por exemplo:
$ pip --version
pip 7.1.0 [...]
$ pip show pytest
---
Metadata-Version: 2.0
Name: pytest
Version: 2.7.2
Summary: pytest: simple powerful testing with Python
Home-page: http://pytest.org
Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others
Author-email: holger at merlinux.eu
License: MIT license
Location: /home/usr/.tox/develop/lib/python2.7/site-packages
Requires: py
Isso mostra apenas os requisitos diretos, todas as dependências transitivas estariam ausentes. E requer uma instalação. Então, isso realmente não responde à pergunta.
wim
15
Observação: o recurso usado nesta resposta foi suspenso em 2014 e removido em 2015 . Por favor, veja outras respostas que se aplicam ao moderno pip.
O mais próximo que você pode obter com pip diretamente é usando o --no-installargumento:
pip install --no-install <package>
Por exemplo, esta é a saída ao instalar o aipo:
Downloading/unpacking celery
Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded
Running setup.py egg_info for package celery
no previously-included directories found matching 'tests/*.pyc'
no previously-included directories found matching 'docs/*.pyc'
no previously-included directories found matching 'contrib/*.pyc'
no previously-included directories found matching 'celery/*.pyc'
no previously-included directories found matching 'examples/*.pyc'
no previously-included directories found matching 'bin/*.pyc'
no previously-included directories found matching 'docs/.build'
no previously-included directories found matching 'docs/graffles'
no previously-included directories found matching '.tox/*'
Downloading/unpacking anyjson>=0.3.1 (from celery)
Downloading anyjson-0.3.3.tar.gz
Running setup.py egg_info for package anyjson
Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery)
Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded
Running setup.py egg_info for package kombu
Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery)
Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded
Running setup.py egg_info for package python-dateutil
Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery)
Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded
Running setup.py egg_info for package amqplib
Successfully downloaded celery anyjson kombu python-dateutil amqplib
É certo que isso deixa algum lixo na forma de arquivos temporários, mas cumpre o objetivo. Se você estiver fazendo isso com o virtualenv (o que deveria ser), a limpeza é tão fácil quanto remover o <virtualenv root>/builddiretório.
A razão para isso é que os metadados não existem fora de setup.py, ao contrário de dizer com rpmou dpkgonde você constrói um índice de metadados no topo e consulta isso pipe pypinão funciona dessa forma. Portanto, temos que ignorar cada requisito.
12
Tentei, pip --no-install celerymas recebo o erro no such option: --no-install(pip 1.2.1)
Coronel Panic
4
Acho que ele quis dizerpip install --no-install celery
entropia de
23
Na minha versão pip (1.5.4), o --no-installsinalizador está obsoleto.
Jian
4
Para 1.5.4, use pip install --download =.
radtek
-1
O comando pip install <package> --download <path>deve ser usado, como mencionado nos comentários por @radtek, uma vez que a partir de 7.0.0 (2015/05/21), --no-instalação é removido da pip. Isso fará o download das dependências necessárias para <path>.
Ridiculamente, --downloadtambém foi preterido. O comando canônica agora parece ser pip download <package> -d /tmp --no-binary :all:como sugerido pelo cartão fraude .
Cecil Curry
-1
Outra opção é usar um script auxiliar semelhante a este que usa a pip.req.parse_requirementsAPI para analisar requirements.txtarquivos e um distutils.core.setupsubstituto para analisar setup.pyarquivos.
Respostas:
A resposta aceita não é mais relevante para as versões mais atuais do pip e não fornece uma resposta imediata sem examinar vários comentários, portanto, estou fornecendo uma resposta atualizada.
Isso foi testado com as versões do pip 8.1.2 , 9.0.1 , 10.0.1 e 18.1 .
Para obter a saída sem bagunçar seu diretório atual no Linux, use
pip download [package] -d /tmp --no-binary :all: -v
-d
diz ao pip o diretório em que o download deve colocar os arquivos.Melhor, apenas use este script com o argumento sendo o nome do pacote para obter apenas as dependências como saída:
#!/bin/sh PACKAGE=$1 pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \ | grep Collecting \ | cut -d' ' -f2 \ | grep -Ev "$PACKAGE(~|=|\!|>|<|$)"
Também disponível aqui .
fonte
requirements.txt
usar isso:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
--no-binary :all:
não é uma boa ideia. Um projeto que enviasse apenas roda e não sdist iria falhar.Confira meu projeto johnnydep !
Instalação:
Exemplo de uso:
$ johnnydep requests name summary ------------------------- ---------------------------------------------------------------------- requests Python HTTP for Humans. ├── certifi>=2017.4.17 Python package for providing Mozilla's CA Bundle. ├── chardet<3.1.0,>=3.0.2 Universal encoding detector for Python 2 and 3 ├── idna<2.7,>=2.5 Internationalized Domain Names in Applications (IDNA) └── urllib3<1.23,>=1.21.1 HTTP library with thread-safe connection pooling, file post, and more.
Uma árvore mais complexa:
$ johnnydep ipython name summary -------------------------------- ----------------------------------------------------------------------------- ipython IPython: Productive Interactive Computing ├── appnope Disable App Nap on OS X 10.9 ├── decorator Better living through Python with decorators ├── jedi>=0.10 An autocompletion tool for Python that can be used for text editors. │ └── parso==0.1.1 A Python Parser ├── pexpect Pexpect allows easy control of interactive console applications. │ └── ptyprocess>=0.5 Run a subprocess in a pseudo terminal ├── pickleshare Tiny 'shelve'-like database with concurrency support ├── prompt-toolkit<2.0.0,>=1.0.4 Library for building powerful interactive command lines in Python │ ├── six>=1.9.0 Python 2 and 3 compatibility utilities │ └── wcwidth Measures number of Terminal column cells of wide-character codes ├── pygments Pygments is a syntax highlighting package written in Python. ├── setuptools>=18.5 Easily download, build, install, upgrade, and uninstall Python packages ├── simplegeneric>0.8 Simple generic functions (similar to Python's own len(), pickle.dump(), etc.) └── traitlets>=4.2 Traitlets Python config system ├── decorator Better living through Python with decorators ├── ipython-genutils Vestigial utilities from IPython └── six Python 2 and 3 compatibility utilities
fonte
johnnydep
própria instalação instala dependências.Se e somente se o pacote estiver instalado, você pode usar
pip show <package>
. Procure o campoRequires:
no final da saída. Claramente, isso quebra seus requisitos, mas pode ser útil mesmo assim.Por exemplo:
$ pip --version pip 7.1.0 [...] $ pip show pytest --- Metadata-Version: 2.0 Name: pytest Version: 2.7.2 Summary: pytest: simple powerful testing with Python Home-page: http://pytest.org Author: Holger Krekel, Benjamin Peterson, Ronny Pfannschmidt, Floris Bruynooghe and others Author-email: holger at merlinux.eu License: MIT license Location: /home/usr/.tox/develop/lib/python2.7/site-packages Requires: py
fonte
O mais próximo que você pode obter com pip diretamente é usando o
--no-install
argumento:Por exemplo, esta é a saída ao instalar o aipo:
Downloading/unpacking celery Downloading celery-2.5.5.tar.gz (945Kb): 945Kb downloaded Running setup.py egg_info for package celery no previously-included directories found matching 'tests/*.pyc' no previously-included directories found matching 'docs/*.pyc' no previously-included directories found matching 'contrib/*.pyc' no previously-included directories found matching 'celery/*.pyc' no previously-included directories found matching 'examples/*.pyc' no previously-included directories found matching 'bin/*.pyc' no previously-included directories found matching 'docs/.build' no previously-included directories found matching 'docs/graffles' no previously-included directories found matching '.tox/*' Downloading/unpacking anyjson>=0.3.1 (from celery) Downloading anyjson-0.3.3.tar.gz Running setup.py egg_info for package anyjson Downloading/unpacking kombu>=2.1.8,<2.2.0 (from celery) Downloading kombu-2.1.8.tar.gz (273Kb): 273Kb downloaded Running setup.py egg_info for package kombu Downloading/unpacking python-dateutil>=1.5,<2.0 (from celery) Downloading python-dateutil-1.5.tar.gz (233Kb): 233Kb downloaded Running setup.py egg_info for package python-dateutil Downloading/unpacking amqplib>=1.0 (from kombu>=2.1.8,<2.2.0->celery) Downloading amqplib-1.0.2.tgz (58Kb): 58Kb downloaded Running setup.py egg_info for package amqplib Successfully downloaded celery anyjson kombu python-dateutil amqplib
É certo que isso deixa algum lixo na forma de arquivos temporários, mas cumpre o objetivo. Se você estiver fazendo isso com o virtualenv (o que deveria ser), a limpeza é tão fácil quanto remover o
<virtualenv root>/build
diretório.fonte
rpm
oudpkg
onde você constrói um índice de metadados no topo e consulta issopip
epypi
não funciona dessa forma. Portanto, temos que ignorar cada requisito.pip --no-install celery
mas recebo o errono such option: --no-install
(pip 1.2.1)pip install --no-install celery
--no-install
sinalizador está obsoleto.O comando
pip install <package> --download <path>
deve ser usado, como mencionado nos comentários por @radtek, uma vez que a partir de 7.0.0 (2015/05/21), --no-instalação é removido dapip
. Isso fará o download das dependências necessárias para<path>
.fonte
--download
também foi preterido. O comando canônica agora parece serpip download <package> -d /tmp --no-binary :all:
como sugerido pelo cartão fraude .Outra opção é usar um script auxiliar semelhante a este que usa a
pip.req.parse_requirements
API para analisarrequirements.txt
arquivos e umdistutils.core.setup
substituto para analisarsetup.py
arquivos.fonte
Cito uma solução alternativa de @onnovalkering :
Além disso, se estiver usando conda ( conforme sugerido por @ShpielMeister ), você pode usar:
para exibir informações, incluindo dependências para uma versão específica ou:
para exibir informações, incluindo dependências sobre todas as versões com suporte desse pacote.
fonte
boto3
, o require_dist é nulo, mas esse é um projeto que certamente possui dependências nos metadados .