pip 종속성 / 요구 사항을 나열하는 방법이 있습니까?


답변:


95

수락 된 답변은 더 이상 최신 버전의 pip와 관련이 없으며 여러 의견을 숙독하지 않고 즉각적인 답변을 제공하지 않으므로 업데이트 된 답변을 제공하고 있습니다.

이것은 pip 버전 8.1.2 , 9.0.1 , 10.0.118.1 에서 테스트되었습니다 .

Linux에서 현재 디렉토리를 어지럽히 지 않고 출력을 얻으려면

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

-d 다운로드가 파일을 넣어야하는 디렉토리를 pip에 알려줍니다.

더 나은 방법은이 스크립트를 패키지 이름 인 인수와 함께 사용하여 종속성 만 출력으로 가져옵니다.

#!/bin/sh

PACKAGE=$1
pip download $PACKAGE -d /tmp --no-binary :all:-v 2>&1 \
| grep Collecting \
| cut -d' ' -f2 \
| grep -Ev "$PACKAGE(~|=|\!|>|<|$)"

여기 에서도 사용할 수 있습니다 .


매우 ( 아주 의) 원유 읽기 requirements.txt:이 사용< requirements.txt egrep -v "^#" | egrep -v "^$" | xargs -L 1 -I % sh -c 'echo %; echo "======"; ./deps.sh %; echo "";
이안 클라크

@ hans-musgrave는 이전에 알지 못했던 다른 답변에서 좋은 지적을 했으므로 bash 스크립트를 업데이트하여 행 끝 또는 유효한 버전 지정자 의 시작과 함께 패키지와 일치하는 행만 제외 합니다. 패키지 이름을 포함합니다.
Jmills

2
일부 패키지 는 바이너리 제공하므로 --no-binary :all:좋은 생각이 아닙니다. 휠만 제공하고 sdist가 아닌 프로젝트는 실패합니다.
wim

3
매우 느릴 수있는 모든 의존 패키지 다운로드 및 컴파일까지이 말 ...
루이 양

1
이것은 이미 설치된 종속성을 나열하지 않습니다 (OP에 적합).
GPHemsley

66

내 프로젝트 johnnydep을 확인하십시오 !

설치:

pip install johnnydep

사용 예 :

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

더 복잡한 트리 :

$ 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

나는 이것을 다운로드하고 그것을 사용합니다. 그것은 훌륭한 패키지입니다. 하지만 패키지를 설치할 필요가 없습니까? OP는 특히 설치가 필요하지 않은 접근 방식을 요청하고 있습니다. 경고하는 것이 중요합니다.
so860

5
@ so860 아니요, 패키지를 설치할 필요가 없습니다. 그것이 요점이며 격리 된 환경에서 작동합니다.
wim

명확하게 말하면 johnnydep자체 설치는 종속성을 설치합니다.
GPHemsley

1
@wim :이 프로젝트는 순수한 광채입니다! 그것을 사랑하십시오!
Jonathan DEKHTIAR

@JonathanDEKHTIAR 친절한 말에 감사드립니다 :)
wim

17

패키지가 설치되어있는 경우에만 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

3
이것은 직접적인 요구 사항만을 보여 주며 모든 전 이적 종속성이 누락됩니다. 그리고 설치가 필요합니다. 따라서 실제로 질문에 대한 답이 아닙니다.
wim

15

참고 :이 답변에 사용 된 기능 은 2014 년더 이상 사용되지 않고 2015 년에 제거되었습니다 . 현대에 적용되는 다른 답변을 참조하십시오 pip.

pip로 직접 얻을 수있는 가장 가까운 방법은 다음 --no-install인수 를 사용하는 것입니다 .

pip install --no-install <package>

예를 들어 다음은 celery를 설치할 때의 출력입니다.

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그런 식으로 작동하지 않습니다. 따라서 우리는 각 요구 사항을 전달해야합니다.

12
시도 pip --no-install celery했지만 오류가 발생했습니다 no such option: --no-install(pip 1.2.1)
Colonel Panic

4
나는 그가 의미했다고 생각한다pip install --no-install celery
엔트로피

23
내 pip 버전 (1.5.4)에서는 --no-install플래그가 더 이상 사용되지 않습니다.
Jian 2014 년

4
1.5.4의 경우 pip install --download =를 사용합니다. --no-use-wheel celery
radtek 2014-08-05

-1

명령은 pip install <package> --download <path>@radtek 의해 의견 바와 같이 --no 설치되어 7.0.0 (2015년 5월 21일)의 이후로, 표기 제거 에서 pip. 그러면 필요한 종속성이 <path>.


10
말도 안되게 --download도 더 이상 사용되지 않습니다. 정식 명령은 이제 것으로 나타납니다 pip download <package> -d /tmp --no-binary :all:같은 제안 에 의해 카드 치트 .
Cecil Curry

-1

또 다른 옵션은 유사한 도우미 스크립트를 사용하는 것 이 하나의 용도 pip.req.parse_requirements구문 분석 API requirements.txt파일과 distutils.core.setup구문 분석에 대한 대체 setup.py파일을.


-1

@onnovalkering대체 솔루션을 인용합니다 .

PyPi는 패키지 메타 데이터가 포함 된 JSON 엔드 포인트를 제공합니다.

>>> 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.*'

특정 패키지 버전의 경우 URL에 추가 버전 세그먼트를 추가합니다.

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

또한 conda (@ShpielMeister 에서 제안한대로 )를 사용하는 경우 다음을 사용할 수 있습니다.

conda info package==X.X.X

특정 버전에 대한 종속성을 포함한 정보를 표시하거나 :

conda info package

해당 패키지의 지원되는 모든 버전에 대한 종속성을 포함하여 정보를 표시합니다.


1
이 json 엔드 포인트가 신뢰할 수 없기 때문에 반대 투표를했습니다. 예를 들어 boto3, requires_dist가 null이지만 메타 데이터에 확실히 종속성 이있는 프로젝트입니다 .
WIM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.