要检查包是否存在,并在后一种情况下安装它,请尝试使用pip模块。
要隐藏输出,您需要为它创建一个函数(从这个post中的代码中):from contextlib import contextmanager
import sys, os
@contextmanager
def suppress_stdout():
with open(os.devnull, "w") as devnull:
old_stdout = sys.stdout
sys.stdout = devnull
try:
yield
finally:
sys.stdout = old_stdout
import pip
required_pkgs = ['mutagen', 'gTTS']
installed_pkgs = [pkg.key for pkg in pip.get_installed_distributions()]
for package in required_pkgs:
if package not in installed_pkgs:
with suppress_stdout():
pip.main(['install', package])
或者另一种方法是使用一个简单的tryexcept:import pip
pkgs = ['mutagen', 'gTTS']
for package in pkgs:
try:
import package
except ImportError, e:
pip.main(['install', package])
正如@zwer所提到的,上面的方法是有效的,尽管它并不是包装您的项目的正确方法。要更深入地了解这一点,请阅读页面How to package a Python App。