มีวิธีแสดงรายการการอ้างอิง / ข้อกำหนดของ pip หรือไม่?


99

โดยไม่ต้องดำเนินการติดตั้งฉันต้องการดูแพ็คเกจทั้งหมดที่pip installจะติดตั้งอย่างรวดเร็ว


ที่เกี่ยวข้อง: stackoverflow.com/q/9232568/183791
dusan

1
บางทีไข่แดงสามารถช่วยได้?
jadkik94

คำถามอื่นรวมถึงคำตอบทางเลือกสำหรับปัญหานี้: stackoverflow.com/questions/41816693/…
pgmank

คำตอบ:


95

คำตอบที่ยอมรับนั้นไม่เกี่ยวข้องกับ pip เวอร์ชันปัจจุบันอีกต่อไปและไม่ได้ให้คำตอบทันทีโดยไม่ได้อ่านความคิดเห็นหลาย ๆ ความคิดเห็นดังนั้นฉันจึงให้คำตอบที่อัปเดต

นี้ได้รับการทดสอบกับ pip รุ่น8.1.2 , 9.0.1 , 10.0.1และ18.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 "";
Ian Clark

@ hans-musgrave เป็นจุดที่ดีในคำตอบอื่นที่ฉันไม่เคยสังเกตมาก่อนดังนั้นจึงอัปเดตสคริปต์ทุบตีเพื่อยกเว้นบรรทัดที่ตรงกับแพ็คเกจพร้อมกับจุดสิ้นสุดของบรรทัดหรือจุดเริ่มต้นของตัวระบุเวอร์ชันที่ถูกต้องแทนที่จะเป็นบรรทัดใด ๆ มีชื่อแพ็กเกจ
Jmills

2
บางแพ็กเกจมีเฉพาะไบนารีดังนั้นจึง--no-binary :all:ไม่ใช่ความคิดที่ดี โปรเจ็กต์ที่จัดส่งเฉพาะล้อและไม่ใช่ sdist จะล้มเหลว
Wim

3
จบลงด้วยการดาวน์โหลดและรวบรวมสำหรับแพ็คเกจการพึ่งพาทั้งหมดซึ่งอาจช้ามาก ....
Louis Yang

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>

ตัวอย่างเช่นนี่คือผลลัพธ์เมื่อติดตั้งคื่นฉ่าย:

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

4
สำหรับ 1.5.4 ใช้ pip install --download = - ขึ้นฉ่ายแบบไม่ใช้ล้อ
radtek

-1

คำสั่งpip install <package> --download <path>ควรจะใช้เป็นที่กล่าวถึงในความคิดเห็นโดย @radtek เนื่องจากเป็นของ 7.0.0 (2015/05/21) --no-ติดตั้งลบออกpipจาก <path>นี้จะดาวน์โหลดอ้างอิงที่จำเป็นเข้าไปใน


10
--downloadเลิกใช้แล้วอย่างน่าขันเช่นกัน คำสั่งที่ยอมรับในขณะนี้ดูเหมือนจะpip download <package> -d /tmp --no-binary :all:เป็นปัญหาโดยบัตรโกง
Cecil Curry

-1

อีกทางเลือกหนึ่งคือการใช้สคริปต์ตัวช่วยที่คล้ายกับสคริปต์นี้ซึ่งใช้pip.req.parse_requirementsAPI เพื่อแยกวิเคราะห์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 นี้ไม่น่าเชื่อถือ สำหรับตัวอย่างดูที่boto3require_dist เป็นโมฆะ แต่เป็นโปรเจ็กต์ที่มีการอ้างอิงในข้อมูลเมตาอย่างแน่นอน
wim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.