Najlepsza odpowiedź
Bez zobaczenia kodu trudno jest znaleźć ostateczną odpowiedź, ale Myślę, że problem polega na tym, że importowany kod jest podobny do tego:
Masz moduł o nazwie fluff
, a wewnątrz tego modułu masz klasę o nazwie fluff;
w klasie fluff jest metoda o nazwie check\_output
Twój kod wygląda następująco:
import fluff
cfg = fluff.check\_output(stuff) # You want the fluff class here
Problem w tym, że wszystko, co import fluff
importuje moduł puchu. Klasa puchu, której potrzebujesz, nazywa się w rzeczywistości fluff.fluff.
Istnieją dwa rozwiązania:
1:
import fluff
cfg = fluff.fluff.check\_output(stuff) # You want the fluff class here
2:
from fluff import fluff # this imports the fluff class.
cfg = fluff.check\_output(stuff) # You want the fluff class here
Jest to jeden z powodów, dla których konwencja nazewnictwa jest tak ważna – jeśli moduły a klasy są zgodne z konwencją nazewnictwa PEP8, w której kod wyglądałby
from fluff import Fluff # this imports the fluff class.
cfg = Fluff.check\_output(stuff) # You want the fluff class here
Duże „F” może wystarczyć, aby zapobiec błędom – lub przynajmniej wskazać potencjalne problemy
-——
Inną potencjalną odpowiedzią jest to, że Moduł, który importujesz, jest przesłaniany przez inny plik (innymi słowy, istnieje plik o tej samej nazwie, który Python znajduje wcześniej w poszukiwaniu tego, co ma zaimportować). Najczęstszą tego przyczyną u początkujących jest to, że nadasz skryptowi taką samą nazwę jak moduł, który próbujesz zaimportować; ponieważ Python ZAWSZE przeszukuje bieżący plik katalogu, jeśli masz skrypt o nazwie „foo.py” i wykonuje „import foo”, import ten zaimportuje skrypt o nazwie „foo.py” – prawdopodobnie nie to, czego chcesz.
Najlepszym sposobem na zdiagnozowanie tego problemu jest otwarcie konsoli interaktywnej w tym samym katalogu i wpisanie:
>>> import
>>>
gdzie
Odpowiedz
Bez szukania w twoim kodzie może to być jeden z dwóch problemów (ale nie ograniczających się do tych dwóch), które od razu przychodzą mi do głowy, a są to:
- Moduł nie jest poprawnie zainstalowany. Sprawdź, czy w folderze pakietów witryn znajduje się moduł. Jeśli tam jest, może to być problem, nie. 2, czyli:
- Nie działa z odpowiednią wersją Pythona, tj. Instaluje moduły przeznaczone dla Python2, ale wywołuje z importem Python3. Użyj pip, aby odinstalować moduł, a następnie spróbuj ponownie zainstalować za pomocą pip3, aby uzyskać odpowiednią wersję. Nie wiem dlaczego, ale niektóre maszyny, takie jak mój Raspberry Pi Zero W v1.1, domyślnie używają polecenia pip na Python2 zamiast 3. Ponowna instalacja za pomocą pip3 zadziałała, ponieważ używam kodu przy użyciu
python3
zamiast zwykłegopython
.
Mogę zasugerować tymczasowe „brudne” rozwiązanie polegające na skopiowaniu źródła modułu do twojego katalog roboczy, tzn. pobranie folderu „module” i umieszczenie go w tym samym folderze, co uruchomiony plik źródłowy. Może się również zdarzyć, że sklonowałeś repozytorium git lub wyodrębniłeś z folderu .zip, w którym plik module.py znajduje się w innym folderze, który znajduje się w innym folderze o tej samej nazwie. W tym przypadku pomocne może być zaimportowanie module.module jako modułu zamiast prostego importowania modułu od razu, tak jak to:
import module.module as module
zamiast
import module
co zmniejsza ilość zmian w kodzie. Powodzenia!