Hier ist ein möglicher zusätzlicher Randfall, über den ich gestolpert bin und der mich eine Weile verwirrt hat, ich hoffe, er hilft jemandem:
Unter some_module/a.py
:
def a():
pass
Unter some_module/b.py
:
from . import a
def b():
a()
Unter some_module/__init__.py
:
from .b import b
from .a import a
main.py
:
from some_module import b
b()
Denn wenn main.py b lädt, geht es über __init__.py
die versucht zu laden b.py
vor a.py
. Das heißt, wenn b.py
versucht zu laden a
wird das Modul und nicht die Funktion abgerufen, d.h. Sie erhalten die Fehlermeldung module object is not callable
Die Lösung besteht hier darin, die Reihenfolge in some_module/__init__.py
:
from .a import a
from .b import b
Oder, wenn dies eine zirkuläre Abhängigkeit erzeugen würde, ändern Sie Ihre Dateinamen so, dass sie nicht mit den Funktionen übereinstimmen, und laden Sie direkt aus den Dateien, anstatt sich auf die __init__.py
25 Stimmen
Ich habe diesen Fehler einmal bekommen, weil ich sowohl eine (globale) Variable als auch eine Funktion mit demselben Namen hatte.
2 Stimmen
Ich erhielt diese Fehlermeldung mit dem Dateinamen random.py im gleichen Ordner, in dem ich eine zuvor funktionierende ipynb-Datei hatte. Ich änderte den Namen der Datei in random_function.py und startete das Jupyter-Notebook neu. Der Fehler verschwand. Um zu testen, ob der Name random.py das Problem war, änderte ich die Datei random_function.py wieder in random.py. Das Problem trat wieder auf. Benennen Sie Ihre Datei nicht nach dem Namen einer Python-Bibliothek.