পাইথন প্যাকেজের নির্ভরতা কীভাবে পাওয়া যায়


109

আপনি কীভাবে প্রোগ্রামটিমে পাইথন প্যাকেজের নির্ভরতার তালিকা পেতে পারেন?

স্ট্যান্ডার্ডটি setup.pyএই নথিভুক্ত করেছে, তবে পাইথন বা কমান্ড লাইন থেকে এটিকে অ্যাক্সেস করার সহজ উপায় আমি খুঁজে পাচ্ছি না ।

আদর্শভাবে, আমি এমন কিছু সন্ধান করছি:

$ pip install somepackage --only-list-deps
kombu>=3.0.8
billiard>=3.3.0.13
boto>=2.26

বা:

>>> import package_deps
>>> package = package_deps.find('somepackage')
>>> print package.dependencies
['kombu>=3.0.8', 'billiard>=3.3.0.13', 'boto>=2.26']

দ্রষ্টব্য, আমি কোনও প্যাকেজ আমদানি করার এবং সমস্ত রেফারেন্সযুক্ত মডিউল সন্ধান করার কথা বলছি না। যদিও এটি নির্ভরশীল প্যাকেজগুলির বেশিরভাগ সন্ধান করতে পারে তবে এটি প্রয়োজনীয় ন্যূনতম সংস্করণ নম্বরটি সন্ধান করতে সক্ষম হবে না। এটি কেবল সেটআপ.পাইতে সঞ্চিত।


বেশ কয়েকটি উত্তর এখানে প্রোগ্রামগুলিতে ব্যবহারের জন্য পাইপ আমদানি করা দেখায়। পিপ ডকুমেন্টেশন জোরালোভাবে পিপ এর এই ব্যবহার বিরুদ্ধে পরামর্শ দেয়। এই সমাধানগুলির যে কোনও একটি গুরুত্বপূর্ণ বিষয়টির জন্য ব্যবহৃত হচ্ছে তা মনে রাখার মতো কিছু।
জর্ডান ম্যাকি

উত্তর:


100

pip show [package name]কমান্ড ছাড়াও আছে pipdeptree

শুধু কর

$ pip install pipdeptree

তারপর চালান

$ pipdeptree

এবং এটি আপনাকে গাছের আকারে আপনার নির্ভরতা দেখাবে, যেমন,

flake8==2.5.0
  - mccabe [required: >=0.2.1,<0.4, installed: 0.3.1]
  - pep8 [required: !=1.6.0,>=1.5.7,!=1.6.1,!=1.6.2, installed: 1.5.7]
  - pyflakes [required: >=0.8.1,<1.1, installed: 1.0.0]
ipdb==0.8
  - ipython [required: >=0.10, installed: 1.1.0]

প্রকল্পটি https://github.com/naiquevin/pipdeptree এ অবস্থিত , আপনি ব্যবহারের তথ্যও পাবেন।


8
pipdeptreeসমস্ত ইনস্টল করা প্যাকেজগুলির নির্ভরতা প্রদর্শন করুন , কেবলমাত্র প্রদত্ত প্যাকেজগুলির মধ্যে নয়। আপনি এর --jsonআউটপুট ফিল্টার করতে পারার পরেও এটি ইতিমধ্যে ইনস্টল করা প্যাকেজগুলির উপর নির্ভর করে।
স্কুবার্থ

সত্য, কিন্তু উত্তর এখনও দরকারী যখন আপনি কেন প্যাকেজ ইনস্টল করা একটি হোল্ড আপনার নেই পেতে চান requirements.txt:)
beruic

4
এছাড়াও আপনি কেবলমাত্র কয়েকটি প্যাকেজ নির্বাচন করতে -pবিকল্পটি ব্যবহার করতে পারেন যার নির্ভরতাগুলি আপনি অন্বেষণ করতে চান।
জ্যাকারি রমজি

