क्या पाइप निर्भरता / आवश्यकताओं को सूचीबद्ध करने का एक तरीका है?


99

स्थापना के माध्यम से जाने के बिना, मैं जल्दी से उन सभी पैकेजों को देखना चाहता हूं जो pip installस्थापित होंगे।


संबंधित: stackoverflow.com/q/9232568/183791
dusan

1
शायद जर्दी मदद कर सकती है?
jadkik94

इस समस्या के वैकल्पिक उत्तर सहित एक अन्य प्रश्न: stackoverflow.com/questions/41816693/…
pgmank

जवाबों:


95

स्वीकृत उत्तर अब पाइप के अधिक वर्तमान संस्करणों के लिए प्रासंगिक नहीं है और कई टिप्पणियों के बिना कोई तत्काल उत्तर नहीं देता है इसलिए मैं एक अद्यतन उत्तर प्रदान कर रहा हूं।

यह पाइपलाइन संस्करणों 8.1.2 , 9.0.1 , 10.0.1 और 18.1 के साथ परीक्षण किया गया था ।

लिनक्स उपयोग पर अपनी वर्तमान निर्देशिका को अव्यवस्थित किए बिना आउटपुट प्राप्त करने के लिए

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

-d बताता है कि निर्देशिका को डाउनलोड करने के लिए फ़ाइलों को डाल देना चाहिए।

बेहतर है, केवल इस स्क्रिप्ट का उपयोग तर्क के साथ किया जा रहा है पैकेज नाम केवल आउटपुट के रूप में निर्भरता प्राप्त करने के लिए:

#!/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 "";
इयान क्लार्क

@ हंस-मुस्ग्रेव ने एक और जवाब में एक अच्छी बात की जिसे मैंने पहले नहीं देखा था, इसलिए बैश स्क्रिप्ट को केवल उन लाइनों को बाहर करने के लिए अपडेट किया गया जो लाइन के अंत के साथ पैकेज से मेल खाती हैं या किसी भी लाइन के बजाय एक वैध संस्करण विनिर्देशक की शुरुआत होती है। पैकेज का नाम शामिल है।
Jmills

2
कुछ पैकेज केवल बाइनरी प्रदान करते हैं, इसलिए --no-binary :all:यह एक अच्छा विचार नहीं है। एक परियोजना जो केवल पहिया भेजती है और sdist विफल होती है।
विम

3
यह अंत तक सभी निर्भरता पैकेजों के लिए डाउनलोड और संकलन करता है जो बहुत धीमा हो सकता है ....
लुई यांग

1
ध्यान दें कि यह पहले से इंस्टॉल किए गए निर्भरता (जो ओपी के लिए ठीक है) को सूचीबद्ध नहीं करता है।
जीपी हेम्सले

66

मेरे प्रोजेक्ट जॉन्नीदीप को देखें !

स्थापना:

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

मैंने इसे डाउनलोड किया और इसका उपयोग किया, यह एक शानदार पैकेज है। लेकिन क्या इसे स्थापित करने के लिए पैकेज की आवश्यकता नहीं है? ओपी विशेष रूप से एक दृष्टिकोण का अनुरोध कर रहा है जिसे स्थापना की आवश्यकता नहीं है। चेतावनी के लिए महत्वपूर्ण है।
so860

5
@ so860 नहीं, इसके लिए संकुल को संस्थापित करने की आवश्यकता नहीं है। यह पूरे बिंदु है, यह एक अलग वातावरण में काम करता है।
विम

स्पष्ट होने के लिए: johnnydepखुद को स्थापित करना निर्भरता स्थापित करता है।
GPHemsley

1
@wim: यह परियोजना शुद्ध चमक है! इसे प्यार करना !
जोनाथन 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
यह केवल प्रत्यक्ष आवश्यकताओं को दर्शाता है, सभी सकर्मक निर्भरता गायब होगी। और इसके लिए एक इंस्टालेशन की आवश्यकता होती है। तो, यह वास्तव में सवाल का जवाब नहीं है।
विम

15

नोट: इस उत्तर में प्रयुक्त सुविधा को 2014 में हटा दिया गया था और 2015 में हटा दिया गया था । कृपया अन्य उत्तर देखें जो आधुनिक पर लागू होते हैं 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
इसका कारण यह है कि मेटाडेटा सेटअपहोम के बाहर मौजूद नहीं है, इसलिए इसके विपरीत rpmया dpkgजहां आप शीर्ष पर एक मेटाडेटा इंडेक्स बनाते हैं और उस पर क्वेरी करते हैं pipऔर pypiउस तरह से काम नहीं करते हैं। इसलिए हमें प्रत्येक आवश्यकता को पार करना होगा।

12
मैंने कोशिश की pip --no-install celeryलेकिन मुझे त्रुटि प्राप्त हुई no such option: --no-install(पाइप 1.2.1)
कर्नल पैनिक

4
मुझे लगता है कि उनका मतलब थाpip install --no-install celery
एन्ट्रापी

23
मेरे पाइप संस्करण (1.5.4) पर --no-installध्वज को हटा दिया गया है।
जियान

4
1.5.4 के लिए, पाइप इंस्टॉल --download = का उपयोग करें।
-कोई

-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:के रूप में सुझाव दिया द्वारा कार्ड Cheat
सेसिल करी

-1

एक अन्य विकल्प के लिए इसी तरह एक सहायक स्क्रिप्ट का उपयोग करने के लिए है इस एक जो का उपयोग करता है pip.req.parse_requirementsपार्स करने के लिए एपीआई 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
मैंने यह अस्वीकार कर दिया है क्योंकि यह जोंस एंडपॉइंट विश्वसनीय नहीं है। उदाहरण के लिए देखें boto3, आवश्यकताएं शून्य हैं, लेकिन यह एक परियोजना है, जिसमें निश्चित रूप से मेटाडेटा में निर्भरताएं हैं
विम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.