144

Pythonスクリプト内でパッケージがインストールされているかどうかを確認する良い方法は何ですか?インタプリタからは簡単だと思いますが、スクリプト内で行う必要があります。

インストール中に作成されたディレクトリがシステムにあるかどうかを確認できると思いますが、もっと良い方法があると思います。Skype4Pyパッケージがインストールされていることを確認しようとしています。インストールされていない場合は、インストールします。

チェックを達成するための私のアイデア

  • 通常のインストールパスでディレクトリを確認します
  • パッケージをインポートしてみて、例外がスローされた場合は、パッケージをインストールしてください
4

18 に答える 18

136

Pythonスクリプトを意味する場合は、次のようにします。

Python 3.3以降では、sys.modulesとfind_specを使用します。

import importlib.util
import sys

# For illustrative purposes.
name = 'itertools'

if name in sys.modules:
    print(f"{name!r} already in sys.modules")
elif (spec := importlib.util.find_spec(name)) is not None:
    # If you choose to perform the actual import ...
    module = importlib.util.module_from_spec(spec)
    sys.modules[name] = module
    spec.loader.exec_module(module)
    print(f"{name!r} has been imported")
else:
    print(f"can't find the {name!r} module")

Python 3:

try:
    import mymodule
except ImportError as e:
    pass  # module doesn't exist, deal with it.

Python 2:

try:
    import mymodule
except ImportError, e:
    pass  # module doesn't exist, deal with it.
于 2009-06-26T21:00:17.567 に答える
64

Python 3.3 以降では、 find_spec()メソッドを使用できます

import importlib.util

# For illustrative purposes.
package_name = 'pandas'

spec = importlib.util.find_spec(package_name)
if spec is None:
    print(package_name +" is not installed")
于 2017-01-23T21:23:04.567 に答える
4

ターミナルタイプで

pip show some_package_name

pip show matplotlib
于 2020-02-22T20:27:01.263 に答える
4

setuptools の pkg_resources モジュールを使用できます。例えば:

import pkg_resources

package_name = 'cool_package'
try:
    cool_package_dist_info = pkg_resources.get_distribution(package_name)
except pkg_resources.DistributionNotFound:
    print('{} not installed'.format(package_name))
else:
    print(cool_package_dist_info)

python モジュールと python パッケージには違いがあることに注意してください。パッケージには複数のモジュールを含めることができ、モジュールの名前はパッケージ名と一致しない場合があります。

于 2018-08-20T13:24:25.923 に答える
0

簡単な方法は、pythonコマンド ライン ツールを使用することです。モジュールimport <your module name> が見つからない場合は、エラーが表示されます。

$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> import sys
>>> import jocker
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named jocker
$
于 2018-09-20T01:02:00.903 に答える
-1

オプション#2に進みます。ImportErrorがスローされた場合、パッケージはインストールされていません(またはにインストールされていませんsys.path)。

于 2009-06-26T20:59:14.230 に答える