La réponse acceptée n'est plus pertinente pour les versions plus actuelles de pip et ne donne pas de réponse immédiate sans lire plusieurs commentaires, je fournis donc une réponse mise à jour.
Cela a été testé avec les versions de pip 8.1.2 , 9.0.1 , 10.0.1 et 18.1 .
Pour obtenir la sortie sans encombrer votre répertoire actuel sous Linux, utilisez
Une lecture très ( très ) grossière de l' requirements.txtutilisation de ceci:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
Ian Clark
@ hans-musgrave a fait un bon point dans une autre réponse que je n'avais pas remarquée auparavant, donc mis à jour le script bash pour exclure uniquement les lignes qui correspondent au package avec la fin de la ligne ou le début d'un spécificateur de version valide plutôt que toute ligne qui contient le nom du package.
Jmills
2
Certains paquets ne fournissent que des binaires, ce --no-binary :all:n'est donc pas une bonne idée. Un projet qui ne livrait que wheel et non sdist échouerait.
wim
3
Cela finit par télécharger et compiler pour tous les paquets de dépendance qui peuvent être très lents ....
Louis Yang
1
Notez que cela ne répertorie pas les dépendances déjà installées (ce qui convient parfaitement à 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.
Un arbre plus complexe:
$ 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
Je l'ai téléchargé et je l'utilise, c'est un excellent package. MAIS ne nécessite-t-il pas l'installation de packages? Le PO demande spécifiquement une approche qui ne nécessite pas d'installation. Important à mettre en garde.
so860
5
@ so860 Non, il ne nécessite pas l'installation des packages. C'est tout l'intérêt, cela fonctionne dans un environnement isolé.
wim
Pour être clair: s'installer johnnydepinstalle les dépendances.
GPHemsley
1
@wim: ce projet est un pur éclat! Aimer !
Jonathan DEKHTIAR
@JonathanDEKHTIAR merci pour les aimables paroles :)
wim
17
Si et seulement si le package est installé, vous pouvez utiliser pip show <package>. Recherchez le Requires:fichier à la fin de la sortie. De toute évidence, cela brise votre exigence, mais peut néanmoins être utile.
Par exemple:
$ 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
Cela ne montre que les exigences directes, toutes les dépendances transitives seraient manquantes. Et cela nécessite une installation. Donc, cela ne répond pas vraiment à la question.
wim
15
Remarque: la fonctionnalité utilisée dans cette réponse est obsolète en 2014 et supprimée en 2015 . Veuillez consulter les autres réponses qui s'appliquent à moderne pip.
Le plus proche que vous pouvez obtenir directement avec pip est d'utiliser l' --no-installargument:
pip install --no-install <package>
Par exemple, voici le résultat lors de l'installation du céleri:
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
Certes, cela laisse une certaine cruauté sous la forme de fichiers temporaires, mais cela atteint l'objectif. Si vous faites cela avec virtualenv (ce que vous devriez être), le nettoyage est aussi simple que de supprimer le <virtualenv root>/buildrépertoire.
La raison en est que les métadonnées n'existent pas en dehors de setup.py, donc contrairement à dire avec rpmou dpkgoù vous créez un index de métadonnées sur le dessus et l'interrogez pipet pypine fonctionne pas de cette façon. Nous devons donc ignorer chaque exigence.
12
J'ai essayé pip --no-install celerymais je reçois l'erreur no such option: --no-install(pip 1.2.1)
Colonel Panic
4
Je pense qu'il voulait direpip install --no-install celery
entropie
23
Sur ma version pip (1.5.4), l' --no-installindicateur est obsolète.
Jian
4
Pour 1.5.4, utilisez pip install --download =.
no
-1
La commande pip install <package> --download <path>doit être utilisée, comme mentionné dans les commentaires de @radtek, car à partir de la version 7.0.0 (21/05/2015), --no-install est supprimé de pip. Cela téléchargera les dépendances nécessaires dans <path>.
Ridiculement, --downloada également été obsolète. La commande canonique semble maintenant être pip download <package> -d /tmp --no-binary :all:celle suggérée par The Card Cheat .
Cecil Curry
-1
Une autre option consiste à utiliser un script d'assistance similaire à celui-ci qui utilise l' pip.req.parse_requirementsAPI pour analyser les requirements.txtfichiers et un distutils.core.setupremplacement pour analyser les setup.pyfichiers.
Réponses:
La réponse acceptée n'est plus pertinente pour les versions plus actuelles de pip et ne donne pas de réponse immédiate sans lire plusieurs commentaires, je fournis donc une réponse mise à jour.
Cela a été testé avec les versions de pip 8.1.2 , 9.0.1 , 10.0.1 et 18.1 .
Pour obtenir la sortie sans encombrer votre répertoire actuel sous Linux, utilisez
-d
indique à pip le répertoire dans lequel le téléchargement doit placer les fichiers.Mieux, utilisez simplement ce script avec l'argument étant le nom du package pour obtenir uniquement les dépendances en sortie:
#!/bin/sh PACKAGE=$1 pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \ | grep Collecting \ | cut -d' ' -f2 \ | grep -Ev "$PACKAGE(~|=|\!|>|<|$)"
Aussi disponible ici .
la source
requirements.txt
utilisation de ceci:< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
--no-binary :all:
n'est donc pas une bonne idée. Un projet qui ne livrait que wheel et non sdist échouerait.Découvrez mon projet johnnydep !
Installation:
Exemple d'utilisation:
$ 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.
Un arbre plus complexe:
$ 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
la source
johnnydep
installe les dépendances.Si et seulement si le package est installé, vous pouvez utiliser
pip show <package>
. Recherchez leRequires:
fichier à la fin de la sortie. De toute évidence, cela brise votre exigence, mais peut néanmoins être utile.Par exemple:
$ 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
la source
Le plus proche que vous pouvez obtenir directement avec pip est d'utiliser l'
--no-install
argument:Par exemple, voici le résultat lors de l'installation du céleri:
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
Certes, cela laisse une certaine cruauté sous la forme de fichiers temporaires, mais cela atteint l'objectif. Si vous faites cela avec virtualenv (ce que vous devriez être), le nettoyage est aussi simple que de supprimer le
<virtualenv root>/build
répertoire.la source
rpm
oudpkg
où vous créez un index de métadonnées sur le dessus et l'interrogezpip
etpypi
ne fonctionne pas de cette façon. Nous devons donc ignorer chaque exigence.pip --no-install celery
mais je reçois l'erreurno such option: --no-install
(pip 1.2.1)pip install --no-install celery
--no-install
indicateur est obsolète.La commande
pip install <package> --download <path>
doit être utilisée, comme mentionné dans les commentaires de @radtek, car à partir de la version 7.0.0 (21/05/2015), --no-install est supprimé depip
. Cela téléchargera les dépendances nécessaires dans<path>
.la source
--download
a également été obsolète. La commande canonique semble maintenant êtrepip download <package> -d /tmp --no-binary :all:
celle suggérée par The Card Cheat .Une autre option consiste à utiliser un script d'assistance similaire à celui-ci qui utilise l'
pip.req.parse_requirements
API pour analyser lesrequirements.txt
fichiers et undistutils.core.setup
remplacement pour analyser lessetup.py
fichiers.la source
Je cite une solution alternative de @onnovalkering :
De plus, si vous utilisez conda ( comme suggéré par @ShpielMeister ), vous pouvez utiliser:
pour afficher des informations, y compris les dépendances d'une version particulière ou:
pour afficher des informations, y compris les dépendances sur toutes les versions prises en charge de ce package.
la source
boto3
, le requires_dist est nul mais c'est un projet qui a certainement des dépendances dans les métadonnées .