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

如何检查模块是否安装在Python中,如果没有,如何在代码中安装?,python,python-3.x,module,python-module,Python,Python 3.x,Module,Python Module,我想为我的代码安装“诱变剂”和“GTT”模块,但我想让它在每台没有它们的计算机上安装模块,但如果它们已经安装,它不会尝试安装它们。我目前有: def install(package): pip.main(['install', package]) install('mutagen') install('gTTS') from gtts import gTTS from mutagen.mp3 import MP3 但是,如果您已经有了这些模块,那么每当您打开程序时,这只会给程序的

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

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

install('mutagen')

install('gTTS')

from gtts import gTTS
from mutagen.mp3 import MP3

但是,如果您已经有了这些模块,那么每当您打开程序时,这只会给程序的开头增加不必要的混乱。

您可以使用命令行:

python -m MyModule
它将显示模块是否存在

否则,您可以简单地使用最佳实践:

pip freeze>requirements.txt

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

以及:

pip安装-r requirements.txt

加载它们

它会自动为你的目的


玩得开心

编辑-2020/02/03

自从我发布这个答案以来,
pip
模块已经更新了很多。我已经用正确的方法更新了代码段,以安装缺少的依赖项,即使用
子流程
pkg_资源
,而不是
pip

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

导入系统 导入子流程 导入pkg_资源 必需={'诱变剂','gTTS'} installed={pkg.key for pkg in pkg_resources.working_set} 缺失=必需-已安装 如果丢失: python=sys.exe subprocess.check_调用([python,'-m',pip',install',*missing],stdout=subprocess.DEVNULL)
正如@zwer所提到的,上面的方法是有效的,尽管它不被认为是打包项目的合适方法。要更深入地了解这一点,请阅读该页。

另一种解决方案是,将尝试导入的内容的导入语句放入try/except块中,这样,如果它工作,则会安装,如果不工作,则会引发异常,您可以运行命令来安装它。

如果您想知道是否安装了包,您可以使用以下命令在终端中进行检查:

pip list | grep <module_name_you_want_to_check>
列出Python中安装的所有模块

竖条通常被称为“管道”。它用于将一个命令传递到另一个命令。也就是说,它将第一个命令的输出定向到第二个命令的输入

grep <module_name_you_want_to_check>

列出以“quant”(例如“quantstrats”)开头的所有包。如果没有任何输出,则表示未安装库。

您可以使用以下方法检查是否安装了软件包:

导入pkg\u资源
对于[‘诱变剂’、‘gTTS’中的包装:
尝试:
dist=pkg\u资源。获取\u分发(包)
打印({}({})已安装。格式(dist.key,dist.version))
除pkg_resources.DistributionNotFound外:
打印({}未安装。格式(包))
注意:
pip
命令开始,您不应该直接导入
pip
模块

其目的是通过以下方式执行:

subprocess.check_调用([sys.executable,'-m',pip',install',my_package'])

您可以使用try/except:

试试看:
导入时间
打印(“安装了“时间”模块”)
除ModuleNotFoundError外:
打印(“未安装模块“时间”)
#或
安装(“时间”)#问题中的安装功能

如果您想预览是否安装了特定的软件包(或某些软件包),您可以在python中使用idle。 具体而言:

  • 空转
  • 浏览至文件>打开模块>某些模块
  • IDLE将显示模块或提示错误消息

  • 上面是用python 3.9.0测试的

    您可以运行
    pip show package\u name
    或者对于大视图
    使用pip列表

    是否希望python脚本运行执行安装检查和安装的命令?或者,您可以在所有这些“计算机”上执行shell命令吗?虽然您可以从技术上强制从脚本中安装模块,但不要这样做,这是一种不好的做法,如果您这样做,人们将不可避免地讨厌您。相反,请学习如何正确打包和分发Python应用程序:@zwer是正确的。不要这样做。如果您的包有依赖项,让
    pip
    处理它。可能的重复:这很好,但它会给出“需求已经满足”的输出,当您打开它时,会给代码的开头添加不必要的混乱。是否有任何方法使其不响应“已满足的要求”?请添加免责声明,即当有人在其代码中使用
    import pip
    作为正确包装的解决方法时,小猫会死亡-_-@对不起,我的意思是该列表由“EggInfoDistribution”(以及DistINfoDistribution)组成,它们是pip库的一部分。例如,在我的例子中,列表中的第一项是“xmltodict 0.10.2”,但pip中的
    “xmltodict 0.10.2”。get_installed_distributions()
    返回False,而str中的
    “xmltodict 0.10.2”返回False(pip.get_installed_distributions())
    返回True@dcoles感谢您提出这个问题,我已经将代码片段改为使用
    子流程
    而不是
    pip
    。另外,我建议您不要使用而不是重定向
    sys.stdout
    ,只使用忽略
    pip
    的stdout。请添加一些脚本,而不仅仅是代码块这完全不是answer因为问题是如何安装,以及如何从代码中完成所有这些…“start with”从技术上讲应该是“contains”…grep“\wquant”或grep“^quant”更准确。在Windows上,我还需要grep-E来表示扩展正则表达式。我认为这个问题意味着Python代码将在运行它的每台计算机上安装模块
    grep <module_name_you_want_to_check>
    
    pip list| grep quant