Kev*_*vin 90 python skype package python-import
在Python脚本中检查包是否安装的好方法是什么?我知道解释器很容易,但是我需要在脚本中完成它.
我想我可以检查系统中是否有安装过程中创建的目录,但我觉得有更好的方法.我正在尝试确保安装了Skype4Py软件包,如果没有,我会安装它.
我完成检查的想法
Chr*_*her 87
如果你的意思是python脚本,只需执行以下操作:
try:
 import mymodule
except ImportError, e:
 pass # module doesn't exist, deal with it.
Art*_*yan 49
更好的方法是:
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
为什么这样?有时你有app name collisions.从应用程序命名空间导入并不能让您全面了解系统上安装的内容.
更好的方法是:
import pip
installed_packages = pip.get_installed_distributions()
对于pip> = 10.x使用:
from pip._internal.utils.misc import get_installed_distributions
为什么这样?有时你有app name collisions.从应用程序命名空间导入并不能让您全面了解系统上安装的内容.
结果,您获得了一个pip install http://some.site/package-name.zip对象列表.请参阅以下示例:
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",
]
检查是否python setup.py install已安装:
if 'requests' in flat_installed_packages:
    # Do something
ice*_*cer 24
从Python 3.3开始,您可以使用find_spec()方法
import importlib.util
# For illustrative purposes.
package_name = 'pandas'
spec = importlib.util.find_spec(package_name)
if spec is None:
    print(package_name +" is not installed")
Ogn*_*vic 21
如果您想从终端进行检查,您可以运行
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
在终端类型中
pip show some_package_name
例子
pip show matplotlib
作为此答案的扩展:
对于Python 2. *,pip show <package_name>将执行相同的任务。
例如pip show numpy将返回以下内容:
Name: numpy
Version: 1.11.1
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: numpy-discussion@scipy.org
License: BSD
Location: /home/***/anaconda2/lib/python2.7/site-packages
Requires: 
Required-by: smop, pandas, tables, spectrum, seaborn, patsy, odo, numpy-stl, numba, nfft, netCDF4, MDAnalysis, matplotlib, h5py, GridDataFormats, dynd, datashape, Bottleneck, blaze, astropy
小智 5
您可以使用 setuptools 中的 pkg_resources 模块。例如:
import pkg_resources
package_name = 'cool_package'
try:
    cool_package_dist_info = pkg_resources.get_distribution(package_name)
except pkg_resources.DistributionNotFound:
    print('{} not installed'.format(package_name))
else:
    print(cool_package_dist_info)
请注意,python 模块和 python 包之间存在差异。一个包可以包含多个模块,并且模块的名称可能与包名称不匹配。