Easy_install / pip के साथ स्थापित सभी संकुल ज्ञात कीजिए?


400

क्या सभी पायथन PyPI पैकेज खोजने का एक तरीका है जो कि easy_install या pip के साथ स्थापित किया गया था? मेरा मतलब है, जो सब कुछ छोड़कर / वितरण उपकरणों के साथ स्थापित किया गया है (इस मामले में उपयुक्त-डेबियन पर मिलता है)।


जवाबों:


381

pip freezeस्थापित पैकेजों और उनके संस्करणों की सूची तैयार करेगा। यह आपको उन पैकेजों को एक फ़ाइल में लिखने की अनुमति देता है जो बाद में एक नया वातावरण सेट करने के लिए उपयोग किया जा सकता है।

https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze


89
संस्करण 1.3 के रूप में 'पाइप सूची' को जोड़ा गया है। : यहाँ नीचे मेरा उत्तर और डॉक्स देखें pip-installer.org/en/latest/usage.html#pip-list
keybits

7
सूची और आउटपुट को विभिन्न प्रारूपों (लिखने के समय तक) फ्रीज करें। फ्रीज़ आउटपुट का उपयोग वातावरण को फिर से बनाने के लिए किया जा सकता है: docs.python-guide.org/en/latest/dev/virtualenvs/#other-notes
Tom Saleeba

18
pip freezeऔर pip listसब कुछ सूचीबद्ध करें। वे उन पैकेजों को बाहर नहीं करते हैं जो द्वारा स्थापित नहीं किए गए थे pip
एलियाड

मुझे pip freezeस्क्रिप्ट में भी विश्वसनीय लगता है, जबकि pip listपाइप के साथ उपयोग किए जाने पर अप्रत्याशित त्रुटियां उत्पन्न होंगी।
डेल एंडरसन

2
नया (?) pip list -lया pip list --localसबसे अच्छा जवाब है, देखें stackoverflow.com/a/43012269/491884 @MJB द्वारा
jmuc

255

पाइप के संस्करण 1.3 के रूप में आप अब उपयोग कर सकते हैं pip list

इसमें कुछ उपयोगी विकल्प हैं जिनमें पुराने पैकेज दिखाने की क्षमता शामिल है। यहाँ प्रलेखन है: https://pip.pypa.io/en/latest/reference/pip_list/


3
जेंटू पर, यह सभी पैकेजों को सूचीबद्ध करता है, यहां तक ​​कि पाइप द्वारा अन्य साधनों द्वारा स्थापित किए गए। क्या यह वास्तव में प्रश्न के अनुरोध के अनुसार अन्य सिस्टम पर गैर-पाइप स्थापित मॉड्यूल को बाहर करता है?
jlh

ध्यान दें कि यह से थोड़ा भिन्न हैpip freeze
sg

1
pip list --userकेवल उपयोगकर्ता द्वारा स्थापित पैकेज दिखाता है, और सिस्टम-वाइड पैकेज को बाहर करता है।
जैकब ह्यूम

138

अगर कोई सोच रहा है कि आप 'पाइप शो' कमांड का उपयोग कर सकते हैं।

pip show [options] <package>

यह दिए गए पैकेज की इंस्टॉल डायरेक्टरी को सूचीबद्ध करेगा।


24

हाल ही में उबंटू संस्करणों की तरह बर्ताव करती है डेबियन के बारे में तो pip installडिफ़ॉल्ट लक्ष्य, यह मृत आसान है: यह करने के लिए स्थापित करता है /usr/local/lib/के बजाय /usr/lib( aptडिफ़ॉल्ट लक्ष्य)। चेक /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747

मैं एक ArchLinux उपयोगकर्ता हूं और जैसा कि मैंने पाइप के साथ प्रयोग किया था, मैं इसी समस्या से मिला। यहां मैंने इसे आर्क में हल किया है।

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'

