Czy istnieje sposób na Listę zależności/wymagań pip?

Bez przechodzenia przez instalację, chcę szybko zobaczyć wszystkie pakiety, które pip install mogłyby zostać zainstalowane.

 104
Author: piperchester, 2012-06-21

7 answers

Zaakceptowana odpowiedź nie ma już znaczenia dla bardziej aktualnych wersji pip i nie daje natychmiastowej odpowiedzi bez przeglądania wielu komentarzy, więc udzielam zaktualizowanej odpowiedzi.

To zostało przetestowane z wersjami pip8.1.2, 9.0.1, 10.0.1, oraz 18.1.

Aby uzyskać wyjście bez zaśmiecania bieżącego katalogu na Linuksie użyj

pip download [package] -d /tmp --no-binary :all: -v

-d informuje Pipa, w którym katalogu należy umieścić pliki do pobrania.

Lepiej, po prostu użyj tego skryptu z argumentem będącym nazwą pakietu, aby uzyskać tylko zależności jako wyjście:

#!/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 .

 100
Author: Jmills,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-28 23:13:57

Zobacz mój projekt johnnydep!

Instalacja:

pip install johnnydep

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
 81
Author: wim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-07 02:10:29

Wtedy i tylko wtedy, gdy pakiet jest instalowany, możesz użyć pip show <package>. Poszukaj pliku Requires: na końcu wyjścia. Oczywiście łamie to twoje wymagania, ale 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
 18
Author: Sardathrion - against SE abuse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 08:39:46

UWAGA: Funkcja użyta w tej odpowiedzi została przestarzała w 2014 i usunięta w 2015 . Zobacz inne odpowiedzi, które dotyczą modern pip.

Najbliższy, jaki możesz uzyskać bezpośrednio z pip, to użycie argumentu --no-install:

pip install --no-install <package>

Na przykład, jest to wyjście podczas instalacji 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

Co prawda pozostawia to pewne problemy 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 katalogu <virtualenv root>/build.

 15
Author: Travis Mehlinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-19 18:02:49

Polecenie pip install <package> --download <path> powinno być użyte, Jak wspomniano w komentarzach @radtek, ponieważ od wersji 7.0.0 (2015-05-21), --no-install jest usunięte z pip. Spowoduje to pobranie potrzebnych zależności do <path>.

 -1
Author: toine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-10 14:36:05

Inną opcją jest użycie skryptu pomocniczego podobnego do tego, który używa API pip.req.parse_requirements do parsowania plików requirements.txt i zastąpienia plików distutils.core.setup do parsowania plików setup.py.

 -1
Author: sschuberth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-16 10:05:13

Cytuję alternatywne rozwiązanie z @onnovalkering:

PyPi dostarcza punkt końcowy JSON z metadanymi pakietu:

>>> import requests
>>> url = 'https://pypi.org/pypi/{}/json'
>>> json = requests.get(url.format('pandas')).json()
>>> json['info']['requires_dist']
['numpy (>=1.9.0)', 'pytz (>=2011k)', 'python-dateutil (>=2.5.0)']
>>> json['info']['requires_python']
'>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*'

Dla konkretnej wersji pakietu dodaj dodatkowy segment wersji do URL:

https://pypi.org/pypi/pandas/0.22.0/json

Również jeśli używasz conda (zgodnie z sugestią @ShpielMeister), możesz użyć:

conda info package==X.X.X

Wyświetlanie informacji, w tym zależności dla konkretnej wersji lub:

conda info package

Aby wyświetlić informacje, w tym zależności od wszystkich obsługiwanych wersji tego pakietu.

 -2
Author: pgmank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-28 14:40:14