環境
- Windows 10
- Python 3.7
- pypiwin32 バージョン223
エラー状況
PythonからExcelのマクロを実行(COM実行)したくて「pypiwin32」をpipでインストールした。
「pip install pypiwin32」で直接システム上にインストールした場合は問題なく使用できたが、配布パッケージとしてまとめたかったので「pip install pypiwin32 -t ./Lib/site-packages」としてプロジェクトフォルダ内に直接インストールし、Pythonスクリプト内で
import os import sys script_path = os.path.dirname(__file__) sys.path.append(os.path.join(script_path, "Lib/site-packages")) import win32com.client
としてプロジェクトフォルダ内のpypiwin32を使用したところインポートエラーとなった。エラーメッセージは次の通り。
File "Lib/site-packages\win32com\__init__.py", line 5, inimport win32api, sys, os ModuleNotFoundError: No module named 'win32api'
また修正対応中に以下の様なエラーメッセージも見られた。
File "Lib/site-packages\win32com\__init__.py", line 5, inimport win32api, sys, os ImportError: DLL load failed: 指定されたモジュールが見つかりません。
File "Lib/site-packages\win32com\__init__.py", line 6, inimport pythoncom File "Lib/site-packages\pythoncom.py", line 2, in import pywintypes ModuleNotFoundError: No module named 'pywintypes'
対応方法
Pythonスクリプトを以下のように変更するとインポートエラーを解消できた。
import os import sys script_path = os.path.dirname(__file__) sys.path.append(os.path.join(script_path, "Lib/site-packages")) sys.path.append(os.path.join(script_path, "Lib/site-packages/win32")) sys.path.append(os.path.join(script_path, "Lib/site-packages/win32/lib")) os.environ["PATH"] = os.environ["PATH"] + ";" + os.path.join(script_path , "Lib/site-packages/pywin32_system32") import win32com.client
win32, win32/libフォルダをPythonのモジュール参照位置に追加し、さらに環境変数PATHにpywin32_system32フォルダを追加することでwin32apiをインポートできるようになった。