Python jest zainstalowany w katalogu lokalnym.
Moje drzewo katalogów wygląda następująco:
(local directory)/site-packages/toolkit/interface.py
Mój kod jest tutaj:
(local directory)/site-packages/toolkit/examples/mountain.py
Aby uruchomić przykład, piszę python mountain.py
, aw kodzie mam:
from toolkit.interface import interface
I pojawia się błąd:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Już sprawdziłem sys.path
i tam mam katalog /site-packages
. Mam również plik __init__.py.bin
w folderze Toolkit, aby wskazać Pythonowi, że jest to pakiet. Mam też __init__.py.bin
w katalogu przykładów.
Nie wiem, dlaczego Python nie może znaleźć pliku, gdy jest w nim sys.path
. Jakieś pomysły? Czy może to być problem z uprawnieniami? Czy potrzebuję pozwolenia na wykonanie?
python
importerror
python-import
Eduardo
źródło
źródło
755
. To dlatego, żeumask
na maszynie było0027
powodu którychothers
nie mająread
uprawnień do modułu powoduje nie być odczytywane. Dodanieread
pozwolenia naprawiło mój problem. Warto sprawdzić uprawnienia po instalacji katalogu docelowego.interface
(był konflikt).Odpowiedzi:
Na podstawie twoich komentarzy do postu oripa sądzę, że tak się stało:
__init__.py
w systemie Windows.__init__.py
(teraz nazywany__init__.py.bin
) oznacza, że Python nie rozumie zestawu narzędzi jako pakietu.__init__.py
w odpowiednim katalogu i wszystko działa ...?źródło
.bin
.python driver.py
kiedy powinienem go używać,python3 driver.py
ponieważ instalowałem zpip3
.Robi
masz
__init__.py
?Aby import mógł przechodzić przez katalogi, każdy katalog musi mieć
__init__.py
plik.źródło
Wpadłem na coś bardzo podobnego, kiedy wykonałem to ćwiczenie w LPTHW; Nigdy nie mogłem przekonać Pythona do rozpoznania, że mam pliki w katalogu, z którego dzwonię. Ale w końcu udało mi się go uruchomić. To, co zrobiłem i co polecam, to spróbować:
(UWAGA: Z twojego początkowego postu zakładam, że używasz komputera z systemem * NIX i uruchamiasz rzeczy z wiersza poleceń, więc ta rada jest do tego dostosowana. Ponieważ uruchamiam Ubuntu, właśnie to zrobiłem)
1) Zmień katalog (cd) na katalog powyżej katalogu, w którym znajdują się twoje pliki. W takim przypadku próbujesz uruchomić
mountain.py
plik i próbujesz wywołaćtoolkit.interface.py
moduł, który znajduje się w osobnych katalogach. W takim przypadku należy przejść do katalogu zawierającego ścieżki do obu tych plików (lub innymi słowy najbliższego katalogu, który współużytkują ścieżki obu tych plików). Który w tym przypadku jesttoolkit
katalogiem.2) Gdy jesteś w
tookit
katalogu, wpisz ten wiersz kodu w wierszu poleceń:export PYTHONPATH=.
To ustawia PYTHONPATH na „.”, Co w zasadzie oznacza, że twój PYTHONPATH będzie teraz szukał wszystkich wywoływanych plików w katalogu, w którym aktualnie się znajdujesz (i, co więcej, do tego stopnia, w podkatalogach gałęzi katalogu, w którym się znajdujesz. Więc nie tylko przegląda bieżący katalog, ale wszystkie katalogi znajdujące się w bieżącym katalogu).
3) Po ustawieniu PYTHONPATH w powyższym kroku, uruchom moduł z bieżącego katalogu (
toolkit
katalogu). Python powinien teraz znaleźć i załadować określone moduły.Mam nadzieję że to pomoże. Sam byłem z tego bardzo sfrustrowany.
źródło
set PYTHONPATH=.
.W systemie * nix upewnij się również, że PYTHONPATH jest poprawnie skonfigurowany, zwłaszcza że ma ten format:
(Pamiętaj o
.:
na początku, aby mógł przeszukiwać również bieżący katalog).Może być także w innych lokalizacjach, w zależności od wersji:
źródło
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
i itd. W zależności od wersji#!/usr/bin/python
na końcu pliku również powinno działać, prawda?Rozwiązałem własny problem i napiszę podsumowanie rzeczy, które były złe, i rozwiązanie:
Plik musi być nazwany dokładnie
__init__.py
. Jeśli rozszerzenie jest inne, jak w moim przypadku,.py.bin
Python nie może poruszać się po katalogach, a następnie nie może znaleźć modułów. Aby edytować pliki, musisz użyć edytora Linux, takiego jak vi lub nano . Jeśli używasz edytora Windows, napiszę ukryte znaki.Innym problemem, który miał na to wpływ, było to, że miałem inną wersję Pythona zainstalowaną przez roota, więc jeśli ktoś pracuje z lokalną instalacją Pythona, upewnij się, że instalacja Pythona, która uruchamia programy, to lokalny Python. Aby to sprawdzić, po prostu zrób
which python
i sprawdź, czy plik wykonywalny znajduje się w katalogu lokalnym. Jeśli nie, zmień ścieżkę, ale upewnij się, że lokalny katalog Python jest wcześniejszy niż inny Python.źródło
__init__.py
pliki umieszczone w odpowiednim katalogu, ale ręcznie zainstalowałem pakiet za pomocąsetup.py
. W jaki sposób instalacja nowego pakietu zakłóciłaby import.łatwym rozwiązaniem jest instalacja modułu za pomocą sudo
python -m pip install <library-name>
zamiastpip install <library-name>
ograniczeń administracyjnychźródło
python -m
osiąga przed sobąpip install
?python -m pip...
działa, alepip...
nie: są w rzeczywistości tym samym, zakładając, że faktycznie znajdują się w tym samympython
katalogu. Być może zaobserwowana sytuacja była taka, że samodzielnypip
program nie był dostępny w niektórych starszych wersjach Pythona (ale jest teraz w wersji 2.7 i 3.x). W takim przypadkupython
plik był w lokalnym virtualenv ipip
nie był, więcpython -m pip install
instalowałby się w lokalnym virtualenv, podczas gdypip
próbowałby zainstalować w Pythonie systemowym (i nie działał bez sudo). W każdym razie nie ma to sensu.Czy oznaczenie katalogu jako pakietu wymaga pliku o nazwie
__init__.py
, czy to pomaga?źródło
Za pomocą
PyCharm
(części pakietu JetBrains) musisz zdefiniować katalog skryptów jako Źródło:Right Click > Mark Directory as > Sources Root
źródło
Czytasz tę odpowiedź, mówi, że jesteś
__init__.py
we właściwym miejscu, zainstalowałeś wszystkie zależności i nadal otrzymujeszImportError
.Miałem do czynienia z podobnym problemem, z tym wyjątkiem, że mój program działałby dobrze, gdy był uruchamiany przy użyciu PyCharm, ale powyższy błąd, gdy uruchamiałbym go z terminala. Po dalszym kopaniu dowiedziałem się, że
PYTHONPATH
nie mam wpisu do katalogu projektu. Tak więc ustawiłemPYTHONPATH
dla instrukcji importu działa na PyCharm, ale nie z terminala :Jest na to inny sposób, używając
sys.path
:Możesz użyć wstawiania / dołączania na podstawie kolejności wyszukiwania projektu.
źródło
Dla mnie było to coś naprawdę głupiego. Zainstalowałem bibliotekę używając,
pip3 install
ale uruchomiłem mój programpython program.py
w przeciwieństwie dopython3 program.py
.źródło
Tak. Potrzebujesz katalogu zawierającego
__init__.py
plik, który jest plikiem inicjującym pakiet. Spójrz na to .źródło
np .: / etc / environment
PYTHONPATH = $ PYTHONPATH: / opt / folder1: / opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
A jeśli próbujesz zaimportować plik foo, python nie będzie wiedział, który chcesz.
z importu foo ... >>> importerror: brak modułu o nazwie foo
źródło
Moje dwa centy:
Pluć:
To mnie zmieszało - przeszedłem przez posty i posty sugerujące brzydkie hacki syspath (jak widzisz moje
__init__.py
były tam wszystkie). Okazuje się, że game / oblivion.py i game / oblivion były mylącym pythonem, który wyrzucił raczej nieprzydatne „Brak modułu o nazwie RecordGroups”. Byłbym zainteresowany obejściem i / lub linkami dokumentującymi to zachowanie (ta sama nazwa) -> EDYCJA (2017.01.24) - spójrz na Co jeśli mam moduł i pakiet o tej samej nazwie? Co ciekawe zwykle pakiety mają pierwszeństwo, ale najwyraźniej nasz program uruchamiający to narusza.EDYCJA (2015.01.17): Nie wspomniałem, że używamy niestandardowego programu uruchamiającego opisanego tutaj .
źródło
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Może chcesz to naprawić, dodając kod Pythona, aby użyć:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
ale być może będę musiał to sprawdzićLinux: zaimportowane moduły znajdują się w /usr/local/lib/python2.7/dist-packages
Jeśli używasz modułu skompilowanego w C, nie zapomnij później przeskoczyć do pliku .so
sudo setup.py install
.źródło
W moim przypadku problem polegał na tym, że łączyłem się z debugowaniem
python
&boost::Python
, co wymaga, aby rozszerzenie byłoFooLib_d.pyd
nie tylkoFooLib.pyd
; zmiana nazwy pliku lub aktualizacjaCMakeLists.txt
właściwości naprawiły błąd.źródło
Jeśli wypróbowałeś wszystkie metody podane powyżej, ale nie powiodło się, być może moduł ma taką samą nazwę jak moduł wbudowany. Lub moduł o tej samej nazwie istniejący w folderze, który ma wyższy priorytet
sys.path
niż moduł.Aby debugować, wypowiedz swoje
from foo.bar import baz
skargiImportError: No module named bar
. Zmiana naimport foo; print foo
, która pokaże ścieżkęfoo
. Czy tego oczekujesz?Jeśli nie, zmień nazwę
foo
lub użyj importu bezwzględnego .źródło
ImportError: No module named foo
.Mój problem polegał na tym, że dodałem katalog z
__init__.py
plikiem do PYTHONPATH, kiedy tak naprawdę potrzebowałem dodać jego katalog nadrzędny.źródło
Do wszystkich, którzy nadal mają ten problem. Uważam, że Pycharm myli się z importem. Dla mnie, gdy piszę „importuj z przestrzeni nazw”, poprzednia linia jest podkreślona na czerwono, sygnalizując, że wystąpił błąd, ale działa. Jednak „” z importu .namespace coś ”nie jest podkreślane, ale także nie działa.
Próbować
źródło
Naprawiłem mój problem pisząc
print (sys.path)
i stwierdziłem, że Python używa nieaktualnych pakietów pomimo czystej instalacji. Usunięcie tych wykonanych pythonów automatycznie używa poprawnych pakietów.źródło
W moim przypadku, ponieważ używam PyCharm i PyCharm, tworzę „venv” dla każdego projektu w folderze projektu, ale jest to tylko mini env Pythona. Chociaż masz zainstalowane biblioteki, których potrzebujesz w Pythonie, ale w niestandardowym projekcie „venv” nie jest ono dostępne. To jest prawdziwy powód „ImportError: W PyCharm nie wystąpił żaden moduł o nazwie xxxxxx”. Aby rozwiązać ten problem, musisz dodać biblioteki do niestandardowej środowiska projektu, wykonując następujące kroki:
Cieszyć się.
źródło
Po tym samym problemie stwierdziłem, że moją decyzją było usunięcie wszystkich
pyc
plików z mojego projektu, wygląda na to, że te buforowane pliki w jakiś sposób spowodowały ten błąd.Najłatwiejszym sposobem, aby to zrobić, było przejście do folderu projektu w Eksploratorze Windows i wyszukiwanie
*.pyc
, a następnie wybranie wszystkich ( Ctrl+ A) i usunięcie ich ( Ctrl+X ).Możliwe, że mogłem rozwiązać problemy, usuwając konkretny
pyc
plik, ale nigdy tego nie próbowałemźródło
I w obliczu tego samego problemu:
Import error
. Ponadto biblioteka została poprawnie zainstalowana w 100%. Źródłem problemu było to, że na moim PC 3 została zainstalowana wersja Pythona (pakiet anakonda). Właśnie dlatego biblioteka została zainstalowana nie we właściwym miejscu. Potem właśnie zmieniłem na odpowiednią wersję Pythona w moim PyCharm IDE.źródło
Miałem ten sam błąd. Było to spowodowane tym, że ktoś utworzył folder w tym samym folderze co mój skrypt, którego nazwa kolidowała z modułem, który importowałem z innego miejsca. Zamiast importować moduł zewnętrzny, zajrzał do tego folderu, który oczywiście nie zawierał oczekiwanych modułów.
źródło
Miałem ten sam problem (Python 2.7 Linux), znalazłem rozwiązanie i chciałbym się nim podzielić. W moim przypadku miałem poniższą strukturę:
W „main.py” próbowałem bezskutecznie wszystkich poniższych kombinacji:
Rozwiązanie było znacznie prostsze niż myślałem. Zmieniłem nazwę folderu „Booklet” na „booklet” i to wszystko. Teraz Python może normalnie zaimportować pytanie klasy, używając w pliku „main.py” kodu:
Na tej podstawie mogę stwierdzić, że Nazwy pakietów (foldery), takie jak „broszura”, muszą zaczynać się małymi literami, w przeciwnym razie Python pomyli je z nazwami klas i nazwami plików.
Najwyraźniej to nie był twój problem, ale odpowiedź Johna Fouhy jest bardzo dobra i ten wątek zawiera prawie wszystko, co może powodować ten problem. Jest to jeszcze jedna rzecz i mam nadzieję, że może to może pomóc innym.
źródło
W moim przypadku podałem ścieżkę do folderu package.egg zamiast rzeczywistego pakietu poniżej. Skopiowałem pakiet na najwyższy poziom i zadziałało.
źródło
To działało dla mnie: Utworzono
__init__.py
plik w folderze nadrzędnym (w twoim przypadku wsite-packages
folderze wewnętrznym ). I importowane w ten sposób:Mam nadzieję, że przyda ci się również!
źródło
Na serwerze linux spróbuj
dos2unix script_name
(usuń wszystkie (jeśli istnieją)
pyc
pliki za pomocą poleceniafind . -name '*.pyc' -delete
)i uruchom ponownie w przypadku, jeśli pracowałeś nad skryptem w systemie Windows
źródło
W moim przypadku użyłem
sys.path.insert()
do zaimportowania modułu lokalnego i pobierałemmodule not found
z innej biblioteki. Musiałemsys.path.insert()
obniżyć zgłoszony importmodule not found
. Myślę, że najlepszą praktyką jest umieszczeniesys.path.insert()
na dole importu.źródło