Nejlepší odpověď
Bez zobrazení kódu je těžké přijít s definitivní odpovědí, ale Myslím, že problém je v tom, že importovaný kód je něco podobného tomuto:
Máte modul s názvem fluff
a uvnitř tohoto modulu máte třídu s názvem fluff;
ve třídě chmýří existuje metoda s názvem check\_output
Váš kód vypadá takto:
import fluff
cfg = fluff.check\_output(stuff) # You want the fluff class here
Problém je v tom, že vše, co import fluff
provede import chmýřového modulu. Třída chmýří, kterou potřebujete, se vlastně nazývá fluff.fluff.
Existují dvě řešení:
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
To je jeden z důvodů, proč je konvence pojmenování tak důležitá – pokud moduly a třídy se řídí konvencemi pojmenování PEP8, které by kód byl
from fluff import Fluff # this imports the fluff class.
cfg = Fluff.check\_output(stuff) # You want the fluff class here
Tento kapitál „F“ může stačit k prevenci chyb – nebo vás alespoň upozornit na potenciální problémy.
-——
Další potenciální odpověď je, že importovaný modul je zastíněn jiným souborem (jinými slovy existuje soubor se stejným názvem, který Python najde dříve při hledání toho, co importovat). Nejběžnější příčinou toho u začátečníků je, když pojmenujete skript stejný jako modul, který se pokoušíte importovat; protože Python VŽDY prohledává aktuální soubor adresáře, pokud máte skript s názvem foo.py a dělá import foo, tento import naimportuje skript s názvem foo.py – pravděpodobně to není to, co chcete.
Nejlepší způsob, jak diagnostikovat tento problém, je otevřít interaktivní konzoli ve stejném adresáři a zadat:
>>> import
>>>
kde
Odpovědět
Bez pohledu ve vašem kódu by to mohl být jeden ze dvou problémů (ale neomezujících se pouze na tyto dva), na které bych mohl myslet, hned za pálkou, které jsou:
- Modul není správně nainstalován. Zkontrolujte modul ve složce balíčků webů. Pokud tam je, mohl by to být problém č. 2, což je:
- Neběží s příslušnou verzí Pythonu, tj. Instalace modulů určených pro Python2, ale volání s importem Python3. Pomocí pipu odinstalujte modul a poté zkuste znovu nainstalovat pomocí pip3 a získejte příslušnou verzi. Nejste si jisti, proč, ale některé stroje, jako je můj Raspberry Pi Zero W v1.1, výchozí příkaz pip na Python2 namísto 3. Přeinstalování pomocí pip3 fungovalo pro mě, protože používám svůj kód pomocí
python3
místo obvykléhopython
.
Mohl bych navrhnout dočasné „špinavé“ řešení, kterým je zkopírovat zdroj modulu do vašeho pracovní adresář, tj. převzetí složky „modul“ a její umístění do stejné složky jako zdrojový soubor, který používáte. Může se také stát, že jste naklonovali úložiště git nebo extrahovali ze složky .zip, která má soubor module.py v jiné složce, která je v jiné složce se stejným názvem. V tomto případě by mohlo pomoci importovat modul.module jako modul namísto jednoduchého importu modulu přímo, například takto:
import module.module as module
místo
import module
což snižuje množství změn v kódu. Hodně štěstí!