Easy_install / pip দিয়ে ইনস্টল করা সমস্ত প্যাকেজ সন্ধান করবেন?


400

Easy_install বা পাইপ দিয়ে ইনস্টল করা সমস্ত পাইথন পাইপিআই প্যাকেজগুলি খুঁজে পাওয়ার কি কোনও উপায় আছে? আমি বোঝাতে চাইছি, বিতরণ সরঞ্জামগুলির সাথে ইনস্টল করা / ইনস্টল থাকা সমস্ত কিছু বাদ দিয়ে (এই ক্ষেত্রে ডেবিয়ানকে উপভোগ করুন)।


উত্তর:


381

pip freezeইনস্টল করা প্যাকেজগুলির তালিকা এবং তাদের সংস্করণগুলি আউটপুট দেয়। এটি আপনাকে সেই ফাইলগুলিতে সেই প্যাকেজগুলি লেখার অনুমতি দেয় যা পরবর্তীতে একটি নতুন পরিবেশ স্থাপনের জন্য ব্যবহৃত হতে পারে।

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


89
সংস্করণ 1.3 হিসাবে 'পাইপ তালিকা' যুক্ত করা হয়েছে। নীচে আমার উত্তর এবং ডক্সটি
ইনস্টলআর

7
আউটপুট বিভিন্ন ফর্ম্যাট তালিকাবদ্ধ এবং হিমায়িত (লেখার সময় হিসাবে)। ফ্রিজ আউটপুটটি পরিবেশ তৈরিতে ব্যবহার করা যেতে পারে: ডকস.পিথন- গাইড.আর.ইন
টম

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/references/pip_list/


3
জেন্টুতে, এটি সমস্ত প্যাকেজগুলি তালিকাভুক্ত করে, এমনকি পাইপ ব্যতীত অন্য উপায়ে ইনস্টল করা। এটি কি সত্যই অনুরোধ হিসাবে অন্য সিস্টেমে নন-পিপ ইনস্টল করা মডিউলগুলি বাদ দেয়?
jlh

দ্রষ্টব্য যে এটি থেকে কিছুটা পৃথকpip freeze
স্যাজ

1
pip list --userকেবলমাত্র ব্যবহারকারী দ্বারা ইনস্টল করা প্যাকেজগুলি দেখায় এবং সিস্টেম-ব্যাপী প্যাকেজগুলি বাদ দেয়।
জ্যাকব হিউম

138

কেউ যদি ভাবছেন তবে আপনি 'পাইপ শো' কমান্ডটি ব্যবহার করতে পারেন।

pip show [options] <package>

এটি প্রদত্ত প্যাকেজটির ইনস্টল ডিরেক্টরি তালিকাভুক্ত করবে।


24

যদি ডিবিয়ান pip installডিফল্ট লক্ষ্য সম্পর্কিত সাম্প্রতিক উবুন্টু সংস্করণগুলির মতো আচরণ করে তবে এটি মৃত সহজ: এটি ( ডিফল্ট লক্ষ্য) এর /usr/local/lib/পরিবর্তে ইনস্টল করে । চেক/usr/libapt /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747

আমি একজন আর্চলিনাক্স ব্যবহারকারী এবং পাইপের পরীক্ষা-নিরীক্ষা করার সময় আমি এই একই সমস্যার মুখোমুখি হয়েছি। আমি এখানে আর্কটিতে কীভাবে সমাধান করেছি তা এখানে।

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

এখানে কীটি হ'ল /usr/lib/python2.7/site-packages, ওয়াইএমএমভিতে ডিরেক্টরি পাইপ ইনস্টল হয়। 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'

ফেডোরা ব্যবহারকারীরা চেষ্টা করতে পারেন (ধন্যবাদ @ এডিজিক):

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

2
+1 আর্চ ওয়ান-লাইনারের জন্য অনেক ধন্যবাদ, আমি ঠিক সেটাই খুঁজছিলাম। যাইহোক, কৌতূহলী সত্য: আমার আর্চ ইনস্টলেশনটি ইতালীয় ভাষায় স্থানীয়, তবে 'নেসুন প্যাকেচেটো' ('প্যাকেজ নেই' এর জন্য ইতালিয়ান) বলেছে এমন লাইনগুলি সঠিকভাবে 'গ্রেপড' করেছে যদিও আমি 'ন্য প্যাকেজ' না দিয়ে গ্রেপ্তার করেছি। কিভাবে?
নাদির সাম্পাওলি

1
@ বারাপাঁতো @ নাদিরসম্পাওলি গ্রেপ আমার ক্ষেত্রে কিছুই করে না। কারণ গ্রেপ স্টাডাউটে গ্রেপ করার চেষ্টা করে তবে dpkgস্টাডারে ত্রুটি লিখি যাতে আমাকে পুনর্নির্দেশ যোগ করতে হয় 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
হাই, আমি ভুল করে এটিকে হ্রাস করেছিলাম এবং কেবল এটি উপলব্ধি করেছি, এবং এখন আমার ভোটটি লক হয়ে গেছে down আমার ডাউনটোটকে নিরপেক্ষ করার জন্য কেউ কি এই ভোট দিতে পারে? ধন্যবাদ
জোনাথন

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    

সেরা উত্তর আইএমএইচও। সত্যিই সহজ এবং দ্রুত যদি আমি প্যাকেজের নাম জানি। পাইপ তালিকা এমনকি প্রয়োজনীয় নয় এবং হিমায়িত করতে দীর্ঘ সময় নিতে পারে এবং আমার যে জিনিসগুলির যত্ন নেই সেগুলি আমাকে ফিল্টার করে ফেলতে হবে। সরল: পিপ শো my_packge
চক জেড

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
স্পষ্টতই পিপের পরবর্তী সংস্করণে একটি নতুন তালিকা কমান্ড থাকবে: পিপ
ইন্সটলআরর্গ

5

@ পল উলককের উত্তরে যোগ করা,

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

@ এলম্যানন যেমন উল্লেখ করেছেন, এটি আর কাজ করে না এবং এটি আপনার কোডে প্যাকেজ সম্পর্কিত তথ্য পাওয়ার পক্ষে সমর্থিত উপায় নয়। নিম্নলিখিত একটি ব্যতিক্রম উত্থাপন:

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

ফেডোরা বা অন্যান্য আরপিএম ডিস্ট্রোজ (@ বারাপন্টো টিপসের উপর ভিত্তি করে) এর জন্য এখানে ওয়ান-লাইনার রয়েছে:

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

পাইপ ফ্রিজ সমস্ত ইনস্টল করা প্যাকেজগুলি পিপ / ইজিল_ইনস্টল দ্বারা না করে তালিকাবদ্ধ করে। CentOs / redhat এ rpm এর মাধ্যমে ইনস্টল করা একটি প্যাকেজ পাওয়া যায়।


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.