回答を更新しました
これを行うより良い方法は次のとおりです。
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
結果:
print(installed_packages)
[
"Django",
"six",
"requests",
]
requests
がインストールされているかどうかを確認します。
if 'requests' in installed_packages:
# Do something
なぜこのように?アプリ名が競合する場合があります。アプリの名前空間からインポートしても、システムにインストールされているものの全体像はわかりません。
提案されたソリューションが機能することに注意してください:
- Pipを使用して、PyPIまたはその他の代替ソース(
pip install http://some.site/package-name.zip
またはその他の種類のアーカイブ)からインストールする場合。
- を使用して手動でインストールする場合
python setup.py install
。
- のようなシステムリポジトリからインストールする場合
sudo apt install python-requests
。
うまくいかない場合:
- のような開発モードでインストールする場合
python setup.py develop
。
- のような開発モードでインストールする場合
pip install -e /path/to/package/source/
。
古い答え
これを行うより良い方法は次のとおりです。
import pip
installed_packages = pip.get_installed_distributions()
pip> == 10.xの場合:
from pip._internal.utils.misc import get_installed_distributions
なぜこのように?アプリ名が競合する場合があります。アプリの名前空間からインポートしても、システムにインストールされているものの全体像はわかりません。
その結果、pkg_resources.Distribution
オブジェクトのリストを取得します。例として次を参照してください。
print installed_packages
[
"Django 1.6.4 (/path-to-your-env/lib/python2.7/site-packages)",
"six 1.6.1 (/path-to-your-env/lib/python2.7/site-packages)",
"requests 2.5.0 (/path-to-your-env/lib/python2.7/site-packages)",
]
それのリストを作る:
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
requests
がインストールされているかどうかを確認します。
if 'requests' in flat_installed_packages:
# Do something