2012-06-21 28 views

Respuesta

14

Lo más cerca que se puede obtener con pip directamente es el uso de la --no-install argumento:

pip install --no-install <package> 

Por ejemplo, esta es la salida al instalar el apio:

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 

Es cierto que esto no dejar un poco navega en forma de archivos temporales, pero logra el objetivo. Si está haciendo esto con virtualenv (que debería ser), la limpieza es tan fácil como eliminar el directorio <virtualenv root>/build.

+8

La razón de esto es que los metadatos no existen fuera de setup.py, a diferencia de decir con 'rpm' o' dpkg' donde se genera un índice de metadatos en la parte superior y se consulta que 'pip' y' pypi' no trabaja de esa manera. Entonces, debemos pasar cada requisito. –

+0

Gracias @paul, tu comentario completa la respuesta – lastoneisbearfood

+8

Probé 'pip --no-install apio' pero recibí el error' no existe esa opción: --no-install' (pip 1.2.1) –

8

Si y solo si se instala el paquete, puede usar pip show <package>. Busque el Requires: archivado al final de la salida. Claramente, esto rompe su requerimiento pero puede ser útil de todos modos.

Por ejemplo:

$ 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 
0

El comando pip install <package> --download <path> se debe utilizar, como se menciona en los comentarios de acuerdo @radtek, ya que a partir de 7.0.0 (21/05/2015), --no-install es removed desde pip. Esto descargará las dependencias necesarias en <path>.

+7

Ridículamente, ** '--download' también ha quedado obsoleto. ** El comando canónico _now_ parece ser 'pip download -d/tmp --no-binary: all:' como [sugerido] (https://stackoverflow.com/a/38531949/2809027) por [The Card Cheat] (https://stackoverflow.com/users/1210112/the-card-cheat). –

55

La respuesta aceptada ya no es relevante para las versiones más actuales de pip y no da una respuesta inmediata sin leer detenidamente varios comentarios, así que estoy proporcionando una respuesta actualizada.

Esto se probó con las versiones de pip 8.1.2 y 9.0.1.

para obtener la salida sin estorbar su directorio actual en Linux utilizar

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

-d dice pip el directorio que descarga debe poner los archivos en.

mejor, sólo tiene que utilizar este script con el argumento de ser el nombre del paquete para obtener sólo las dependencias como salida:

#!/bin/sh 

PACKAGE=$1 
pip download $PACKAGE -d /tmp --no-binary :all: \ 
| grep Collecting \ 
| cut -d' ' -f2 \ 
| grep -v $PACKAGE 

también disponible here.

+10

** Esto es increíble y debería ser la respuesta aceptada. ** Francamente, la interfaz 'pip' predeterminada es horrible y continúa deteriorándose con cada confirmación que pasa. La capacidad de enumerar dependencias de paquetes _sin_ descargar paquete cruft debe ser la funcionalidad principal. Como no es así, el guión de shell de Bourne concluyente es la mejor opción. '' –

0

Otra opción es utilizar un script de ayuda similar a this one que utiliza la API para analizar pip.req.parse_requirementsrequirements.txt archivos y un reemplazo distutils.core.setup para analizar setup.py archivos.

-1

EN CASO de que ya tenga instalados los paquetes, este script puede obtener todas las dependencias de un archivo de requisitos ejecutando el comando pip show mencionado por @Sardathrion.

import commands 

fil = open("requirements.txt") 
for package_line in fil.readlines(): 
    if "==" in package_line: 
     package = package_line.split("==")[0] 
    elif "[" in package_line: 
     package = package_line.split("[")[0] 
    else: 
     package = package_line 

    output = commands.getoutput('pip show %s' % package) 
    try: 
     required = output.split("\n")[-1].split(":")[1] 
    except Exception as e: 
     required = "" 
     print "error {} in package {}".format(e, package) 

    if len(required) > 1: 
     print package, "-- ****%s***" % required 
Cuestiones relacionadas