Paras vastaus
Ilman koodia on vaikea saada lopullista vastausta, mutta Mielestäni ongelmana on, että tuomasi koodi on jotain samanlaista kuin tässä:
Sinulla on moduuli nimeltä fluff
ja moduulin sisällä sinulla on luokka kutsutaan fluff;
fluff-luokassa on menetelmä nimeltä check\_output
Koodisi näyttää tältä:
import fluff
cfg = fluff.check\_output(stuff) # You want the fluff class here
Ongelmana on, että kaikki id = ”b010734e4c”>
tekee tuoda fluffimoduulin. Tarvittavaa nukka-luokkaa kutsutaan itse asiassa fluff.fluff.
On olemassa kaksi ratkaisua:
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
Tämä on yksi syy siihen, miksi nimityskäytäntö on niin tärkeä – jos moduulit ja luokat noudattavat PEP8-nimeämiskäytäntöjä, joiden koodi olisi
from fluff import Fluff # this imports the fluff class.
cfg = Fluff.check\_output(stuff) # You want the fluff class here
Tuo iso kirjain F saattaa olla riittävä estämään virheet – tai ainakin vihjaamaan sinut mahdollisiin ongelmiin.
-——
Toinen mahdollinen vastaus on, että tuotava moduuli on varjossa toisella tiedostolla (toisin sanoen on olemassa samanniminen tiedosto, jonka Python löytää aikaisemmin etsittäessään mitä tuoda). Yleisin syy tähän aloittelijoille on, kun nimeät komentosarjan samalla tavalla kuin moduuli, jota yrität tuoda; koska Python etsii AINA nykyisestä hakemistotiedostosta, jos sinulla on skripti nimeltä foo.py ja se tekee Tuo foo, tuonti tuo komentosarjan nimeltä foo.py – luultavasti ei sitä, mitä haluat.
Paras tapa diagnosoida tämä ongelma on avata interaktiivinen konsoli samassa hakemistossa ja kirjoittamalla:
>>> import
>>> .\_\_file\_\_
missä on tuotavan moduulin nimi. Komennon lähtö rivillä 2 on tiedoston polku, jonka Python yritti tuoda, ja näet, onko tiedoston siellä.
Vastaa
Katselematta koodissasi se voi olla yksi kahdesta ongelmasta (mutta ei rajoitu näihin kahteen), jotka voisin ajatella heti lepakosta:
- Moduulia ei ole asennettu oikein. Tarkista moduuli sivustopaketit-kansiosta. Jos se on siellä, se voi olla ongelma nro. 2, joka on:
- Ei käynnissä sopivalla Python-versiolla, ts. Asennetaan Python2: lle tarkoitettuja moduuleja, mutta soitetaan Python3-tuonnilla. Poista moduulin asennus pipin avulla ja yritä sitten asentaa uudelleen pip3: lla sopivan version saamiseksi. Etkö ole varma miksi, mutta jotkut koneet, kuten Raspberry Pi Zero W v1.1, oletusarvoisesti pip-komennon Python2: lle 3: n sijaan. Asentaminen uudelleen pip3: lla toimi minulle, koska käytän koodiani
python3
-komento tavallisen python
sijasta.
Voisin ehdottaa väliaikaista ”likainen” ratkaisua, joka on kopioida moduulin lähde omaan työkansion, eli ottamalla “module” -kansio ja sijoittamalla se samaan kansioon kuin käyttämäsi lähdetiedosto. Saattaa myös olla, että olet kloonannut git-arkiston tai purettu .zip-kansiosta, jonka module.py-tiedosto on toisessa kansiossa, joka on toisessa samannimisessä kansiossa. Tässä tapauksessa voi olla hyödyllistä tuoda module.module moduulina sen sijaan, että tuisit moduulin heti, kuten näin:
import module.module as module
sijasta
import module
, mikä vähentää koodisi muutosten määrää. Onnea!