2012-06-21 4 views

답변

14

직접 핍으로 얻을 수있는 가장 가까운이 --no-install 인수 사용하는 것입니다 :

는 는
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 

인정 하듯이, 이것은 몇 가지를 떠나지 않습니다 예를 들어

pip install --no-install <package> 

을,이 출력은 설치 셀러리입니다 임시 파일의 형태로 주위에 뭉툭하게하지만, 목표를 달성하지 않습니다. virtualenv (이렇게해야 함)로이 작업을 수행하는 경우 <virtualenv root>/build 디렉토리를 제거하는 것만큼 쉽게 정리할 수 있습니다.

+8

그 이유는 메타 데이터가 setup.py 외부에 존재하지 않기 때문입니다. 왜냐하면'pip'와'pypi'가 메타 데이터 인덱스를 만들고'pip'와'pypi'가 아닌'rpm'이나'dpkg'와는 달리 그런 식으로 일해라. 따라서 각 요구 사항을 전달해야합니다. –

+0

고마워요 @paul, 당신의 의견은 답을 완전하게합니다 – lastoneisbearfood

+8

나는'pip --no-install celery'을 시도했지만'no such option : --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

@radtek 의해 코멘트에 언급 7.0.0 (2015년 5월 21일) - 노 설치 removed는 그대로 이후의 명령 pip install <package> --download <path>은, 표기 pip에서. 그러면 필요한 종속성이 <path>으로 다운로드됩니다.

+7

어쨌든, **'--download'도 사용되지 않습니다. ** 표준 명령 _now_이있는 것으로 보입니다. 'The Card Cheat '의 핏 다운로드 -d/tmp --no-binary : all :'[suggest] (https://stackoverflow.com/a/38531949/2809027) (https://stackoverflow.com)/users/1210112/the-card-cheat). –

55

허용되는 답변은 더 이상 현재 버전의 pip와 관련이 없으며 여러 의견을 읽지 않고 즉각적인 답변을 제공하지 않으므로 업데이트 된 답변을 제공하고 있습니다.

이것은 파이프 버전 8.1.29.0.1으로 테스트되었습니다.

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' 인터페이스는 끔찍하며 각 커밋을 통과 할 때마다 성능이 저하됩니다. 패키지 크래프트를 다운로드하지 않고 패키지 종속성을 나열하는 기능은 핵심 기능이어야합니다. 그렇지 않기 때문에 결론적으로 Bourne 쉘 스크립트가 차선책입니다. '' –

0

또 다른 옵션은 requirements.txt 파일을 구문 분석 할 수있는 pip.req.parse_requirements API 및 setup.py 파일을 구문 분석하는 distutils.core.setup 교체를 사용 this one 유사한 도우미 스크립트를 사용하는 것입니다.

-1

이미 패키지가 설치되어있는 경우이 스크립트는 @Sardathrion에서 언급 한 pip show 명령을 실행하여 요구 사항 파일에서 모든 종속성을 가져올 수 있습니다.

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 
관련 문제