2012-06-21 4 views
44

Не проходя с установкой, я хочу быстро увидеть все пакеты, которые установит pip install.Есть ли способ перечислить зависимости/требования?

+0

Связанные: http://stackoverflow.com/q/9232568/183791 – dusan

+1

Может быть [желток] (https://github.com/cakebread/yolk) может помочь? – jadkik94

+0

желток выглядит как крутой инструмент. Спасибо, что дали мне знать. – lastoneisbearfood

ответ

14

Ближайшие вы можете получить с пипом непосредственно является использованием --no-install аргумента:

pip install --no-install <package> 

Например, это выход при установке сельдерея:

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 

Правда, это оставить некоторое крутится вокруг в виде временных файлов, но он достигает цели. Если вы делаете это с помощью virtualenv (каким вы должны быть), очистка будет такой же простой, как удаление каталога <virtualenv root>/build.

+8

Причина этого в том, что метаданные не существуют вне setup.py, так что в отличие от сказать «rpm» или «dpkg», где вы строите индекс метаданных сверху и запрашиваете, что 'pip' и' pypi' не работа так. Поэтому мы должны передать каждое требование. –

+0

Спасибо @paul, ваш комментарий делает ответ полным – lastoneisbearfood

+8

Я пробовал 'pip --no-install celery', но я получаю ошибку' no такой вариант: --no-install' (pip 1.2.1) –

8

Если и только если пакет установлен, вы можете использовать pip show <package>. Найдите Requires:, поданный в конце вывода. Ясно, что это нарушает ваше требование, но может быть полезным, тем не менее.

Например:

$ 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

Команда pip install <package> --download <path> следует использовать, как указано в комментариях по @radtek, так как от 7.0.0 (2015-05-21), --no-установки является removed от pip. Это загрузит зависимости, необходимые в <path>.

+7

Смешно, ** '--download' тоже устарел. ** Каноническая команда _now_, похоже, 'pip загрузить -d/tmp --no-binary: all:' как [предложено] (https://stackoverflow.com/a/38531949/2809027) [Кошелек карты] (https://stackoverflow.com/пользователей/1210112 /-карты обманщик). –

55

Принимаемый ответ больше не относится к более актуальным версиям пипса и не дает немедленного ответа без просмотра нескольких комментариев, поэтому я предоставляю обновленный ответ.

Это было протестировано с версией пп 8.1.2 и 9.0.1.

Чтобы получить выход без загромождения текущего каталога на Linux использует

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

-d говорит пип каталога, скачать следует поместить файлы.

Лучше просто использовать этот сценарий с аргументом является имя пакета для получения только зависимостей в качестве выходных:

#!/bin/sh 

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

Также имеется here.

+10

** Это замечательно и должно быть принятым ответом. ** Честно говоря, интерфейс 'pip' по умолчанию ужасен и продолжает деградировать с каждым передающим фиксацией. Возможность перечисления зависимостей пакетов _without_ загрузочного пакета cruft должна быть базовой функциональностью. Поскольку это не так, ваш заключительный сценарий оболочки Bourne является следующим лучшим. '' –

0

Другой вариант заключается в использовании вспомогательный скрипт, подобный this one, который использует pip.req.parse_requirements API для разбора файлов requirements.txt и замену distutils.core.setup для разбора setup.py файлов.

-1

В случае, если у вас уже установлены пакеты, этот скрипт может извлечь все зависимости из файла требований, выполнив команду pip show, указанную @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 
Смежные вопросы