Beste antwoord
Zonder code te zien is het moeilijk om een definitief antwoord te verzinnen, maar Ik denk dat het probleem is dat de code die je importeert ongeveer zo is:
Je hebt een module genaamd fluff
en binnen die module heb je een klasse genaamd fluff;
in de fluff class is er een methode genaamd check\_output
Je code ziet er als volgt uit:
import fluff
cfg = fluff.check\_output(stuff) # You want the fluff class here
Het probleem is dat al dat import fluff
importeert de fluff module. De fluff-klasse die je nodig hebt, heet eigenlijk fluff.fluff.
Er zijn twee oplossingen:
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
Dit is een van de redenen waarom de naamgevingsconventie zo belangrijk is – als de modules en klassen volgen de PEP8-naamgevingsconventies, de code zou zijn
from fluff import Fluff # this imports the fluff class.
cfg = Fluff.check\_output(stuff) # You want the fluff class here
Die hoofdletter F is misschien genoeg om fouten te voorkomen – of je op zijn minst te wijzen op mogelijke problemen
-—
Het andere mogelijke antwoord is dat de module die u importeert, wordt overschaduwd door een ander bestand (met andere woorden, er is een bestand met dezelfde naam dat Python eerder vond in zijn zoektocht naar wat te importeren). De meest voorkomende oorzaak hiervan bij beginners is dat u uw script dezelfde naam geeft als de module die u probeert te importeren; aangezien Python ALTIJD het huidige directorybestand doorzoekt als je een script met de naam foo.py hebt en het doet een import foo, zal die import het script met de naam foo.py importeren – waarschijnlijk niet wat je wilt.
De beste manier om dit probleem te diagnosticeren is door de interactieve console in dezelfde map te openen en te typen:
>>> import
>>>
waarbij
Antwoord
Zonder te kijken bij uw code, zou het een van de twee problemen kunnen zijn (maar niet beperkt tot deze twee) die ik meteen zou kunnen bedenken, namelijk:
- Module is niet correct geïnstalleerd. Controleer de map met sitepakketten voor de module. Als het er is, kan het probleem niet zijn. 2, dat is:
- Niet draaien met een geschikte versie van Python, d.w.z. modules installeren die bedoeld zijn voor Python2 maar aanroepen met Python3-import. Gebruik pip om de module te verwijderen en probeer opnieuw te installeren met pip3 om de juiste versie te krijgen. Ik weet niet zeker waarom, maar sommige machines zoals mijn Raspberry Pi Zero W v1.1 standaard de pip-opdracht naar Python2 in plaats van 3. Opnieuw installeren met pip3 werkte voor mij, aangezien ik mijn code gebruik met de
python3
commando in plaats van het gebruikelijkepython
.
Ik zou een tijdelijke “vuile” oplossing kunnen voorstellen, namelijk het kopiëren van de modulebron naar uw werkmap, dwz de map “module” nemen en deze in dezelfde map plaatsen als het bronbestand dat u gebruikt. Het kan ook zijn dat je een git-repository hebt gekloond of hebt uitgepakt uit een .zip-map met het module.py-bestand in een andere map, die zich in een andere map met dezelfde naam bevindt. In dit geval kan het helpen om module.module als module te importeren in plaats van de module gewoon meteen te importeren, zoals hier:
import module.module as module
in plaats van
import module
wat het aantal wijzigingen in uw code vermindert. Veel succes!