تحقق مما إذا تم تثبيت حزمة Python



Answers

إجابة محدثة

أفضل طريقة للقيام بذلك هي:

import subprocess
import sys

reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]

النتائج:

print(installed_packages)

[
    "Django",
    "six",
    "requests",
]

تحقق مما إذا تم تثبيت requests :

if 'requests' in installed_packages:
    # Do something

الجواب القديم

أفضل طريقة للقيام بذلك هي:

import pip
installed_packages = pip.get_installed_distributions()

للنقطة> = 10.x الاستخدام:

from pip._internal.utils.misc import get_installed_distributions

لماذا هذا الطريق؟ في بعض الأحيان يكون لديك تصادم لاسم التطبيق. لا يمنحك الاستيراد من مساحة أسماء التطبيقات الصورة الكاملة لما تم تثبيته على النظام.

ونتيجة لذلك ، يمكنك الحصول على قائمة من pkg_resources.Distribution الكائنات. انظر ما يلي كمثال:

print installed_packages
[
    "Django 1.6.4 (/path-to-your-env/lib/python2.7/site-packages)",
    "six 1.6.1 (/path-to-your-env/lib/python2.7/site-packages)",
    "requests 2.5.0 (/path-to-your-env/lib/python2.7/site-packages)",
]

ضع قائمة به:

flat_installed_packages = [package.project_name for package in installed_packages]

[
    "Django",
    "six",
    "requests",
]

تحقق مما إذا تم تثبيت requests :

if 'requests' in flat_installed_packages:
    # Do something
Question

ما هي الطريقة الجيدة لمعرفة ما إذا كانت الحزمة مثبتة في إطار نص برمجي Python؟ أعلم أنه من السهل من المترجم ، ولكني أحتاج إلى القيام بذلك في نص.

أعتقد أنه يمكنني التحقق مما إذا كان هناك دليل على النظام الذي تم إنشاؤه أثناء التثبيت ، ولكنني أشعر أن هناك طريقة أفضل. أحاول التأكد من تثبيت حزمة Skype4Py ، وإذا لم يكن سيتم تثبيتها.

أفكاري لإنجاز الشيك

  • تحقق من وجود دليل في مسار التثبيت النموذجي
  • حاول استيراد الحزمة وإذا تم رمي استثناء ، ثم قم بتثبيت الحزمة



الذهاب الخيار رقم 2. إذا تم طرح ImportError ، فإن الحزمة غير مثبتة (أو ليست في sys.path ).




إذا كنت ترغب في الحصول على الشيك من المحطة ، يمكنك تشغيل

pip3 show package_name

وإذا لم يتم إرجاع أي شيء ، فلن يتم تثبيت الحزمة.

إذا كنت ترغب في تنفيذ هذا الفحص تلقائيًا ، على سبيل المثال ، يمكنك تثبيته في حالة فقده ، فيمكنك الحصول على ما يلي في النص البرمجي bash:

pip3 show package_name 1>/dev/null #pip for Python 2
if [ $? == 0 ]; then
   echo "Installed" #Replace with your actions
else
   echo "Not Installed" #Replace with your actions, 'pip3 install --upgrade package_name' ?
fi



إذا كنت تريد أن يقوم برنامجك النصي بتثبيت الحزم المفقودة والمتابعة ، فيمكنك القيام بشيء مثل هذا (على سبيل المثال ، في وحدة 'krbV' في حزمة 'python-krbV'):

import pip
import sys

for m, pkg in [('krbV', 'python-krbV')]:
    try:
        setattr(sys.modules[__name__], m, __import__(m))
    except ImportError:
        pip.main(['install', pkg])
        setattr(sys.modules[__name__], m, __import__(m))



Links