Gam*_*r01 11 python module python-module python-3.x
我想为我的代码安装模块'mutagen'和'gTTS',但我想拥有它,所以它会在没有它们的每台计算机上安装模块,但如果没有它们,它将不会尝试安装它们.他们已经安装好了.我目前有:
def install(package):
pip.main(['install', package])
install('mutagen')
install('gTTS')
from gtts import gTTS
from mutagen.mp3 import MP3
Run Code Online (Sandbox Code Playgroud)
但是,如果您已经拥有这些模块,那么只要您打开它,就会在程序启动时添加不必要的混乱.
小智 17
如果您想知道是否安装了软件包,可以使用以下命令在终端中检查它:
pip list | grep <module_name_you_want_to_check>
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
pip list
Run Code Online (Sandbox Code Playgroud)
列出 Python 中安装的所有模块。
竖线| 通常被称为“管道”。它用于将一个命令通过管道传输到另一个命令。也就是说,它将第一个命令的输出定向到第二个命令的输入。
grep <module_name_you_want_to_check>
Run Code Online (Sandbox Code Playgroud)
从列表中查找关键字。
例子:
pip list| grep quant
Run Code Online (Sandbox Code Playgroud)
列出所有以“quant”开头的包(例如“quantstrats”)。如果您没有任何输出,则表示未安装该库。
mat*_*n h 16
您可以使用尝试/除外:
try:
import time
print("module 'time' is installed")
except ModuleNotFoundError:
print("module 'time' is not installed")
# or
install("time") # the install function from the question
Run Code Online (Sandbox Code Playgroud)
the*_*ish 11
要检查包是否存在,并在后一种情况下安装它,请尝试使用该pip模块.
要隐藏的输出,你需要为它创建一个函数(在此代码后):
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])
Run Code Online (Sandbox Code Playgroud)
或者另一种方法是简单地说try except:
import pip
pkgs = ['mutagen', 'gTTS']
for package in pkgs:
try:
import package
except ImportError, e:
pip.main(['install', package])
Run Code Online (Sandbox Code Playgroud)
就像@zwer提到的那样,上面的工作,虽然它不被视为打包你的项目的正确方法.要更深入地了解这一点,请阅读如何打包Python应用程序页面.
dco*_*les 10
您可以使用以下命令检查软件包是否已安装pkg_resources.get_distribution:
import pkg_resources
for package in ['mutagen', 'gTTS']:
try:
dist = pkg_resources.get_distribution(package)
print('{} ({}) is installed'.format(dist.key, dist.version))
except pkg_resources.DistributionNotFound:
print('{} is NOT installed'.format(package))
Run Code Online (Sandbox Code Playgroud)
注意:您不应直接导入该pip模块,因为它是该命令不受支持的用例pip。
从您的程序中使用的推荐方法pip是使用以下命令执行它subprocess:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'my_package'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26290 次 |
| 最近记录: |