如何检查模块是否已安装在 Python 中,如果没有,则在代码中安装它?

新手上路,请多包涵

我想为我的代码安装模块“mutagen”和“gTTS”,但我想要它,这样它就会在每台没有它们的计算机上安装这些模块,但它不会尝试安装它们,如果他们已经安装好了。我目前有:

 def install(package):
    pip.main(['install', package])

install('mutagen')

install('gTTS')

from gtts import gTTS
from mutagen.mp3 import MP3

但是,如果您已经拥有这些模块,这只会在您打开程序时给程序的开头添加不必要的混乱。

原文由 Foxes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
2 个回答

编辑 - 2020/02/03

自从我发布此答案以来, pip 模块已经更新了很多。我已经用安装缺失依赖项的正确方法更新了代码片段,即使用 subprocesspkg_resources ,而不是 pip .

要隐藏输出,您可以将子进程输出重定向到 devnull:

 import sys
import subprocess
import pkg_resources

required = {'mutagen', 'gTTS'}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = required - installed

if missing:
    python = sys.executable
    subprocess.check_call([python, '-m', 'pip', 'install', *missing], stdout=subprocess.DEVNULL)

就像提到的@zwer 一样,上面的方法有效,尽管它不被视为打包项目的正确方法。要更深入地了解这一点,请阅读 如何打包 Python 应用程序 页面。

原文由 Girrafish 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以使用简单的尝试/除外:

 try:
    import mutagen
    print("module 'mutagen' is installed")
except ModuleNotFoundError:
    print("module 'mutagen' is not installed")
    # or
    install("mutagen") # the install function from the question

原文由 matan h 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题