यहाँ कुंजी है /usr/lib/python2.7/site-packages, जो निर्देशिका पाइप YMMV को स्थापित करता है। pacman -Qoकैसे आर्क के पीएसी केज मैन फाइल के स्वामित्व के लिए जाँच करता है। No packageउस रिटर्न का हिस्सा है जो देता है जब कोई पैकेज फ़ाइल का मालिक नहीं होता है error: No package owns $FILENAME:। ट्रिकी वैकल्पिक हल: मैं के बारे में क्वेरी करने कर रहा हूँ __init__.pyक्योंकिpacman -Qo जब यह निर्देशिका में आता है तो थोड़ा अनजान होता है :(

अन्य डिस्ट्रोस के लिए ऐसा करने के लिए, आपको यह पता लगाना होगा कि कहाँ pipसामान स्थापित किया गया है (बस sudo pip installकुछ), फ़ाइल के स्वामित्व के लिए कैसे क्वेरी करें (डेबियन / उबंटू विधि है dpkg -S) और "कोई पैकेज उस पथ का मालिक नहीं है" क्या है (डेबियन / उबंटू है no path found matching pattern)। डेबियन / उबंटू उपयोगकर्ता, सावधान रहें: dpkg -Sयदि आप इसे एक प्रतीकात्मक लिंक देते हैं तो असफल हो जाएंगे। बस इसे पहले उपयोग करके हल करें realpath। ऐशे ही:

find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'

फेडोरा उपयोगकर्ता कोशिश कर सकते हैं (धन्यवाद @eddygeek):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'

2
+1 आर्क वन-लाइनर के लिए बहुत-बहुत धन्यवाद, बस यही मैं ढूंढ रहा था। वैसे, जिज्ञासु तथ्य: मेरे आर्क इंस्टॉलेशन को इटैलियन में स्थानीयकृत किया गया है, लेकिन सही तरीके से 'ग्रीप्ड' लाइनों को 'ग्रेप' कर दिया गया है, जिसमें कहा गया है कि 'नेस पैकेज' ('नो पैकेज' के लिए इटैलियन) भले ही मैंने 'नो पैकेज' के लिए ग्रीप किया हो। कैसे?
नादिर संपोली

1
@barrapanto @NadirSampaoli grep मेरे मामले में कुछ नहीं करता है। क्योंकि grep stdout में grep करने का प्रयास करता है, लेकिन dpkgत्रुटि को stderr में लिखना है इसलिए मुझे एक रीडायरेक्ट जोड़ना होगा 2>&1। और अंतरराष्ट्रीय आउटपुट के लिए LANG= सामने जोड़ें xargs dpkg -s। और sedपथ का केवल पैकेज नाम रखने के लिए एक अच्छा उपकरण भी है;)। इसलिए मैं इसके साथ समाप्त होता हूं:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
डेविड बोहो

1
नमस्ते, मैंने इसे गलती से घटाया और केवल इसे महसूस किया, और अब मेरे वोट लॉक हो गए हैं। क्या कोई मेरे डाउनवोट को बेअसर करने के लिए इसे वोट कर सकता है? धन्यवाद
जोनाथन

22

के साथ शुरू:

$ pip list

सभी पैकेजों को सूचीबद्ध करने के लिए। एक बार जब आपको वह पैकेज मिल जाए, जिसका आप उपयोग करते हैं:

$ pip show <package-name>

यह आपको इस पैकेज के बारे में विवरण दिखाएगा, जिसमें इसका फ़ोल्डर भी शामिल है। यदि आप पहले से ही पैकेज का नाम जानते हैं तो आप पहले भाग को छोड़ सकते हैं

पाइप शो के बारे में अधिक जानकारी के लिए यहां क्लिक करें और यहां पाइप सूची के बारे में अधिक जानकारी के लिए।

उदाहरण:

$ pip show jupyter
Name: jupyter
Version: 1.0.0
Summary: Jupyter metapackage. Install all the Jupyter components in one go.
Home-page: http://jupyter.org
Author: Jupyter Development Team
Author-email: jupyter@googlegroups.org
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel    

सबसे अच्छा जवाब IMHO। वास्तव में सरल और तेज अगर मुझे पैकेज का नाम पता है। पाइप सूची भी आवश्यक नहीं है और फ्रीज में एक लंबा समय लग सकता है और मुझे उन सामानों को फ़िल्टर करना होगा जिनकी मुझे परवाह नहीं है। सिंपल: पिप शो माय_पेक
चक ज़ू