4
pipdeptreeঅনুকূলকরণ যখন সুপার সহায়ক ছিল requirements.txt$ pipdeptree | grep -P '^\w+' এটি কেবল শীর্ষ স্তরের প্যাকেজগুলিকে আউটপুট দেয়। এখানে
নেতৃত্ব বিকাশকারী

66

showকমান্ড ব্যবহার করার চেষ্টা করুন pip, উদাহরণস্বরূপ:

$ pip show tornado
---
Name: tornado
Version: 4.1
Location: *****
Requires: certifi, backports.ssl-match-hostname

আপডেট (নির্দিষ্ট সংস্করণ সহ Deps পুনরুদ্ধার):

from pip._vendor import pkg_resources


_package_name = 'somepackage'
_package = pkg_resources.working_set.by_key[_package_name]

print([str(r) for r in _package.requires()])  # retrieve deps from setup.py

Output: ['kombu>=3.0.8', 
         'billiard>=3.3.0.13', 
         'boto>=2.26']

4
এটি আপনাকে প্যাকেজের সংস্করণ বলে , এর নির্ভরতা নয় ; তারা কেবল তালিকাভুক্ত হয়।
jonrsharpe

Requiresবিভাগটি দেখুন
13 এলেক্স লিসোভয়

4
হ্যাঁ, তবে এটি "ন্যূনতম সংস্করণ সংখ্যাটি প্রয়োজনীয় নয় " দেখায় না , যেমন ওপি যেমন প্রয়োজন:
জোনারশপে

4
কোনওভাবে আমার জন্য $ pip3 show beautifulsoup4খালি শোনাচ্ছে Requires: - কি সুন্দরসু এমপি 4 কোনও কিছুর উপর নির্ভর করে না?
এক্সিলেটস

4
@ পাইথন জিন, হ্যাঁ, স্পষ্টতই এটি কেবলমাত্র মানক প্যাকেজগুলি ব্যবহার করে .. আমি এতে কিছুটা অবাক হয়েছিলাম। ভাল হয়েছে beautifulsoup4,।
এক্সিলিটস

6

বেশ কয়েকটি উত্তর এখানে প্রোগ্রামগুলিতে ব্যবহারের জন্য পাইপ আমদানি করা দেখায়। পিপ ডকুমেন্টেশন জোরালোভাবে পিপ এর এই ব্যবহার বিরুদ্ধে উপদেশ

pkg_resourcesপাইপ আমদানির মাধ্যমে অ্যাক্সেস না করার পরিবর্তে আপনি কেবল pkg_resourcesসরাসরি আমদানি করতে পারবেন এবং একই যুক্তিটি ব্যবহার করতে পারেন (যা প্যাকেজ মেটা তথ্য প্রোগ্রামিয়ালি দেখার জন্য যে কোনও ব্যক্তির সাথে সংযুক্ত পিপ ডক্সে প্রস্তাবিত সমাধানগুলির মধ্যে একটি)।

import pkg_resources

_package_name = 'yourpackagename'

def get_dependencies_with_semver_string():
    package = pkg_resources.working_set.by_key[_package_name]
    return [str(r) for r in package.requires()]

আপনার প্যাকেজের নামটি ঠিক কী তা খুঁজে পেতে যদি আপনার কিছু সমস্যা হয় তবে WorkingSetউদাহরণটি pkg_resources.working_setপ্রয়োগগুলি দিয়ে ফিরে আসে __iter__যাতে আপনি সেগুলি মুদ্রণ করতে পারেন এবং আশা করি সেখানে আপনাকে খুঁজে পেতে পারেন :)

অর্থাত্

import pkg_resources

def print_all_in_working_set():
    ws = pkg_resources.working_set
    for package_name in ws:
        print(ws)

এটি অজগর 2 এবং 3 উভয় নিয়েই কাজ করে (যদিও আপনাকে পাইথন 2 এর মুদ্রণ বিবরণী সামঞ্জস্য করতে হবে)


