私のコードにモジュール「mutagen」と「gTTS」をインストールしたいのですが、モジュールを持たないすべてのコンピューターにモジュールがインストールされるようにしたいのですが、もしそうならインストールしようとしませんそれらは既にインストールされています。私は現在持っています:
def install(package):
pip.main(['install', package])
install('mutagen')
install('gTTS')
from gtts import gTTS
from mutagen.mp3 import MP3
ただし、既にモジュールを持っている場合は、プログラムを開くたびに不要な混乱がプログラムの先頭に追加されます。
パッケージが存在するかどうかを確認し、後者の場合にインストールするには、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])
または、別の方法は、単純なtry
except
を使用することです。
import pip
pkgs = ['mutagen', 'gTTS']
for package in pkgs:
try:
import package
except ImportError, e:
pip.main(['install', package])
前述の@zwerのように、上記は機能しますが、プロジェクトをパッケージ化する適切な方法とは見なされません。これをより詳しく見るには、ページを読んでください パッケージ化の方法Python App 。
別の解決策は、あなたがtry/exceptブロックにインポートしようとしているもののインポートステートメントを置くことです。それが動作する場合はインストールされますが、そうでない場合は例外をスローし、コマンドを実行してインストールすることができます。
コマンドラインを使用できます:
python -m MyModule
モジュールが存在するかどうかがわかります
それ以外の場合は、単にベストプラクティスを使用できます。
pip freeze> requirements.txt
それはあなたが持っているモジュールをあなたに置きますpythonインストール
および:
pip install -r requirements.txt
それらをロードする
自動的に目的になります
楽しむ
pip list | grep <module_name_you_want_to_check>
上記がその答えです。
pip list
すべてのモジュールをリストし、
grep <module_name_you_want_to_check>
リストからキーワードを見つけます。私のために働く。