8

pip.get_installed_distributions() स्थापित पैकेजों की एक सूची देगा

import pip
from os.path import join

for package in pip.get_installed_distributions():
    print(package.location) # you can exclude packages that's in /usr/XXX
    print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package

2
यह अब काम नहीं करेगा। देखें github.com/pypa/pip/issues/5243 इसके बजाय आप का उपयोग करना चाहिए: आयात pkg_resources [प्रिंट (d.project_name) घ के लिए pkg_resources.working_set में]
Almenon

6

नीचे थोड़ा धीमा है, लेकिन यह उन पैकेजों की एक अच्छी तरह से प्रारूपित सूची देता है जिनके pipबारे में पता है। यह कहना है, उन सभी को "पाइप" द्वारा स्थापित नहीं किया गया था, लेकिन उन सभी को पाइप द्वारा उन्नत किया जाना चाहिए।

$ pip search . | egrep -B1 'INSTALLED|LATEST'

यह धीमा होने का कारण यह है कि यह पूरे पीपीपी रेपो की सामग्री को सूचीबद्ध करता है। मैंने एक टिकट दायर किया जो सुझाव देता है pip listकि समान कार्यक्षमता प्रदान करें लेकिन अधिक कुशलता से।

नमूना आउटपुट: (सभी के लिए 'के बजाय एक सबसेट पर खोज को प्रतिबंधित)।

$ pip search selenium | egrep -B1 'INSTALLED|LATEST'

selenium                  - Python bindings for Selenium
  INSTALLED: 2.24.0
  LATEST:    2.25.0
--
robotframework-selenium2library - Web testing library for Robot Framework
  INSTALLED: 1.0.1 (latest)
$

खुद टिकट क्यों नहीं फाइल करते?
लजार्रे

1
जाहिरा तौर पर पाइप के अगले संस्करण में एक नई सूची कमांड होगी: pip-installer.org/en/latest/usage.html#pip-list
MarkHu

5

@Paul वूलकॉक के जवाब में जोड़ना,

pip freeze > requirements.txt

वर्तमान स्थान पर सक्रिय वातावरण में स्थापित संस्करण संख्याओं के साथ सभी स्थापित पैकेजों के साथ एक आवश्यकता फ़ाइल बनाएगा । चल रहा है

pip install -r requirements.txt

आवश्यकताओं फ़ाइल में निर्दिष्ट संकुल को स्थापित करेगा।


5

पाइप के नए संस्करणों में वह करने की क्षमता है जो ओपी के माध्यम से pip list -lया pip freeze -l( --list) चाहता है ।
डेबियन पर (कम से कम) मैन पेज यह स्पष्ट नहीं करता है, और मैंने केवल यह खोज की - इस धारणा के तहत कि सुविधा मौजूद होनी चाहिए - इसके साथpip list --help

हाल ही की टिप्पणियाँ हैं जो सुझाव देती हैं कि यह विशेषता दस्तावेज़ीकरण या मौजूदा उत्तरों में स्पष्ट नहीं है (हालांकि कुछ द्वारा संकेत दिया गया है), इसलिए मुझे लगा कि मुझे पोस्ट करना चाहिए। मैं एक टिप्पणी के रूप में ऐसा करना पसंद करूंगा, लेकिन मेरे पास प्रतिष्ठा अंक नहीं हैं।


1
पता चलता है कि हम pip freeze --local8 साल के लिए था । pip list --localभी उपलब्ध है ... लेकिन ध्यान दें कि ओपी प्रश्न आभासी वातावरण (जो --localसमर्थन करता है) के बारे में नहीं है, लेकिन पैकेज से समझदार डिस्ट्रो पैकेज के बारे में sudo pip installहै।
कैपी ईथरल

4

ध्यान दें कि यदि आपके कंप्यूटर में पायथन के कई संस्करण स्थापित हैं, तो आपके पास प्रत्येक के साथ जुड़े पाइप के कुछ संस्करण हो सकते हैं।

अपने संघों के आधार पर, आपको इस बात से बहुत सतर्क रहने की आवश्यकता है कि आप किस पाइप कमांड का उपयोग करते हैं:

pip3 list 

मेरे लिए काम किया, जहां मैं पायथन 3.4 चला रहा हूं। बस का उपयोग pip listकर त्रुटि वापस कर दिया The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip


पाइप python2.7 के लिए है, pip3 python3.x के लिए है
mjp

3

जैसा कि @almenon ने बताया, यह अब काम नहीं करता है और यह आपके कोड में पैकेज की जानकारी प्राप्त करने का समर्थित तरीका नहीं है। निम्नलिखित एक अपवाद उठाता है:

import pip
installed_packages = dict([(package.project_name, package.version) 
                           for package in pip.get_installed_distributions()])

इसे पूरा करने के लिए, आप आयात कर सकते हैं pkg_resources। यहाँ एक उदाहरण है:

import pkg_resources
installed_packages = dict([(package.project_name, package.version)
                           for package in pkg_resources.working_set])

मैं चालू हूँ v3.6.5


2

यहाँ फेडोरा या अन्य आरपीएम डिस्ट्रोस के लिए वन-लाइनर (@barrapanto सुझावों के आधार पर) है:

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'

क्लीनर उत्पादन प्राप्त करने के लिए इसे पिछले कमांड में जोड़ें:

 | sed -r 's:.*/(\w+)/__.*:\1:'

1

site-packages/(और dist-packages/यदि यह मौजूद है) सभी फ़ाइल / फ़ोल्डर नाम प्राप्त करें , और पैकेज के माध्यम से स्थापित किए गए लोगों को पट्टी करने के लिए अपने पैकेज प्रबंधक का उपयोग करें।


1

पिप फ्रीज़ सभी स्थापित पैकेजों को सूचीबद्ध करता है, भले ही पाइप / easy_install द्वारा नहीं। सेंटो / रेडहैट पर आरपीएम के माध्यम से स्थापित पैकेज पाया जाता है।


1

यदि आप एनाकोंडा पायथन वितरण का उपयोग करते हैं, तो आप इसका उपयोग कर सकते हैंconda list कमांड का देखने के लिए हैं कि किस विधि द्वारा स्थापित किया गया था:

user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name                    Version                   Build  Channel
_ipyw_jlab_nb_ext_conf    0.1.0            py36h2fc01ae_0
alabaster                 0.7.10           py36h174008c_0
amqp                      2.2.2                     <pip>
anaconda                  5.1.0                    py36_2
anaconda-client           1.6.9                    py36_0

द्वारा स्थापित प्रविष्टियों को हथियाने के लिए pip(संभवतः सहित)pip स्वयं ):

