Zaakceptowana odpowiedź nie jest już odpowiednia dla bardziej aktualnych wersji pip i nie daje natychmiastowej odpowiedzi bez przeglądania wielu komentarzy, więc dostarczam zaktualizowaną odpowiedź.
Zostało to przetestowane z wersjami pip 8.1.2 , 9.0.1 , 10.0.1 i 18.1 .
Aby uzyskać dane wyjściowe bez zaśmiecania bieżącego katalogu w systemie Linux
@ hans-musgrave wskazał na dobry punkt w innej odpowiedzi, której wcześniej nie zauważyłem, więc zaktualizowałem skrypt basha, aby wykluczyć tylko wiersze pasujące do pakietu wraz z końcem wiersza lub początkiem prawidłowego specyfikatora wersji, a nie jakikolwiek wiersz, który zawiera nazwę pakietu.
Jmills,
3
Niektóre pakiety zapewniają tylko pliki binarne, więc --no-binary :all:nie jest to dobry pomysł. Projekt, który dostarczał tylko koło, a nie sdist, zawiódłby.
wim
4
To kończy się pobieraniem i kompilacją dla wszystkich pakietów zależności, które mogą być bardzo powolne ....
Louis Yang,
1
Zauważ, że to nie wyświetla zależności, które są już zainstalowane (co jest dobre dla 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.
Bardziej złożone drzewo:
$ 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
Ściągnąłem to i używam, to świetny pakiet. ALE czy to nie wymaga instalacji pakietów? OP w szczególności żąda podejścia, które nie wymaga instalacji. Ważne do zastrzeżenia.
so860
5
@ so860 Nie, nie wymaga instalacji pakietów. O to chodzi, to działa w odizolowanym środowisku.
wim
Dla jasności: johnnydepsama instalacja instaluje zależności.
GPHemsley
1
@wim: ten projekt to czysty nadzór! Kocham to !
Jonathan DEKHTIAR
To wydaje się ładnym opakowaniu, ale nie wydaje się, aby zainstalować pakiety. Oczywiście w oddzielnym środowisku env, ale nadal musi tam faktycznie zainstalować pakiety, co jest bardzo powolne, gdy jest dużo pakietów, i kończy się niepowodzeniem, jeśli instalacja pakietu się nie powiedzie. Więc nie sądzę, aby spełniał wymóg OP, aby zobaczyć zależności bez przechodzenia przez proces instalacji.
Ben Farmer
18
Jeśli i tylko wtedy, gdy pakiet jest zainstalowany, możesz użyć pip show <package>. Spójrz naRequires: na końcu wyjścia. Oczywiście to łamie twoje wymagania, ale mimo to może być przydatne.
Na przykład:
$ 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
To pokazuje tylko bezpośrednie wymagania, brakowałoby wszystkich zależności przechodnich. I wymaga instalacji. Więc tak naprawdę nie odpowiada na pytanie.
Najbliższe, które można uzyskać bezpośrednio za pomocą pip, to użycie --no-installargumentu:
pip install --no-install <package>
Na przykład to jest wyjście podczas instalowania selera:
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
Wprawdzie pozostawia to trochę śladów w postaci plików tymczasowych, ale osiąga cel. Jeśli robisz to z virtualenv (którym powinieneś być), czyszczenie jest tak proste, jak usunięcie <virtualenv root>/buildkatalogu.
Powodem tego jest to, że metadane nie istnieją poza setup.py, więc w przeciwieństwie do tego, co mówisz z rpmlub dpkggdzie tworzysz indeks metadanych na górze i odpytujesz go pipi pypinie działa w ten sposób. Musimy więc pominąć każde wymaganie.
12
Próbowałem, pip --no-install celeryale pojawia się błąd no such option: --no-install(pip 1.2.1)
Colonel Panic
4
Myślę, że miał na myślipip install --no-install celery
entropię
23
W mojej wersji pip (1.5.4) --no-installflaga jest przestarzała.
Jian
4
W przypadku wersji 1.5.4 użyj pip install --download =.
radtek
-1
Polecenie pip install <package> --download <path>należy stosować, jak już wspomniano w komentarzu o @radtek, ponieważ od 7.0.0 (2015-05-21) -no-instalacji są usuwane z pip. Spowoduje to pobranie potrzebnych zależności do <path>.
Śmiesznie, --downloadrównież zostało wycofane. Komenda kanoniczny teraz wydaje się być pip download <package> -d /tmp --no-binary :all:jak sugerowano przez kartę Cheat .
Cecil Curry
-1
Inną opcją jest użycie skryptu pomocniczego podobnego do tego, który używa pip.req.parse_requirementsinterfejsu API do analizowania requirements.txtplików i distutils.core.setupzamiennika do analizowania setup.pyplików.
Głosowałem w dół, ponieważ ten punkt końcowy json nie jest wiarygodny. Na przykład boto3, require_dist ma wartość null, ale jest to projekt, który z pewnością ma zależności w metadanych .
Odpowiedzi:
Zaakceptowana odpowiedź nie jest już odpowiednia dla bardziej aktualnych wersji pip i nie daje natychmiastowej odpowiedzi bez przeglądania wielu komentarzy, więc dostarczam zaktualizowaną odpowiedź.
Zostało to przetestowane z wersjami pip 8.1.2 , 9.0.1 , 10.0.1 i 18.1 .
Aby uzyskać dane wyjściowe bez zaśmiecania bieżącego katalogu w systemie Linux
pip download [package] -d /tmp --no-binary :all: -v
-d
informuje pip katalog, w którym pobieranie powinno umieszczać pliki.Lepiej, po prostu użyj tego skryptu z argumentem będącym nazwą pakietu, aby uzyskać tylko zależności jako dane wyjściowe:
#!/bin/sh PACKAGE=$1 pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \ | grep Collecting \ | cut -d' ' -f2 \ | grep -Ev "$PACKAGE(~|=|\!|>|<|$)"
Dostępne również tutaj .
źródło
requirements.txt
użycia tego:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
--no-binary :all:
nie jest to dobry pomysł. Projekt, który dostarczał tylko koło, a nie sdist, zawiódłby.Sprawdź mój projekt johnnydep !
Instalacja:
Przykład użycia:
$ 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.
Bardziej złożone drzewo:
$ 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
źródło
johnnydep
sama instalacja instaluje zależności.Jeśli i tylko wtedy, gdy pakiet jest zainstalowany, możesz użyć
pip show <package>
. Spójrz naRequires:
na końcu wyjścia. Oczywiście to łamie twoje wymagania, ale mimo to może być przydatne.Na przykład:
$ 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
źródło
Najbliższe, które można uzyskać bezpośrednio za pomocą pip, to użycie
--no-install
argumentu:Na przykład to jest wyjście podczas instalowania selera:
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
Wprawdzie pozostawia to trochę śladów w postaci plików tymczasowych, ale osiąga cel. Jeśli robisz to z virtualenv (którym powinieneś być), czyszczenie jest tak proste, jak usunięcie
<virtualenv root>/build
katalogu.źródło
rpm
lubdpkg
gdzie tworzysz indeks metadanych na górze i odpytujesz gopip
ipypi
nie działa w ten sposób. Musimy więc pominąć każde wymaganie.pip --no-install celery
ale pojawia się błądno such option: --no-install
(pip 1.2.1)pip install --no-install celery
--no-install
flaga jest przestarzała.Polecenie
pip install <package> --download <path>
należy stosować, jak już wspomniano w komentarzu o @radtek, ponieważ od 7.0.0 (2015-05-21) -no-instalacji są usuwane zpip
. Spowoduje to pobranie potrzebnych zależności do<path>
.źródło
--download
również zostało wycofane. Komenda kanoniczny teraz wydaje się byćpip download <package> -d /tmp --no-binary :all:
jak sugerowano przez kartę Cheat .Inną opcją jest użycie skryptu pomocniczego podobnego do tego, który używa
pip.req.parse_requirements
interfejsu API do analizowaniarequirements.txt
plików idistutils.core.setup
zamiennika do analizowaniasetup.py
plików.źródło
Cytuję alternatywne rozwiązanie z @onnovalkering :
Również jeśli używasz conda ( zgodnie z sugestią @ShpielMeister ), możesz użyć:
aby wyświetlić informacje, w tym zależności dla określonej wersji lub:
aby wyświetlić informacje, w tym zależności dotyczące wszystkich obsługiwanych wersji tego pakietu.
źródło
boto3
, require_dist ma wartość null, ale jest to projekt, który z pewnością ma zależności w metadanych .