95995


下記は.batファイルを実行したディレクトリに存在する指定の.pyファイルをpythonで実行するスクリプトです。

[code]

    cd %~dp0　←カレントディレクトリを.batファイルを実行したディレクトリに設定
    python hogehoge.py　←実行したいファイル名を指定
    pause　←プロンプト画面一時停止
    
[/code]

※フォルダの状態について  
ワークフォルダ  
├ hogehoge.bat  
└ hogehoge.py

この.batファイルを実行した際、実行する.pyファイルにOpenCVモジュールのインポート（import
cv2）が存在すると「ModuleNotFoundError: No module named 'cv2'」のエラーが発生します。

別途、アナコンダプロンプト画面からカレントディレクトリの指定 → .pyの実行を手動で行うと対象のファイルは正常に実行ができます。  
半年前に開発したcv2のファイルを再度実行しただけですが、半年前は正常に稼働したものが現在は稼働しません。

pipのアップデートなど各仕様を最新版に引き上げたことが直接的な原因だと見てますが、原因に対する回避方法が思いつきません。

・Windows 10  
・Python 3.11系 ※訂正: 3.8ではなく3.11が入っておりました

で実行しておりますが現状cv2以外のモジュールは当該の.batファイルから起動することができています。

具体的な解決方法があれば修正したいですが、何かしらの修正は可能でしょうか。

■追記１  
pythonのインストールが失敗している可能性があったので再インストールをしました。  
結果、下記のような対象のディレクトリが表示されるようになりましたが、依然cv2のモジュールが無いとエラーになります。

通常のプロンプトもアナコンダプロンプトも同様の結果を得られます。

[code]

    (base) C:\Users\■■■>where python
    C:\ProgramData\Anaconda3\python.exe
    C:\Program Files\Python\Python311\python.exe
    C:\Users\■■■\AppData\Local\Microsoft\WindowsApps\python.exe
    
    (base) C:\Users\■■■>where pip
    C:\ProgramData\Anaconda3\Scripts\pip.exe
    C:\Program Files\Python\Python311\Scripts\pip.exe
    C:\Users\■■■\AppData\Roaming\Python\Python38\Scripts\pip.exe
    
    (base) C:\Users\■■■>where py
    C:\Windows\py.exe
    
[/code]

※■■■はユーザー名です

■追記２  
下記は.pyファイルでインポートしているモジュールの全リストですが下部の4つはモジュールが存在しないと前述のエラーが発生しました。他、上部のモジュールはインポートできています。

[code]

    import os
    import glob
    import math
    import gc
    import random
    import string
    import shutil
    from pathlib import Path
    from tkinter import colorchooser
    
[/code]

#インポートできていない

[code]

    import cv2
    from PIL import Image
    from pdf2image import convert_from_path
    import PySimpleGUI as sg
    
[/code]


CC BY-SA 4.0
2023-08-21T00:54:12.717
95993
2023-08-21T07:42:12.590
2023-08-21T07:41:57.053
51823
51823
question
python batch-file
batからpythonのOpenCVモジュールを使用する.pyを実行するとcv2モジュールが存在しないと言われる


コメントを含むその状況だと以下のような内容の組み合わせだと思われます。  
■インポート出来ない原因は現在のPython 3.11環境に cv2(opencv) 等がインストールされていないためでしょう。

  * 半年前に動いていたというのは、以下の環境だったのでは？

    * Python 3.8系を「This User」でインストールし、その環境で pip を使い cv2(opencv) 等をインストールして動かしていた。
  * 現在動作しないのは、以下の環境が主に呼び出されているためでしょう。

    * Python 3.11系を「All Users」でインストールし、その環境では cv2(opencv) 等をインストールしていない。
  * そしておそらく両方のPython版数ともインストール時にPATHにPythonを登録しているものと思われます。

  * さらに上記個別のPythonをインストールした後に、Anacondaをインストールし、その上でAnacondaをPATHに登録している。

