Windows環境下でpythonでvenvをactivateした上でpipでパッケージを入れたときに実行でimportにてハマったこと
概要
venv環境下でpip install で入れたパッケージが実行時に見つからずModuleNotFoundErrorとなった。
対応策は py.exe のランチャーを使わず python.exe を使うこと。
環境
- Windows10
- Python 3.11.4
- pyton標準のvenvにてactivateした状態のCMD.EXE上での処理
発生事象
NG パターン1
(venv_dir) C:\Users\foo>py test.py
Traceback (most recent call last):
File "C:\Users\foo\test.py", line 34, in <module>
from docopt import docopt
ModuleNotFoundError: No module named 'docopt'
NG パターン2
(venv_dir) C:\Users\foo>test.py
Traceback (most recent call last):
File "C:\Users\foo\test.py", line 34, in <module>
from docopt import docopt
ModuleNotFoundError: No module named 'docopt'
OK パターン
(venv_dir) C:\Users\foo>python test.py
Usage:
....
詳細
詳細は下記の通り python.exe py.exe コマンドラインでそれぞれpathの扱いが違うため。
C:\Users\foo>py -0p
-V:3.11 * C:\Users\foo\AppData\Local\Programs\Python\Python311\python.exe
C:\Users\foo>py -m env venv_dir
C:\Users\foo>venv_dir\Scripts\activate.bat
(venv_dir) C:\Users\foo>py -0p
* C:\Users\foo\venv_dir\Scripts\python.exe
-V:3.11 C:\Users\foo\AppData\Local\Programs\Python\Python311\python.exe
(venv_dir) C:\Users\foo>py --version
Python 3.11.4
(venv_dir) C:\Users\foo>python --version
Python 3.11.4
(venv_dir) C:\Users\foo>type showpath.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
import pprint
pprint.pprint(sys.path)
(venv_dir) C:\Users\foo>python -c "import sys;import pprint; pprint.pprint(sys.path)"
['',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\DLLs',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\Lib',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311',
'C:\\Users\\foo\\venv_dir',
'C:\\Users\\foo\\venv_dir\\Lib\\site-packages']
(venv_dir) C:\Users\foo>py -c "import sys;import pprint; pprint.pprint(sys.path)"
['',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\DLLs',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\Lib',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311',
'C:\\Users\\foo\\venv_dir',
'C:\\Users\\foo\\venv_dir\\Lib\\site-packages']
(venv_dir) C:\Users\foo>python showpath.py
['',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\DLLs',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\Lib',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311',
'C:\\Users\\foo\\venv_dir',
'C:\\Users\\foo\\venv_dir\\Lib\\site-packages']
(venv_dir) C:\Users\foo>py showpath.py
['C:\\Users\\foo',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\python311.zip',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\DLLs',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\Lib',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311',
'C:\\Users\\foo\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages']
(venv_dir) C:\Users\foo>py -m pip list
Package Version
------------------ --------
docopt 0.6.2
pip 23.2
setuptools 68.0.0
(venv_dir) C:\Users\foo\>py -m pip list -v
Package Version Location Installer
------------------ -------- ------------------------------------------------------------------- ---------
docopt 0.6.2 C:\Users\foo\Documents\venv_dir\Lib\site-packages pip
pip 23.2 C:\Users\foo\Documents\venv_dir\Lib\site-packages pip
setuptools 68.0.0 C:\Users\foo\Documents\venv_dir\Lib\site-packages pip
(venv_dir) C:\Users\foo>python -m pip list -v
Package Version Location Installer
------------------ -------- ------------------------------------------------------------------- ---------
docopt 0.6.2 C:\Users\foo\Documents\venv_dir\Lib\site-packages pip
pip 23.2 C:\Users\foo\Documents\venv_dir\Lib\site-packages pip
setuptools 68.0.0 C:\Users\foo\Documents\venv_dir\Lib\site-packages pip
関連ドキュメント
-
CPython インタプリタ
https://docs.python.org/ja/3.11/using/cmdline.html#cmdoption-c -
Windows の Python ランチャ
https://docs.python.org/ja/3.11/using/windows.html#launcher -
仮想環境とパッケージ
https://docs.python.org/ja/3.11/tutorial/venv.html -
pip を使ったパッケージ管理
https://docs.python.org/ja/3.11/tutorial/venv.html?highlight=pip#managing-packages-with-pip