4

(এটি একটি স্বল্প উত্তর আছে এবং আধুনিক পিপ সংস্করণগুলির জন্য এডভাইড হওয়া উচিত এবং পুরাতন পিপ সংস্করণে রেফারেন্সের জন্য এখানে বামে থাকতে হবে) অ্যালেক্সের উত্তরটি ভাল (+১)। অজগরে:

pip._vendor.pkg_resources.working_set.by_key['twisted'].requires()

কিছু ফিরে আসা উচিত

[Requirement.parse('zope.interface>=3.6.0')]

প্যাকেজটির নামটি যেখানে মোচড় হয়েছে, সেটি আপনি অভিধানে খুঁজে পেতে পারেন:

pip._vendor.pkg_resources.WorkingSet().entry_keys

তাদের সমস্ত তালিকা করতে:

dict = pip._vendor.pkg_resources.WorkingSet().entry_keys
for key in dict:
    for name in dict[key]:
        req =pip._vendor.pkg_resources.working_set.by_key[name].requires()
        print('pkg {} from {} requires {}'.format(name,
                                                  key,
                                                  req))

আপনাকে এই জাতীয় তালিকা দেওয়া উচিত:

pkg pyobjc-framework-syncservices from /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC requires [Requirement.parse('pyobjc-core>=2.5.1'), Requirement.parse('pyobjc-framework-Cocoa>=2.5.1'), Requirement.parse('pyobjc-framework-CoreData>=2.5.1')]

সাম্প্রতিক সংস্করণে কিছু পরিবর্তন হয়েছে? _vendorপাইপ সংস্করণে এই বৈশিষ্ট্যটি উপস্থিত নেই বলে মনে হয় 19.1.1(সম্পাদনা করুন: ঠিক আছে, এটি pkg_resourcesসর্বশেষতম অজগর সংস্করণে প্যাকেজে চলে গেছে বলে মনে হচ্ছে !)
প্রহ্লাদ ইয়েরি

হ্যাঁ, জিনিসগুলি পরিবর্তিত হয়েছে, এবং আমি এটি আপডেট করে বা নীচের প্রস্তাবের পক্ষে এটি অপসারণ করতে দেখছি।
cgseller

অ্যালেক্সের উত্তর আমার দৃষ্টিকোণ থেকে আংশিকভাবে ভাল (ভাল pip showঅংশটি ভাল, বাকী নয়)। উভয় ক্ষেত্রেই ব্যবহার pip show, pipdeptree বা জর্ডান Mackie এর উত্তর ব্যবহার দেখতে setuptools ' pkg_resourcesসরাসরি।
sinoroc

2

Https://libraries.io/ ব্যবহার করুন । পিপ ব্যবহার করে ইনস্টল করার আগে নির্ভরতা অন্বেষণ করার জন্য এটি ভাল জায়গা।

যেমন গুগল-ক্লাউড-স্টোরেজ এবং অনুসন্ধান টাইপ করুন, তারপরে আপনি গ্রন্থাগারের জন্য পৃষ্ঠাটি পেতে পারেন ( https://libraries.io/rubygems/google-cloud-stores )। আপনি যে সংস্করণটির জন্য 'রিলিজ' (পূর্বনির্ধারিতটি সর্বশেষতম) থেকে নির্ভরতাগুলি অন্বেষণ করতে চান তা নির্বাচন করুন, 'নির্ভরতা' এর অধীনে আপনি নির্ভরতা তালিকা এবং তাদের সমর্থিত সংস্করণগুলি খুঁজে পেতে পারেন।


1

অজগর এই নিবন্ধ অনুযায়ী এটি চেষ্টা করুন :

import pip 
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
     for i in installed_packages]) 
print(installed_packages_list)

এটি প্রদর্শিত হবে:

['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24', 
 'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3', 
 'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
 'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1', 
 'werkzeug==0.9.4']
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.