* * *

単純に最小の対処で動作させるためには、以下の手順で出来るでしょう。

  * インポート出来ないと表示された各モジュール/パッケージ/ライブラリを、通常のコマンドプロンプト上で `py -m pip install -U xxxx` (xxxxは各インストール対象)を使ってインストールする。
  * バッチファイルの2行目に記述された`python`を`py`に変更する。

* * *

後々のことも考えて環境を整えたいなら以下のような手順でPython,Anaconda関連のソフトウェアを完全にアンインストールしてから再インストールするのが良いでしょう。

  * Anacondaをアンインストールする  
単純にアンインストールするだけでは残るデータやフォルダがあるので、それらを地道に削除する  
こちらの記事などを参考に。(2年前なので何か変わっているかも)  
[Anaconda3を完全にアンインストールしたい。](https://ja.stackoverflow.com/q/82381/26370)

  * Pythonをアンインストールする  
こちらも上記同様に残るデータやフォルダを削除する  
こちらの記事など。  
[＼完全解決‼／Pythonを完全にアンインストールする方法を解説‼](https://information-station.work/5395/)  
なお質問ではPython 3.11がAll Usersでインストールされているので`C:\Program Files\Python`フォルダも削除対象。

  * 環境変数からPython,Anaconda関連の情報を全て削除する  
こちらの記事等を参考に、ユーザーとシステムの両方の環境変数のPATHを編集して削除する。  
[【Windows10】環境変数の設定方法](https://imagingsolution.net/program/windows10/windows10_environment_variables/)

  * Pythonを実行・起動しようとしてMicrosoft Storeのインストーラが起動してしまうのを防ぐ  
こちらの記事を参考にアプリ実行エイリアスのPython関連をオフにする。  
[Pythonインストールでストアが開いたり動作しない時の解決法！](https://www.aisatt.co.jp/developer-20221107/)  
ただしこの記事の「「Add python.exe to PASS」にチェックを入れること！」は行わないように。

  * PythonやAnacondaを再インストールする  
その際には「全てのユーザー」や「PATHへの登録」「環境変数への登録」といったオプションを指定しない(指定されていれば外す：外せない時はカスタマイズ/オプション等を選択して変える)

    * 多くの解説記事が上記を選択するように指示しているが、複数の環境や版数を同時にインストールして切り替えて使いたい場合は、それが害悪になる。
    * ただし「Install launcher for all users(recommended)」のオプションはそのまま指定しておいた方が良いでしょう。


CC BY-SA 4.0
2023-08-21T03:00:11.743
95995
2023-08-21T03:16:56.457
2023-08-21T03:16:56.457
26370
26370
95993
answer


直接的な原因と対応方法  
batファイルとして起動している場合とAnacondaプロンプトとして起動している場合でpython.exeの参照しているパスが異なっていたためにAnaconda側のpython.exeにはpipで対象のモジュールをインストール済みとなっていたが、通常のプロンプト側で参照していたpython.exeに対するモジュールのインストールが行われていなかった。

Anaconda側と通常のプロンプト側でそれぞれ

[code]

    python --version
    
[/code]

を実行すると異なるpython.exeを起動していることが発覚した。  
Anacondaに紐づいている3.11側で開発していたものを3.8の何もインストールがされていないpython.exeで実行していたことが直接的な原因であることがわかった。

対処法はパスの環境変数の一覧でpython.exeを参照しているパスが複数ある場合、優先順位を変更するか素直に3.11（Anacondaの既定バージョンのpython）以外を導入しないなどすることと考えられる。

pip.exeもpython3.8の.exeの階層にあるscriptフォルダ内にありましたので同様に環境変数へ登録したら機能しました。  
以上解決できました。ありがとうございます。


CC BY-SA 4.0
2023-08-21T07:42:12.590
95998
2023-08-21T07:42:12.590
51823
95993
answer