Warum funktioniert das Importieren einer benutzerdefinierten abc.py-Datei in Python nicht wie erwartet?
Posted: 24 Dec 2024, 10:58
Ich habe die offizielle Dokumentation zu Modulen gelesen. Darin heißt es, dass Python beim Importieren eines Moduls zunächst nach einem integrierten Modul mit diesem Namen sucht. Wenn es nicht gefunden wird, sucht es in einer Liste von Verzeichnissen, die durch die Variable sys.path angegeben wird. Die Verzeichnisse in meinem System sind unten aufgeführt:
Ich möchte wissen, ob das abc-Modul in Python ein integriertes Modul ist. Um dies zu überprüfen, habe ich den folgenden Codeausschnitt verwendet:
Ich habe den obigen Code ausgeführt und die folgende Ausgabe erhalten:
Aus der obigen Ausgabe geht hervor, dass abc kein integriertes Modul ist. Jetzt möchte ich das auf eine andere Art und Weise testen. Ich habe zwei Dateien mit den Namen main.py und abc.py in meinem Python-Verzeichnis erstellt (aber das Standardmodul abc ist in /usr/lib64/python3.13< vorhanden). /code> Verzeichnis). Der Code in diesen Dateien wird unten bereitgestellt:
Da abc kein integriertes Modul ist, sollte mein Interpreter beim Importieren in meinem aktuellen Verzeichnis danach suchen. Und da es in meinem aktuellen Verzeichnis vorhanden ist, habe ich erwartet, dass es 5 ausgibt. Ich habe jedoch die folgende Ausgabe erhalten:
Ich habe absolut keine Ahnung, warum dies einen Fehler ausgibt.
Code: Select all
['/home/user/Desktop/Python', '/usr/lib64/python313.zip', '/usr/lib64/python3.13', '/usr/lib64/python3.13/lib-dynload', '/usr/lib64/python3.13/site-packages', '/usr/lib/python3.13/site-packages']
Code: Select all
import sys
print(sys.builtin_module_names)
Code: Select all
('_abc', '_ast', '_codecs', '_collections', '_functools', '_imp', '_io', '_locale', '_operator', '_signal', '_sre', '_stat', '_string', '_suggestions', '_symtable', '_sysconfig', '_thread', '_tokenize', '_tracemalloc', '_typing', '_warnings', '_weakref', 'atexit', 'builtins', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys', 'time')
Code: Select all
# abc.py
var = 5
Code: Select all
# main.py
import abc
print(abc.var)
Code: Select all
Traceback (most recent call last):
File "/home/user/Desktop/Python/main.py", line 2, in
print(abc.var)
^^^^^^^
AttributeError: module 'abc' has no attribute 'var'