package تحقق مما إذا تم تثبيت حزمة Python
إجابة محدثة
أفضل طريقة للقيام بذلك هي:
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
ما هي الطريقة الجيدة لمعرفة ما إذا كانت الحزمة مثبتة في إطار نص برمجي Python؟ أعلم أنه من السهل من المترجم ، ولكني أحتاج إلى القيام بذلك في نص.
أعتقد أنه يمكنني التحقق مما إذا كان هناك دليل على النظام الذي تم إنشاؤه أثناء التثبيت ، ولكنني أشعر أن هناك طريقة أفضل. أحاول التأكد من تثبيت حزمة Skype4Py ، وإذا لم يكن سيتم تثبيتها.
أفكاري لإنجاز الشيك
- تحقق من وجود دليل في مسار التثبيت النموذجي
- حاول استيراد الحزمة وإذا تم رمي استثناء ، ثم قم بتثبيت الحزمة
إذا كنت ترغب في الحصول على الشيك من المحطة ، يمكنك تشغيل
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))
الذهاب الخيار رقم 2. إذا تم طرح ImportError
، فإن الحزمة غير مثبتة (أو ليست في sys.path
).