ImportError: no module named-Python
Mam aplikację Pythona o następującej strukturze katalogów:
src
|
+---- main
|
+---- util
|
+---- gen_py
|
+---- lib
W pakiecie main mam moduł Pythona o nazwie MyServer.py, który ma instrukcję importu jak:
from gen_py.lib import MyService
Aby to stwierdzenie zadziałało, umieściłem następujący wiersz na początku MyServer.py :
import sys
sys.path.append('../gen_py/lib')
Kiedy uciekam MyServer.py w terminalu pojawia się następujący błąd:
Co mi tu umyka?ImportError: no module named gen_py.lib
6 answers
Twoja modyfikacja sys.path
zakłada, że bieżący katalog roboczy jest zawsze w main/
. Tak nie jest. Zamiast tego po prostu dodaj Katalog nadrzędny do sys.path
:
import sys
import os.path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib
Nie zapomnij dołączyć pliku __init__.py
do gen_py i lib - w przeciwnym razie nie będą one rozpoznawane jako moduły Pythona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 14:07:34
Aby import modułu Pythona działał, musisz mieć "src "w ścieżce, a nie"gen_py/lib".
Podczas przetwarzania importu jak import gen_py.lib
, szuka modułu gen_py
, a następnie szuka podmodułu lib
.
Ponieważ moduł gen_py
nie będzie w "../ gen_py / lib "(będzie w".."), dodana ścieżka nie pomoże w procesie importu.
W zależności od tego, skąd go uruchamiasz, spróbuj dodać ścieżkę względną do folderu "src". Być może to sys.path.append('..')
. Możesz też mieć pomyślne uruchomienie skryptu w folderze src bezpośrednio, poprzez ścieżki względne, takie jak python main/MyServer.py
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-28 18:04:09
from ..gen_py.lib import MyService
Lub
from main.gen_py.lib import MyService
Upewnij się, że masz (przynajmniej pusty) __init__.py
plik w każdym katalogu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-28 18:06:46
Upewnij się, że dołączasz __init__.py
, co sprawia, że Python wie, że te katalogi zawierają pakiety
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 01:44:56
Jest to sytuacja, gdy budujesz pakiet i znajdujesz błąd w imporcie. Nauczyłem się tego na własnej skórze.Odpowiedzią nie jest dodanie pakietu do ścieżki Pythona ani zrobienie tego programowo (co jeśli twój moduł zostanie zainstalowany i twoje polecenie doda go ponownie? to zły sposób.
The right thing to do is: 1) Użyj virtualenv pyvenv-3.4 lub czegoś podobnego 2) aktywuj tryb deweloperski- $ python setup.py rozwiń
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-09 16:18:09
Upewnij się, że katalog projektu root pojawia się w sys.wyjście ścieżki. Jeśli nie, Dodaj ścieżkę katalogu głównego projektu do sys./ align = "left" /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 07:47:24