Wiem, że ten wątek jest trochę stary, ale zajęło mi trochę czasu, zanim dotarłem do jego sedna, więc chciałem się nim podzielić.
W moim projekcie główny skrypt miałem w katalogu nadrzędnym i aby rozróżnić moduły, umieściłem wszystkie moduły pomocnicze w podfolderze o nazwie „moduły”. W moim głównym skrypcie importuję te moduły w następujący sposób (dla modułu o nazwie report.py):
from modules.report import report, reportError
Jeśli zadzwonię do mojego głównego skryptu, to działa. JEDNAK chciałem przetestować każdy moduł, dodając jeden main()
do każdego i wywołując każdy bezpośrednio, jako:
python modules/report.py
Teraz Python skarży się, że nie może znaleźć „modułu o nazwie moduły”. Kluczowe jest tutaj to, że Python domyślnie zawiera folder skryptu w swojej ścieżce wyszukiwania, ALE NIE CWD. Tak więc ten błąd mówi tak naprawdę: „Nie mogę znaleźć podfolderu modułów”. Dzieje się tak, ponieważ w katalogu, w którym znajduje się moduł report.py, nie ma podkatalogu „modules”.
Uważam, że najlepszym rozwiązaniem jest dołączenie CWD w ścieżce wyszukiwania Pythona, umieszczając to na górze:
import sys
sys.path.append(".")
Teraz Python przeszukuje CWD (katalog bieżący), znajduje podfolder „modules” i wszystko jest w porządku.