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

2024-06-01 01:51:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为我的代码安装“诱变剂”和“gTTS”模块,但我想安装它,这样它会在没有模块的每台计算机上安装这些模块,但如果它们已经安装,它不会尝试安装它们。我现在有:

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

install('mutagen')

install('gTTS')

from gtts import gTTS
from mutagen.mp3 import MP3

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


Tags: 模块installpip代码fromimport程序package
3条回答

可以使用命令行:

python -m MyModule

它将显示模块是否存在

否则,您只需使用最佳实践:

pip freeze > requirements.txt

这将把安装在python上的模块放在一个文件中

以及:

pip install -r requirements.txt

装载它们

它会自动为你的目的

玩得开心

要检查包是否存在,并在后一种情况下安装它,请尝试使用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

另一个解决方案是,为尝试导入到try/except块中的任何内容放置一个import语句,因此如果它工作正常,则会安装它,如果不工作,则会引发异常,您可以运行命令来安装它。

相关问题 更多 >