क्या सभी पायथन PyPI पैकेज खोजने का एक तरीका है जो कि easy_install या pip के साथ स्थापित किया गया था? मेरा मतलब है, जो सब कुछ छोड़कर / वितरण उपकरणों के साथ स्थापित किया गया है (इस मामले में उपयुक्त-डेबियन पर मिलता है)।
क्या सभी पायथन PyPI पैकेज खोजने का एक तरीका है जो कि easy_install या pip के साथ स्थापित किया गया था? मेरा मतलब है, जो सब कुछ छोड़कर / वितरण उपकरणों के साथ स्थापित किया गया है (इस मामले में उपयुक्त-डेबियन पर मिलता है)।
जवाबों:
pip freeze
स्थापित पैकेजों और उनके संस्करणों की सूची तैयार करेगा। यह आपको उन पैकेजों को एक फ़ाइल में लिखने की अनुमति देता है जो बाद में एक नया वातावरण सेट करने के लिए उपयोग किया जा सकता है।
https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
pip freeze
और pip list
सब कुछ सूचीबद्ध करें। वे उन पैकेजों को बाहर नहीं करते हैं जो द्वारा स्थापित नहीं किए गए थे pip
।
pip freeze
स्क्रिप्ट में भी विश्वसनीय लगता है, जबकि pip list
पाइप के साथ उपयोग किए जाने पर अप्रत्याशित त्रुटियां उत्पन्न होंगी।
pip list -l
या pip list --local
सबसे अच्छा जवाब है, देखें stackoverflow.com/a/43012269/491884 @MJB द्वारा
पाइप के संस्करण 1.3 के रूप में आप अब उपयोग कर सकते हैं pip list
इसमें कुछ उपयोगी विकल्प हैं जिनमें पुराने पैकेज दिखाने की क्षमता शामिल है। यहाँ प्रलेखन है: https://pip.pypa.io/en/latest/reference/pip_list/
pip freeze
pip list --user
केवल उपयोगकर्ता द्वारा स्थापित पैकेज दिखाता है, और सिस्टम-वाइड पैकेज को बाहर करता है।
अगर कोई सोच रहा है कि आप 'पाइप शो' कमांड का उपयोग कर सकते हैं।
pip show [options] <package>
यह दिए गए पैकेज की इंस्टॉल डायरेक्टरी को सूचीबद्ध करेगा।
हाल ही में उबंटू संस्करणों की तरह बर्ताव करती है डेबियन के बारे में तो 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'
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/"
के साथ शुरू:
$ 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
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
नीचे थोड़ा धीमा है, लेकिन यह उन पैकेजों की एक अच्छी तरह से प्रारूपित सूची देता है जिनके 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)
$
@Paul वूलकॉक के जवाब में जोड़ना,
pip freeze > requirements.txt
वर्तमान स्थान पर सक्रिय वातावरण में स्थापित संस्करण संख्याओं के साथ सभी स्थापित पैकेजों के साथ एक आवश्यकता फ़ाइल बनाएगा । चल रहा है
pip install -r requirements.txt
आवश्यकताओं फ़ाइल में निर्दिष्ट संकुल को स्थापित करेगा।
पाइप के नए संस्करणों में वह करने की क्षमता है जो ओपी के माध्यम से pip list -l
या pip freeze -l
( --list
) चाहता है ।
डेबियन पर (कम से कम) मैन पेज यह स्पष्ट नहीं करता है, और मैंने केवल यह खोज की - इस धारणा के तहत कि सुविधा मौजूद होनी चाहिए - इसके साथpip list --help
।
हाल ही की टिप्पणियाँ हैं जो सुझाव देती हैं कि यह विशेषता दस्तावेज़ीकरण या मौजूदा उत्तरों में स्पष्ट नहीं है (हालांकि कुछ द्वारा संकेत दिया गया है), इसलिए मुझे लगा कि मुझे पोस्ट करना चाहिए। मैं एक टिप्पणी के रूप में ऐसा करना पसंद करूंगा, लेकिन मेरे पास प्रतिष्ठा अंक नहीं हैं।
pip freeze --local
8 साल के लिए था । pip list --local
भी उपलब्ध है ... लेकिन ध्यान दें कि ओपी प्रश्न आभासी वातावरण (जो --local
समर्थन करता है) के बारे में नहीं है, लेकिन पैकेज से समझदार डिस्ट्रो पैकेज के बारे में sudo pip install
है।
ध्यान दें कि यदि आपके कंप्यूटर में पायथन के कई संस्करण स्थापित हैं, तो आपके पास प्रत्येक के साथ जुड़े पाइप के कुछ संस्करण हो सकते हैं।
अपने संघों के आधार पर, आपको इस बात से बहुत सतर्क रहने की आवश्यकता है कि आप किस पाइप कमांड का उपयोग करते हैं:
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
।
जैसा कि @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
यहाँ फेडोरा या अन्य आरपीएम डिस्ट्रोस के लिए वन-लाइनर (@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:'
site-packages/
(और dist-packages/
यदि यह मौजूद है) सभी फ़ाइल / फ़ोल्डर नाम प्राप्त करें , और पैकेज के माध्यम से स्थापित किए गए लोगों को पट्टी करने के लिए अपने पैकेज प्रबंधक का उपयोग करें।
पिप फ्रीज़ सभी स्थापित पैकेजों को सूचीबद्ध करता है, भले ही पाइप / easy_install द्वारा नहीं। सेंटो / रेडहैट पर आरपीएम के माध्यम से स्थापित पैकेज पाया जाता है।
यदि आप एनाकोंडा पायथन वितरण का उपयोग करते हैं, तो आप इसका उपयोग कर सकते हैं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
।
पाइप सूची [विकल्प] आप यहां पूरा संदर्भ देख सकते हैं
कम से कम उबंटू के लिए (शायद अन्य भी) यह काम करता है ( इस थ्रेड में पिछले पोस्ट से प्रेरित ):
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