我想为我的代码安装模块“mutagen”和“gTTS”,但我想要它以便它会在每台没有这些模块的计算机上安装它们,但它不会尝试如果已经安装,请安装它们。我目前有:
def install(package):
pip.main(['install', package])
install('mutagen')
install('gTTS')
from gtts import gTTS
from mutagen.mp3 import MP3
但是,如果您已经有了这些模块,这只会在您打开程序时给程序的开头添加不必要的困惑。
最佳答案
编辑 - 2020/02/03
自从我发布此答案以来,pip
模块已经更新了很多。我已经用安装缺失依赖项的正确方法更新了代码片段,即使用 subprocess
和 pkg_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 提到的那样,上面的方法有效,尽管它不被视为打包项目的正确方法。要更深入地了解这一点,请阅读页面 How to package a Python App .
关于python - 如何检查模块是否已安装在 Python 中,如果没有,则在代码中安装它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44210656/