user@pc:~ $ conda list | grep \<pip
amqp                      2.2.2                     <pip>
astroid                   1.6.2                     <pip>
billiard                  3.5.0.3                   <pip>
blinker                   1.4                       <pip>
ez-setup                  0.9                       <pip>
feedgenerator             1.9                       <pip>

बेशक आप शायद पहले कॉलम का चयन करना चाहते हैं, जिसे आप (छोड़कर) कर सकते हैं pip यदि आवश्यक हो तो )

user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp        
astroid
billiard
blinker
ez-setup
feedgenerator 

अंत में आप इन मूल्यों को पकड़ सकते हैं और निम्नलिखित का उपयोग करके उन सभी की स्थापना रद्द कर सकते हैं:

user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y

हटाने के लिए पुष्टि देने से बचने के -yलिए ध्वज के उपयोग पर ध्यान दें pip uninstall


1

जो लोग पिप स्थापित नहीं है के लिए, मैं इस त्वरित स्क्रिप्ट पर पाया GitHub (अजगर 2.7.13 के साथ काम करता है):

import pkg_resources
distros = pkg_resources.AvailableDistributions()
for key in distros:
  print distros[key]


0

कम से कम उबंटू के लिए (शायद अन्य भी) यह काम करता है ( इस थ्रेड में पिछले पोस्ट से प्रेरित ):

printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.