Legjobb válasz
Kód látása nélkül nehéz végleges választ kitalálni, de Szerintem a probléma az, hogy az importált kód valami hasonló ehhez:
Van egy modulod, amelynek neve: fluff
, és a modul belsejében van egy osztályod fluff;
a fluff osztályban van egy módszer, amelyet úgy hívnak: check\_output
A kódod így néz ki:
import fluff
cfg = fluff.check\_output(stuff) # You want the fluff class here
A probléma az, hogy mindez Az id = “b010734e4c”>
művelet a fluff modul importálása. A szükséges fluff osztály tulajdonképpen fluff.fluff.
Kétféle megoldás létezik:
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
Ez az egyik oka annak, hogy a névadási konvenció olyan fontos – ha a modulok és az osztályok a PEP8 elnevezési szokásokat követik, a kód a következő lenne:
from fluff import Fluff # this imports the fluff class.
cfg = Fluff.check\_output(stuff) # You want the fluff class here
Ez az „F” nagybetű elegendő lehet a hibák megelőzéséhez – vagy legalábbis a lehetséges problémákra utalhat
-——
A másik lehetséges válasz az, hogy Az importált modult egy másik fájl árnyékolja (más szavakkal, van egy azonos nevű fájl, amelyet a Python korábban talált az importálandó fájl keresésekor). Ennek leggyakoribb oka a kezdőknél az, amikor a parancsfájl megnevezésével megegyezik az importálandó modullal; mivel a Python MINDIG az aktuális könyvtárfájlban keres, ha van egy „foo.py” nevű szkript és egy „import foo” -t hajt végre, az importálás a „foo.py” nevű szkriptet fogja importálni – valószínűleg nem az, amit akar.
A probléma diagnosztizálásának legjobb módja az Interactive konzol megnyitása ugyanabban a könyvtárban és típusban:
>>> import
>>> .\_\_file\_\_
ahol a az importálni kívánt modul neve. A 2. sorban a parancs kimenete lesz annak a fájlnak az útvonala, amelyet a Python importálni próbált, és láthatja, hogy ott kell-e lennie a fájlnak.
Válasz
Megtekintés nélkül a kódodnál ez a két probléma egyike lehet (de nem korlátozódik erre a kettőre), amire gondolhatnék, rögtön a következőre:
- A modul nincs megfelelően telepítve. Ellenőrizze a modult a site-package mappában. Ha ott van, akkor nem probléma lehet. 2, ami:
- Nem a Python megfelelő verziójával fut, azaz a Python2-hez szánt modulokat telepíti, de a Python3 importálásával hív. A pip segítségével távolítsa el a modult, majd próbálja meg újratelepíteni a pip3 programmal a megfelelő verzió megszerzéséhez. Nem tudom, miért, de néhány gép, mint például a Raspberry Pi Zero W v1.1, alapértelmezés szerint a pip parancsot Python2 helyett 3 helyett használja. Az újratelepítés a pip3-mal bevált, mivel a kódot a / div> parancs a szokásos
python
helyett.
Javasolhatok egy ideiglenes „piszkos” megoldást, amely a modul forrásának átmásolása a munkakönyvtár, azaz a „module” mappa felvétele és ugyanabba a mappába helyezés, mint a futtatott forrásfájl. Az is előfordulhat, hogy klónozott egy git-adattárat, vagy kibontott egy .zip mappából, amelynek a module.py fájlja van egy másik mappában, amely egy másik, azonos nevű mappában található. Ebben az esetben segíthet a module.module modulként történő importálásában, ahelyett, hogy egyszerűen importálná a modult, csak így:
import module.module as module
a
import module
helyett, ami csökkenti a kódban végrehajtott változtatások számát. Sok sikert!