Beltbot / probe_env.py
SupantBT's picture
Modutech + Movex assistant — FastAPI + Qdrant + graph
f817912
Raw History Blame Contribute Delete
4.02 kB
"""probe_env.py — ดูว่าอินเทอร์พรีเตอร์ตัวที่รันไฟล์นี้มีของที่ chatbot_v5 ต้องใช้ครบไหม
รันหนึ่งตัวต่อหนึ่งครั้ง
& "E:\\Project2\\saleschatbot\\venv\\Scripts\\python.exe" probe_env.py
อ่านเวอร์ชันด้วย importlib.metadata ไม่ใช่ __version__
เพราะบางแพ็กเกจ (qdrant_client เป็นต้น) ไม่มีแอตทริบิวต์ __version__
ถ้าเช็กด้วย __version__ ใน try/except กว้าง ๆ จะได้ผลว่า "ไม่ได้ติดตั้ง" ทั้งที่ติดตั้งแล้ว
— เป็นบั๊กที่เคยทำให้ check_app.py รายงานผิดมาแล้วครั้งหนึ่ง
แยกสองคำถามให้ชัด
installed มีแพ็กเกจอยู่ใน site-packages ของอินเทอร์พรีเตอร์นี้ไหม
imports import ได้จริงไหม (บางตัวมีแต่พัง เช่น torch ที่ DLL ไม่ครบ)
"""
import importlib
import importlib.metadata as md
import sys
# (ชื่อที่ pip รู้จัก, ชื่อที่ใช้ import)
NEEDED = [
("transformers", "transformers"),
("torch", "torch"),
("qdrant-client", "qdrant_client"),
("google-generativeai", "google.generativeai"),
("sentence-transformers", "sentence_transformers"),
("einops", "einops"),
("pillow", "PIL"),
("numpy", "numpy"),
("fastapi", "fastapi"),
("uvicorn", "uvicorn"),
("python-multipart", "multipart"),
("python-dotenv", "dotenv"),
]
def version(dist):
try:
return md.version(dist)
except md.PackageNotFoundError:
return ""
except Exception as e: # noqa: BLE001
return f"? {type(e).__name__}"
def importable(name):
try:
importlib.import_module(name)
return "ok", ""
except ImportError:
return "ไม่ได้", "import ไม่เจอ"
except Exception as e: # noqa: BLE001
return "พัง", f"{type(e).__name__}: {str(e)[:60]}"
print(f"python {sys.version.split()[0]}")
print(f"executable {sys.executable}")
print()
print(f"{'แพ็กเกจ':<24}{'เวอร์ชัน':<14}{'import':<8}หมายเหตุ")
print("─" * 78)
missing = []
for dist, mod in NEEDED:
ver = version(dist)
if not ver:
missing.append(dist)
print(f"{dist:<24}{'—':<14}{'-':<8}ไม่ได้ติดตั้ง")
continue
state, note = importable(mod)
print(f"{dist:<24}{ver:<14}{state:<8}{note}")
print("─" * 78)
tv = version("transformers")
if not tv:
print("transformers ไม่มี — อินเทอร์พรีเตอร์นี้รัน chatbot_v5 ไม่ได้")
else:
try:
major, minor = (int(x) for x in tv.split(".")[:2])
if (major, minor) >= (4, 57):
print(f"transformers {tv} — สูงเกิน Jina v3 จะพังที่ hasattr(torch, torch_dtype)")
print(" ต้องต่ำกว่า 4.57 ในอินเทอร์พรีเตอร์ที่ใช้รันแอป")
else:
print(f"transformers {tv} — อยู่ในช่วงที่ Jina v3 ใช้ได้")
except ValueError:
print(f"transformers {tv} — อ่านเวอร์ชันเป็นตัวเลขไม่ได้ ต้องดูด้วยตา")
if missing:
print(f"\nขาด {len(missing)} ตัว: {', '.join(missing)}")
else:
print("\nมีครบทุกตัวที่ต้องใช้")