Cách nhập danh sách từ tệp khác trong python

Câu lệnh

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 kết hợp hai thao tác; . Hoạt động tìm kiếm của câu lệnh
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 được định nghĩa là một cuộc gọi đến hàm
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0, với các đối số phù hợp. Giá trị trả về của
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0 được sử dụng để thực hiện thao tác ràng buộc tên của câu lệnh
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04. Xem câu lệnh
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 để biết chi tiết chính xác về hoạt động ràng buộc tên đó

Một cuộc gọi trực tiếp đến

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0 chỉ thực hiện tìm kiếm mô-đun và, nếu tìm thấy, thao tác tạo mô-đun. Mặc dù một số tác dụng phụ nhất định có thể xảy ra, chẳng hạn như việc nhập các gói gốc và cập nhật các bộ đệm khác nhau [bao gồm cả
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8], chỉ có câu lệnh
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 thực hiện thao tác liên kết tên

Khi một câu lệnh

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 được thực thi, hàm
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0 dựng sẵn tiêu chuẩn được gọi. Các cơ chế khác để gọi hệ thống nhập [chẳng hạn như
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
10] có thể chọn bỏ qua
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0 và sử dụng các giải pháp của riêng chúng để triển khai ngữ nghĩa nhập

Khi một mô-đun được nhập lần đầu tiên, Python sẽ tìm kiếm mô-đun đó và nếu tìm thấy, nó sẽ tạo một đối tượng mô-đun 1, khởi tạo nó. Nếu không thể tìm thấy mô-đun được đặt tên, một

spam/
    __init__.py
    foo.py
4 sẽ xuất hiện. Python thực hiện các chiến lược khác nhau để tìm kiếm mô-đun được đặt tên khi máy móc nhập khẩu được gọi. Các chiến lược này có thể được sửa đổi và mở rộng bằng cách sử dụng các móc nối khác nhau được mô tả trong các phần bên dưới

Đã thay đổi trong phiên bản 3. 3. Hệ thống nhập đã được cập nhật để triển khai đầy đủ giai đoạn thứ hai của PEP 302. Không còn bất kỳ máy móc nhập khẩu ngầm nào nữa - toàn bộ hệ thống nhập khẩu được phơi bày thông qua

spam/
    __init__.py
    foo.py
5. Ngoài ra, hỗ trợ gói không gian tên gốc đã được triển khai [xem PEP 420].

5. 1. ______66¶

Mô-đun

spam/
    __init__.py
    foo.py
6 cung cấp API phong phú để tương tác với hệ thống nhập. Ví dụ:
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
10 cung cấp API được đề xuất, đơn giản hơn so với
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0 tích hợp sẵn để gọi máy móc nhập khẩu. Tham khảo tài liệu thư viện
spam/
    __init__.py
    foo.py
6 để biết thêm chi tiết

5. 2. Gói¶

Python chỉ có một loại đối tượng mô-đun và tất cả các mô-đun đều thuộc loại này, bất kể mô-đun đó được triển khai bằng Python, C hay thứ gì khác. Để giúp tổ chức các mô-đun và cung cấp hệ thống phân cấp đặt tên, Python có khái niệm về gói .

Bạn có thể coi các gói là các thư mục trên một hệ thống tệp và các mô-đun là các tệp trong các thư mục, nhưng đừng hiểu sự tương tự này theo nghĩa đen vì các gói và mô-đun không cần bắt nguồn từ hệ thống tệp. Đối với mục đích của tài liệu này, chúng tôi sẽ sử dụng sự tương tự thuận tiện này của các thư mục và tệp. Giống như các thư mục hệ thống tệp, các gói được tổ chức theo thứ bậc và bản thân các gói có thể chứa các gói con, cũng như các mô-đun thông thường

Điều quan trọng cần lưu ý là tất cả các gói đều là mô-đun, nhưng không phải tất cả các mô-đun đều là gói. Hay nói cách khác, các gói chỉ là một loại mô-đun đặc biệt. Cụ thể, bất kỳ mô-đun nào chứa thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 đều được coi là một gói

Tất cả các mô-đun có một tên. Tên gói con được phân tách khỏi tên gói mẹ của chúng bằng dấu chấm, gần giống với cú pháp truy cập thuộc tính tiêu chuẩn của Python. Vì vậy, bạn có thể có một gói có tên là

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
22, đến lượt gói này có một gói con có tên là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
23 và một mô-đun bên trong gói con đó có tên là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24

5. 2. 1. Gói thông thường¶

Python định nghĩa hai loại gói, gói thông thườnggói không gian tên. Regular packages are traditional packages as they existed in Python 3.2 and earlier. A regular package is typically implemented as a directory containing an

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
25 file. When a regular package is imported, this
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
25 file is implicitly executed, and the objects it defines are bound to names in the package’s namespace. The
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
25 file can contain the same Python code that any other module can contain, and Python will add some additional attributes to the module when it is imported.

Ví dụ: bố cục hệ thống tệp sau xác định gói

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 cấp cao nhất với ba gói con

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0

Nhập

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
29 sẽ ngầm thực thi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21. Các lần nhập tiếp theo của
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
22 hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
23 sẽ thực hiện tương ứng với
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
25

5. 2. 2. Gói không gian tên¶

Gói không gian tên là tập hợp của nhiều phần , trong đó mỗi phần đóng góp một gói con cho gói mẹ. Các phần có thể nằm ở các vị trí khác nhau trên hệ thống tệp. Các phần cũng có thể được tìm thấy trong tệp zip, trên mạng hoặc bất kỳ nơi nào khác mà Python tìm kiếm trong quá trình nhập. Các gói không gian tên có thể hoặc không tương ứng trực tiếp với các đối tượng trên hệ thống tệp; .

Các gói không gian tên không sử dụng danh sách thông thường cho thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của chúng. Thay vào đó, họ sử dụng loại có thể lặp lại tùy chỉnh sẽ tự động thực hiện tìm kiếm mới cho các phần của gói trong lần nhập tiếp theo trong gói đó nếu đường dẫn của gói gốc của họ [hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 đối với gói cấp cao nhất] thay đổi

Với các gói không gian tên, không có tệp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20. Trên thực tế, có thể có nhiều thư mục
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 được tìm thấy trong quá trình tìm kiếm nhập khẩu, trong đó mỗi thư mục được cung cấp bởi một phần khác nhau. Do đó,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20 có thể không được đặt bên cạnh
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21. Trong trường hợp này, Python sẽ tạo một gói không gian tên cho gói
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 cấp cao nhất bất cứ khi nào gói đó hoặc một trong các gói con của nó được nhập

Xem thêm PEP 420 để biết đặc tả gói không gian tên

5. 3. Tìm kiếm¶

Để bắt đầu tìm kiếm, Python cần tên đủ điều kiện của mô-đun [hoặc gói, nhưng với mục đích của cuộc thảo luận này, . Tên này có thể đến từ các đối số khác nhau cho câu lệnh

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 hoặc từ các tham số cho các hàm
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
10 hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0.

Tên này sẽ được sử dụng trong các giai đoạn khác nhau của quá trình tìm kiếm nhập và nó có thể là đường dẫn chấm đến một mô-đun con, chẳng hạn như. g.

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
26. Trong trường hợp này, trước tiên Python sẽ cố gắng nhập
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27, sau đó là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 và cuối cùng là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
26. Nếu bất kỳ lần nhập trung gian nào không thành công, một
spam/
    __init__.py
    foo.py
4 sẽ được nâng lên

5. 3. 1. Bộ đệm mô-đun¶

Vị trí đầu tiên được kiểm tra trong quá trình tìm kiếm nhập khẩu là

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8. Ánh xạ này đóng vai trò là bộ đệm của tất cả các mô-đun đã được nhập trước đó, bao gồm cả các đường dẫn trung gian. Vì vậy, nếu
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
26 đã được nhập trước đó, thì
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8 sẽ chứa các mục nhập cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
26. Mỗi khóa sẽ có giá trị là đối tượng mô-đun tương ứng

Trong quá trình nhập, tên mô-đun được tra cứu trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8 và nếu có, giá trị được liên kết là mô-đun đáp ứng quá trình nhập và quá trình hoàn tất. Tuy nhiên, nếu giá trị là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, thì một
spam/
    __init__.py
    foo.py
4 được nâng lên. Nếu tên mô-đun bị thiếu, Python sẽ tiếp tục tìm kiếm mô-đun

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8 có thể ghi được. Việc xóa khóa có thể không hủy mô-đun được liên kết [vì các mô-đun khác có thể giữ tham chiếu đến nó], nhưng nó sẽ làm mất hiệu lực mục nhập bộ đệm cho mô-đun có tên, khiến Python phải tìm kiếm lại mô-đun có tên trong lần nhập tiếp theo. Khóa cũng có thể được gán cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, buộc lần nhập mô-đun tiếp theo dẫn đến một
spam/
    __init__.py
    foo.py
4

Mặc dù vậy, hãy cẩn thận, vì nếu bạn giữ một tham chiếu đến đối tượng mô-đun, làm mất hiệu lực mục nhập bộ đệm của nó trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8, sau đó nhập lại mô-đun đã đặt tên, hai đối tượng mô-đun sẽ không giống nhau. Ngược lại,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
44 sẽ sử dụng lại cùng một đối tượng mô-đun và chỉ cần khởi tạo lại nội dung mô-đun bằng cách chạy lại mã của mô-đun

5. 3. 2. Trình tìm kiếm và trình tải¶

Nếu không tìm thấy mô-đun có tên trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8, thì giao thức nhập của Python sẽ được gọi để tìm và tải mô-đun. Giao thức này bao gồm hai đối tượng khái niệm, trình tìm kiếmtrình tải . Công việc của công cụ tìm là xác định xem nó có thể tìm thấy mô-đun được đặt tên hay không bằng cách sử dụng bất kỳ chiến lược nào mà nó biết về. Các đối tượng triển khai cả hai giao diện này được gọi là trình nhập - chúng tự trả về khi nhận thấy rằng chúng có thể tải mô-đun được yêu cầu.

Python bao gồm một số trình tìm và trình nhập mặc định. Cái đầu tiên biết cách định vị các mô-đun tích hợp và cái thứ hai biết cách định vị các mô-đun bị đóng băng. Công cụ tìm kiếm mặc định thứ ba tìm kiếm đường dẫn nhập cho các mô-đun. đường dẫn nhập là danh sách các vị trí có thể đặt tên đường dẫn hệ thống tệp hoặc tệp zip. Nó cũng có thể được mở rộng để tìm kiếm bất kỳ tài nguyên có thể định vị nào, chẳng hạn như những tài nguyên được xác định bởi URL.

Máy móc nhập khẩu có thể mở rộng, vì vậy có thể thêm các công cụ tìm kiếm mới để mở rộng phạm vi và phạm vi tìm kiếm mô-đun

Trình tìm kiếm không thực sự tải các mô-đun. Nếu họ có thể tìm thấy mô-đun được đặt tên, họ sẽ trả về một thông số kỹ thuật của mô-đun, một phần đóng gói thông tin liên quan đến nhập của mô-đun, mà sau đó máy móc nhập sẽ sử dụng khi tải mô-đun

Các phần sau đây mô tả chi tiết hơn về giao thức cho trình tìm và trình tải, bao gồm cách bạn có thể tạo và đăng ký những giao thức mới để mở rộng bộ máy nhập

Đã thay đổi trong phiên bản 3. 4. Trong các phiên bản Python trước, công cụ tìm trả về trình tải trực tiếp, trong khi giờ đây, chúng trả về thông số mô-đun có chứa trình tải. Trình tải vẫn được sử dụng trong quá trình nhập nhưng có ít trách nhiệm hơn.

5. 3. 3. Móc nhập khẩu¶

Máy móc nhập khẩu được thiết kế để có thể mở rộng; . Có hai loại móc nhập khẩu. móc meta và móc đường dẫn nhập

Móc meta được gọi khi bắt đầu quá trình nhập, trước khi bất kỳ quá trình nhập nào khác xảy ra, ngoại trừ tra cứu bộ đệm

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8. Điều này cho phép các móc nối meta ghi đè quá trình xử lý
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27, các mô-đun bị đóng băng hoặc thậm chí các mô-đun tích hợp sẵn. Móc meta được đăng ký bằng cách thêm các đối tượng công cụ tìm mới vào
spam/
    __init__.py
    foo.py
5, như được mô tả bên dưới

Móc đường dẫn nhập được gọi là một phần của quá trình xử lý

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 [hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
040], tại điểm gặp phải mục đường dẫn liên kết của chúng. Móc đường dẫn nhập được đăng ký bằng cách thêm các hàm có thể gọi mới vào
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
041 như được mô tả bên dưới

5. 3. 4. Đường dẫn meta¶

Khi không tìm thấy mô-đun có tên trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8, tiếp theo Python sẽ tìm kiếm
spam/
    __init__.py
    foo.py
5, chứa danh sách các đối tượng công cụ tìm đường dẫn meta. Những công cụ tìm này được truy vấn để xem liệu họ có biết cách xử lý mô-đun được đặt tên hay không. Công cụ tìm đường dẫn meta phải triển khai một phương thức có tên là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044, phương thức này có ba đối số. tên, đường dẫn nhập và [tùy chọn] mô-đun đích. Công cụ tìm đường dẫn meta có thể sử dụng bất kỳ chiến lược nào mà nó muốn để xác định xem nó có thể xử lý mô-đun được đặt tên hay không

Nếu công cụ tìm đường dẫn meta biết cách xử lý mô-đun được đặt tên, nó sẽ trả về một đối tượng cụ thể. Nếu nó không thể xử lý mô-đun được đặt tên, nó sẽ trả về

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88. Nếu quá trình xử lý
spam/
    __init__.py
    foo.py
5 đến cuối danh sách của nó mà không trả về thông số kỹ thuật, thì
spam/
    __init__.py
    foo.py
4 sẽ được nâng lên. Bất kỳ ngoại lệ nào khác được đưa ra chỉ đơn giản là được truyền lên, hủy bỏ quá trình nhập

Phương thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 của công cụ tìm đường dẫn meta được gọi với hai hoặc ba đối số. Đầu tiên là tên đủ điều kiện của mô-đun được nhập, ví dụ:
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
26. Đối số thứ hai là các mục nhập đường dẫn để sử dụng cho tìm kiếm mô-đun. Đối với các mô-đun cấp cao nhất, đối số thứ hai là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, nhưng đối với các mô-đun con hoặc gói con, đối số thứ hai là giá trị của thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của gói chính. Nếu không thể truy cập thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 thích hợp, một
spam/
    __init__.py
    foo.py
4 sẽ được nâng lên. Đối số thứ ba là một đối tượng mô-đun hiện có sẽ là mục tiêu tải sau này. Hệ thống nhập chỉ chuyển vào mô-đun đích trong khi tải lại

Đường dẫn meta có thể được duyệt nhiều lần cho một yêu cầu nhập. Ví dụ: giả sử không có mô-đun nào liên quan đã được lưu vào bộ đệm ẩn, thì việc nhập

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
26 trước tiên sẽ thực hiện nhập cấp cao nhất, gọi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
105 trên mỗi công cụ tìm đường dẫn meta [
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
106]. Sau khi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 đã được nhập,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 sẽ được nhập bằng cách duyệt qua đường dẫn meta lần thứ hai, gọi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
109. Khi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 đã được nhập, quá trình truyền tải cuối cùng sẽ gọi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
01

Một số công cụ tìm đường dẫn meta chỉ hỗ trợ nhập cấp cao nhất. Những nhà nhập khẩu này sẽ luôn trả về

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88 khi bất kỳ thứ gì khác ngoài
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88 được chuyển làm đối số thứ hai

_______65 mặc định của Python có ba công cụ tìm đường dẫn meta, một công cụ biết cách nhập các mô-đun tích hợp sẵn, một công cụ biết cách nhập các mô-đun cố định và một công cụ biết cách nhập các mô-đun từ import path [i.e. the công cụ tìm dựa trên đường dẫn ].

Đã thay đổi trong phiên bản 3. 4. Phương pháp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 của công cụ tìm đường dẫn meta đã thay thế
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06, hiện không được dùng nữa. Mặc dù nó sẽ tiếp tục hoạt động mà không thay đổi, nhưng máy móc nhập khẩu sẽ chỉ thử nếu công cụ tìm không triển khai
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044.

Đã thay đổi trong phiên bản 3. 10. Việc sử dụng

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06 bởi hệ thống nhập hiện làm tăng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
09.

5. 4. Đang tải¶

Nếu và khi tìm thấy thông số mô-đun, máy nhập sẽ sử dụng thông số đó [và trình tải mà nó chứa] khi tải mô-đun. Đây là một ước tính về những gì xảy ra trong phần tải của quá trình nhập

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]

Lưu ý các chi tiết sau

  • Nếu có một đối tượng mô-đun hiện có với tên đã cho trong

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8, quá trình nhập sẽ trả về nó

  • Mô-đun sẽ tồn tại trong

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8 trước khi trình tải thực thi mã mô-đun. Điều này rất quan trọng vì mã mô-đun có thể [trực tiếp hoặc gián tiếp] nhập chính nó;

  • Nếu tải không thành công, mô-đun bị lỗi – và chỉ mô-đun bị lỗi – sẽ bị xóa khỏi

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8. Bất kỳ mô-đun nào đã có trong bộ đệm
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8 và bất kỳ mô-đun nào đã được tải thành công dưới dạng hiệu ứng phụ đều phải nằm trong bộ đệm. Điều này trái ngược với việc tải lại mà ngay cả mô-đun bị lỗi cũng bị bỏ lại trong
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8

  • Sau khi mô-đun được tạo nhưng trước khi thực thi, bộ máy nhập sẽ đặt các thuộc tính mô-đun liên quan đến quá trình nhập [“_init_module_attrs” trong ví dụ mã giả ở trên], như được tóm tắt trong a . .

  • Thực thi mô-đun là thời điểm quan trọng của quá trình tải trong đó không gian tên của mô-đun được phổ biến. Việc thực thi được ủy quyền hoàn toàn cho trình tải, trình tải này sẽ quyết định nội dung nào được phổ biến và cách thức

  • Mô-đun được tạo trong khi tải và được chuyển tới exec_module[] có thể không phải là mô-đun được trả về khi kết thúc quá trình nhập 2

Đã thay đổi trong phiên bản 3. 4. Hệ thống nhập đã đảm nhận trách nhiệm soạn sẵn của bộ tải. Những điều này trước đây đã được thực hiện bằng phương pháp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
16.

5. 4. 1. Trình tải¶

Bộ tải mô-đun cung cấp chức năng quan trọng là tải. thực hiện mô-đun. Máy nhập gọi phương thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
17 với một đối số duy nhất, đối tượng mô-đun để thực thi. Mọi giá trị được trả về từ
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
18 đều bị bỏ qua

Bộ tải phải đáp ứng các yêu cầu sau

  • Nếu mô-đun là mô-đun Python [trái ngược với mô-đun tích hợp hoặc tiện ích mở rộng được tải động], trình tải sẽ thực thi mã của mô-đun trong không gian tên chung của mô-đun [

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    19]

  • Nếu trình tải không thể thực thi mô-đun, nó sẽ tăng

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    20, mặc dù bất kỳ ngoại lệ nào khác được đưa ra trong thời gian
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    18 sẽ được lan truyền

Trong nhiều trường hợp, công cụ tìm và trình tải có thể là cùng một đối tượng;

Trình tải mô-đun có thể chọn tham gia tạo đối tượng mô-đun trong khi tải bằng cách triển khai phương thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24. Nó nhận một đối số, thông số mô-đun và trả về đối tượng mô-đun mới để sử dụng trong khi tải.
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24 không cần đặt bất kỳ thuộc tính nào trên đối tượng mô-đun. Nếu phương thức trả về
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, máy nhập sẽ tự tạo mô-đun mới

Mới trong phiên bản 3. 4. Phương pháp bộ tải

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24.

Đã thay đổi trong phiên bản 3. 4. Phương pháp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 đã được thay thế bằng phương pháp
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
18 và máy móc nhập khẩu đảm nhận tất cả các trách nhiệm tải sẵn.

Để tương thích với các bộ tải hiện có, máy móc nhập khẩu sẽ sử dụng phương pháp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 của bộ tải nếu nó tồn tại và bộ tải không cũng thực hiện
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
18. Tuy nhiên,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 đã không còn được dùng nữa và các trình tải nên triển khai
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
18 để thay thế

Phương thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 phải triển khai tất cả chức năng tải soạn sẵn được mô tả ở trên ngoài việc thực thi mô-đun. Tất cả các ràng buộc tương tự được áp dụng, với một số giải thích bổ sung

  • Nếu có một đối tượng mô-đun hiện có với tên đã cho trong

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8, trình tải phải sử dụng mô-đun hiện có đó. [Nếu không,
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    44 sẽ không hoạt động chính xác. ] Nếu mô-đun được đặt tên không tồn tại trong
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8, trình tải phải tạo một đối tượng mô-đun mới và thêm nó vào
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8

  • Mô-đun phải tồn tại trong

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8 trước khi trình tải thực thi mã mô-đun, để ngăn chặn đệ quy không giới hạn hoặc tải nhiều lần

  • Nếu quá trình tải không thành công, trình tải phải xóa bất kỳ mô-đun nào mà nó đã chèn vào

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    8, nhưng nó chỉ được xóa [các] mô-đun bị lỗi và chỉ khi bản thân trình tải đã tải [các] mô-đun một cách rõ ràng

Đã thay đổi trong phiên bản 3. 5. Một

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
41 được nâng lên khi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
18 được xác định nhưng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24 thì không.

Đã thay đổi trong phiên bản 3. 6. Một

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20 được nâng lên khi
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
18 được xác định nhưng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
24 thì không.

Đã thay đổi trong phiên bản 3. 10. Sử dụng

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
28 sẽ tăng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
09.

5. 4. 2. Mô-đun con¶

Khi một mô-đun con được tải bằng bất kỳ cơ chế nào [e. g.

spam/
    __init__.py
    foo.py
6 API, câu lệnh
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
04 hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
51 hoặc tích hợp sẵn
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0] một ràng buộc được đặt trong không gian tên của mô-đun chính tới đối tượng mô-đun con. Ví dụ: nếu gói
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
53 có mô hình con
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27, sau khi nhập
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
55,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
53 sẽ có thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 được liên kết với mô hình con. Giả sử bạn có cấu trúc thư mục sau

spam/
    __init__.py
    foo.py

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
58 có dòng sau trong đó

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
2

sau đó thực hiện các liên kết đặt tên sau cho

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
60 trong mô-đun
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
53

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
2

Với các quy tắc ràng buộc tên quen thuộc của Python, điều này có vẻ đáng ngạc nhiên, nhưng nó thực sự là một tính năng cơ bản của hệ thống nhập. Nắm giữ bất biến là nếu bạn có

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
62 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
63 [như bạn làm sau khi nhập ở trên], cái sau phải xuất hiện dưới dạng thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 của cái trước

5. 4. 3. Thông số mô-đun¶

Máy nhập sử dụng nhiều thông tin khác nhau về từng mô-đun trong quá trình nhập, đặc biệt là trước khi tải. Hầu hết các thông tin là chung cho tất cả các mô-đun. Mục đích của thông số kỹ thuật của mô-đun là gói gọn thông tin liên quan đến nhập này trên cơ sở từng mô-đun

Sử dụng một thông số kỹ thuật trong quá trình nhập cho phép chuyển trạng thái giữa các thành phần hệ thống nhập, e. g. giữa công cụ tìm tạo thông số mô-đun và trình tải thực thi nó. Quan trọng nhất, nó cho phép máy móc nhập khẩu thực hiện các hoạt động tải theo bản mẫu, trong khi không có thông số kỹ thuật mô-đun, trình tải có trách nhiệm đó

Thông số kỹ thuật của mô-đun được hiển thị dưới dạng thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 trên đối tượng mô-đun. Xem
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
66 để biết chi tiết về nội dung của thông số mô-đun

Mới trong phiên bản 3. 4

5. 4. 4. Thuộc tính mô-đun liên quan đến nhập khẩu¶

Bộ máy nhập điền vào các thuộc tính này trên từng đối tượng mô-đun trong khi tải, dựa trên thông số kỹ thuật của mô-đun, trước khi trình tải thực thi mô-đun

__name__

Thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
67 phải được đặt thành tên đủ điều kiện của mô-đun. Tên này được sử dụng để xác định duy nhất mô-đun trong hệ thống nhập

__loader__

Thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
68 phải được đặt thành đối tượng trình tải mà máy nhập đã sử dụng khi tải mô-đun. Điều này chủ yếu dành cho nội quan, nhưng có thể được sử dụng cho chức năng bổ sung dành riêng cho trình tải, ví dụ: nhận dữ liệu được liên kết với trình tải

__gói__

Thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69 của mô-đun phải được đặt. Giá trị của nó phải là một chuỗi, nhưng nó có thể cùng giá trị với giá trị của nó là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
67. Khi mô-đun là một gói, giá trị
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69 của nó phải được đặt thành
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
67. Khi mô-đun không phải là một gói, thì nên đặt
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69 thành chuỗi trống đối với các mô-đun cấp cao nhất hoặc đối với các mô-đun con, thành tên của gói chính. Xem PEP 366 để biết thêm chi tiết

Thuộc tính này được sử dụng thay vì

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
67 để tính toán nhập tương đối rõ ràng cho các mô-đun chính, như được định nghĩa trong PEP 366. Dự kiến ​​​​sẽ có cùng giá trị với
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
75

Đã thay đổi trong phiên bản 3. 6. Giá trị của

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69 dự kiến ​​sẽ giống như của
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
75.

__spec__

Thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 phải được đặt thành thông số mô-đun được sử dụng khi nhập mô-đun. Cài đặt
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 thích hợp áp dụng như nhau cho các mô-đun được khởi tạo trong quá trình khởi động trình thông dịch . Một ngoại lệ là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80, trong đó
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 được đặt thành Không có trong một số trường hợp .

Khi

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69 không được xác định,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
75 được sử dụng làm phương án dự phòng

Mới trong phiên bản 3. 4

Đã thay đổi trong phiên bản 3. 6. ______075 được sử dụng làm phương án dự phòng khi không xác định được

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69.

__path__

Nếu mô-đun là một gói [thông thường hoặc không gian tên], thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của đối tượng mô-đun phải được đặt. Giá trị phải có thể lặp lại, nhưng có thể để trống nếu
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 không có ý nghĩa gì nữa. Nếu
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 không trống, nó phải tạo chuỗi khi lặp lại. Chi tiết khác về ngữ nghĩa của
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 được đưa ra bên dưới .

Các mô-đun không phải gói không được có thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21

__file____cached__

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
91 là tùy chọn [nếu được đặt, giá trị phải là một chuỗi]. Nó cho biết tên đường dẫn của tệp mà mô-đun được tải từ đó [nếu được tải từ tệp] hoặc tên đường dẫn của tệp thư viện dùng chung cho các mô-đun mở rộng được tải động từ thư viện dùng chung. Nó có thể bị thiếu đối với một số loại mô-đun nhất định, chẳng hạn như mô-đun C được liên kết tĩnh với trình thông dịch và hệ thống nhập có thể chọn không đặt nó nếu nó không có ý nghĩa ngữ nghĩa [e. g. một mô-đun được tải từ cơ sở dữ liệu]

Nếu

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
91 được đặt thì thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
93 cũng có thể được đặt, đây là đường dẫn đến bất kỳ phiên bản mã đã biên dịch nào [e. g. tệp biên dịch byte]. Tệp không cần tồn tại để đặt thuộc tính này;

Lưu ý rằng có thể đặt

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
93 ngay cả khi không đặt
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
91. Tuy nhiên, kịch bản đó là khá không điển hình. Cuối cùng, trình tải là thứ sử dụng thông số kỹ thuật mô-đun do công cụ tìm cung cấp [từ đó bắt nguồn từ
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
91 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
93]. Vì vậy, nếu trình tải có thể tải từ một mô-đun được lưu trong bộ nhớ cache nhưng không tải từ tệp, thì trường hợp không điển hình đó có thể phù hợp

5. 4. 5. mô-đun. __đường__¶

Theo định nghĩa, nếu một mô-đun có thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21, thì đó là một gói

Thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của một gói được sử dụng trong quá trình nhập các gói con của nó. Trong máy móc nhập khẩu, nó hoạt động giống như
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27, tôi. e. cung cấp danh sách các vị trí để tìm kiếm các mô-đun trong quá trình nhập. Tuy nhiên,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 thường bị ràng buộc nhiều hơn so với
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 phải là một chuỗi có thể lặp lại, nhưng nó có thể trống. Các quy tắc tương tự được sử dụng cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 cũng áp dụng cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của gói và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
041 [được mô tả bên dưới] được tham khảo khi duyệt qua
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của gói

Tệp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
25 của gói có thể đặt hoặc thay đổi thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của gói và đây thường là cách các gói không gian tên được triển khai trước PEP 420. Với việc áp dụng PEP 420, các gói không gian tên không còn cần cung cấp các tệp
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
25 chỉ chứa mã thao tác
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21;

5. 4. 6. Đại diện mô-đun¶

Theo mặc định, tất cả các mô-đun đều có một repr có thể sử dụng được, tuy nhiên, tùy thuộc vào các thuộc tính được đặt ở trên và trong thông số kỹ thuật của mô-đun, bạn có thể kiểm soát rõ ràng hơn repr của các đối tượng mô-đun

Nếu mô-đun có thông số kỹ thuật [

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65], máy móc nhập khẩu sẽ cố gắng tạo repr từ mô-đun đó. Nếu không thành công hoặc không có thông số kỹ thuật, hệ thống nhập sẽ tạo một repr mặc định bằng cách sử dụng bất kỳ thông tin nào có sẵn trên mô-đun. Nó sẽ cố gắng sử dụng
spam/
    __init__.py
    foo.py
14,
spam/
    __init__.py
    foo.py
15 và
spam/
    __init__.py
    foo.py
16 làm đầu vào cho repr, với các giá trị mặc định cho bất kỳ thông tin nào bị thiếu

Dưới đây là các quy tắc chính xác được sử dụng

  • Nếu mô-đun có thuộc tính

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    65, thông tin trong thông số kỹ thuật được sử dụng để tạo repr. Các thuộc tính “name”, “loader”, “origin” và “has_location” được tham khảo

  • Nếu mô-đun có thuộc tính

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    91, thuộc tính này được sử dụng như một phần của repr của mô-đun

  • Nếu mô-đun không có

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    91 nhưng có
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    68 không phải là
    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    88, thì repr của trình tải được sử dụng như một phần của repr của mô-đun

  • Nếu không, chỉ cần sử dụng mô-đun

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    67 trong repr

Đã thay đổi trong phiên bản 3. 4. Việc sử dụng

spam/
    __init__.py
    foo.py
23 đã không còn được chấp nhận và thông số kỹ thuật của mô-đun hiện được sử dụng bởi máy móc nhập khẩu để tạo repr mô-đun.

Để tương thích ngược với Python 3. 3, repr mô-đun sẽ được tạo bằng cách gọi phương thức

spam/
    __init__.py
    foo.py
24 của trình tải, nếu được xác định, trước khi thử một trong hai phương pháp được mô tả ở trên. Tuy nhiên, phương pháp này không được chấp nhận

Đã thay đổi trong phiên bản 3. 10. Gọi

spam/
    __init__.py
    foo.py
24 hiện xảy ra sau khi cố gắng sử dụng thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 của mô-đun nhưng trước khi quay lại
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
91. Việc sử dụng
spam/
    __init__.py
    foo.py
24 dự kiến ​​​​sẽ dừng lại trong Python 3. 12.

5. 4. 7. Hủy hiệu lực mã byte đã lưu trong bộ nhớ cache¶

Trước khi Python tải mã byte được lưu trong bộ đệm từ tệp

spam/
    __init__.py
    foo.py
29, nó sẽ kiểm tra xem bộ đệm có được cập nhật với tệp nguồn
spam/
    __init__.py
    foo.py
30 hay không. Theo mặc định, Python thực hiện điều này bằng cách lưu trữ dấu thời gian và kích thước được sửa đổi lần cuối của nguồn trong tệp bộ đệm khi ghi nó. Khi chạy, hệ thống nhập sau đó sẽ xác thực tệp bộ đệm bằng cách kiểm tra siêu dữ liệu được lưu trữ trong tệp bộ đệm với siêu dữ liệu của nguồn

Python cũng hỗ trợ các tệp bộ đệm “dựa trên hàm băm”, lưu trữ hàm băm của nội dung tệp nguồn thay vì siêu dữ liệu của nó. Có hai biến thể của tệp

spam/
    __init__.py
    foo.py
29 dựa trên hàm băm. đã kiểm tra và bỏ chọn. Đối với các tệp
spam/
    __init__.py
    foo.py
29 dựa trên hàm băm đã kiểm tra, Python xác thực tệp bộ đệm bằng cách băm tệp nguồn và so sánh hàm băm kết quả với hàm băm trong tệp bộ đệm. Nếu một tệp bộ đệm dựa trên hàm băm đã kiểm tra được phát hiện là không hợp lệ, Python sẽ tạo lại tệp đó và ghi một tệp bộ đệm dựa trên hàm băm đã kiểm tra mới. Đối với các tệp
spam/
    __init__.py
    foo.py
29 dựa trên hàm băm không được kiểm tra, Python chỉ cần giả định rằng tệp bộ đệm là hợp lệ nếu nó tồn tại. Hành vi xác thực tệp
spam/
    __init__.py
    foo.py
29 dựa trên hàm băm có thể bị ghi đè bằng cờ
spam/
    __init__.py
    foo.py
35

Đã thay đổi trong phiên bản 3. 7. Đã thêm tệp

spam/
    __init__.py
    foo.py
29 dựa trên hàm băm. Trước đây, Python chỉ hỗ trợ vô hiệu hóa bộ đệm mã byte dựa trên dấu thời gian.

5. 5. Trình tìm kiếm dựa trên đường dẫn¶

Như đã đề cập trước đây, Python đi kèm với một số công cụ tìm đường dẫn meta mặc định. Một trong số đó, được gọi là công cụ tìm dựa trên đường dẫn [

spam/
    __init__.py
    foo.py
37], tìm kiếm một đường dẫn nhập, which contains a list of path entries. Each path entry names a location to search for modules.

Bản thân công cụ tìm đường dẫn không biết cách nhập bất cứ thứ gì. Thay vào đó, nó duyệt qua các mục nhập đường dẫn riêng lẻ, liên kết từng mục đó với một công cụ tìm mục nhập đường dẫn biết cách xử lý loại đường dẫn cụ thể đó

Bộ công cụ tìm mục nhập đường dẫn mặc định triển khai tất cả ngữ nghĩa để tìm mô-đun trên hệ thống tệp, xử lý các loại tệp đặc biệt như mã nguồn Python [tệp

spam/
    __init__.py
    foo.py
30], mã byte Python [tệp
spam/
    __init__.py
    foo.py
29] và thư viện dùng chung [e. g.
spam/
    __init__.py
    foo.py
40 tệp]. Khi được hỗ trợ bởi mô-đun
spam/
    __init__.py
    foo.py
41 trong thư viện tiêu chuẩn, công cụ tìm mục nhập đường dẫn mặc định cũng xử lý việc tải tất cả các loại tệp này [ngoài thư viện dùng chung] từ tệp zip

Các mục nhập đường dẫn không cần giới hạn ở các vị trí hệ thống tệp. Chúng có thể tham chiếu đến URL, truy vấn cơ sở dữ liệu hoặc bất kỳ vị trí nào khác có thể được chỉ định dưới dạng chuỗi

Công cụ tìm kiếm dựa trên đường dẫn cung cấp các móc nối và giao thức bổ sung để bạn có thể mở rộng và tùy chỉnh các loại mục nhập đường dẫn có thể tìm kiếm. Ví dụ: nếu bạn muốn hỗ trợ các mục nhập đường dẫn dưới dạng URL mạng, bạn có thể viết một hook triển khai ngữ nghĩa HTTP để tìm các mô-đun trên web. Móc này [có thể gọi được] sẽ trả về một công cụ tìm mục nhập đường dẫn hỗ trợ giao thức được mô tả bên dưới, giao thức này sau đó được sử dụng để tải trình tải cho mô-đun từ web.

Lời cảnh báo. cả phần này và phần trước đều sử dụng thuật ngữ tìm đường dẫn, phân biệt giữa chúng bằng cách sử dụng thuật ngữ công cụ tìm đường dẫn metađường dẫn . Hai loại công cụ tìm này rất giống nhau, hỗ trợ các giao thức tương tự và hoạt động theo những cách tương tự nhau trong quá trình nhập, nhưng điều quan trọng cần lưu ý là chúng khác nhau một cách tinh tế. Đặc biệt, các công cụ tìm đường dẫn meta hoạt động khi bắt đầu quá trình nhập, khi đã tắt quá trình truyền tải

spam/
    __init__.py
    foo.py
5. . These two types of finders are very similar, support similar protocols, and function in similar ways during the import process, but it’s important to keep in mind that they are subtly different. In particular, meta path finders operate at the beginning of the import process, as keyed off the
spam/
    __init__.py
    foo.py
5 traversal.

Ngược lại, công cụ tìm mục nhập đường dẫn theo một nghĩa nào đó là một chi tiết triển khai của công cụ tìm dựa trên đường dẫn và trên thực tế, nếu công cụ tìm mục dựa trên đường dẫn bị xóa khỏi

spam/
    __init__.py
    foo.py
5, thì sẽ không có ngữ nghĩa nào của công cụ tìm mục nhập đường dẫn được gọi ra

5. 5. 1. Công cụ tìm mục nhập đường dẫn¶

Trình dựa trên đường dẫn chịu trách nhiệm tìm và tải các gói và mô-đun Python có vị trí được chỉ định bằng một chuỗi path entry. Most path entries name locations in the file system, but they need not be limited to this.

Là một công cụ tìm đường dẫn meta, công cụ tìm dựa trên đường dẫn triển khai giao thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 được mô tả trước đó, tuy nhiên, giao thức này hiển thị các móc nối bổ sung có thể được sử dụng để . import path.

Ba biến được sử dụng bởi công cụ tìm dựa trên đường dẫn ,

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
041 và
spam/
    __init__.py
    foo.py
47. Các thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 trên các đối tượng gói cũng được sử dụng. Những điều này cung cấp các cách bổ sung mà máy móc nhập khẩu có thể được tùy chỉnh.

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 chứa danh sách các chuỗi cung cấp vị trí tìm kiếm cho các mô-đun và gói. Nó được khởi tạo từ biến môi trường
spam/
    __init__.py
    foo.py
50 và nhiều giá trị mặc định cài đặt và cài đặt cụ thể khác. Các mục nhập trong
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 có thể đặt tên cho các thư mục trên hệ thống tệp, tệp zip và các “vị trí” tiềm năng khác [xem mô-đun
spam/
    __init__.py
    foo.py
52] cần được tìm kiếm cho các mô-đun, chẳng hạn như URL hoặc truy vấn cơ sở dữ liệu. Chỉ nên có các chuỗi trên
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27;

Trình công cụ tìm dựa trên đường dẫncông cụ tìm đường dẫn meta . Khi đối số

spam/
    __init__.py
    foo.py
55 cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 được đưa ra, nó sẽ là một danh sách các đường dẫn chuỗi để duyệt qua - thường là thuộc tính
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 của gói cho một lần nhập trong gói đó. Nếu đối số
spam/
    __init__.py
    foo.py
55 là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, điều này cho biết nhập cấp cao nhất và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 được sử dụng. import path search by calling the path based finder’s
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 method as described previously. When the
spam/
    __init__.py
    foo.py
55 argument to
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 is given, it will be a list of string paths to traverse - typically a package’s
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
21 attribute for an import within that package. If the
spam/
    __init__.py
    foo.py
55 argument is
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, this indicates a top level import and
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 is used.

Công cụ tìm dựa trên đường dẫn lặp lại qua mọi mục nhập trong đường dẫn tìm kiếm và đối với mỗi mục này, hãy tìm một công cụ tìm mục nhập đường dẫn thích hợp [ . Bởi vì đây có thể là một hoạt động tốn kém [e. g. có thể có tổng phí cuộc gọi

spam/
    __init__.py
    foo.py
62 cho tìm kiếm này], công cụ tìm kiếm dựa trên đường dẫn duy trì các mục nhập đường dẫn ánh xạ bộ đệm tới các công cụ tìm mục nhập đường dẫn. Bộ đệm này được duy trì trong
spam/
    __init__.py
    foo.py
47 [bất chấp tên gọi, bộ đệm này thực sự lưu trữ các đối tượng công cụ tìm thay vì chỉ giới hạn ở các đối tượng trình nhập ]. Theo cách này, việc tìm kiếm mục nhập đường dẫn cụ thể của công cụ tìm mục nhập đường dẫn need only be done once. User code is free to remove cache entries from
spam/
    __init__.py
    foo.py
47 forcing the path based finder to perform the path entry search again 3.

Nếu mục nhập đường dẫn không có trong bộ đệm, công cụ tìm dựa trên đường dẫn sẽ lặp lại trên mọi lệnh có thể gọi được trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
041. Mỗi móc nhập đường dẫn trong danh sách này được gọi với một đối số duy nhất, mục nhập đường dẫn được tìm kiếm. Khả năng gọi này có thể trả về một công cụ tìm mục nhập đường dẫn có thể xử lý mục nhập đường dẫn hoặc có thể tăng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20. Một
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20 được sử dụng bởi công cụ tìm kiếm dựa trên đường dẫn để báo hiệu rằng hook không thể tìm thấy công cụ tìm mục nhập đường dẫn cho đường dẫn đó . Ngoại lệ bị bỏ qua và . The exception is ignored and đường dẫn nhập tiếp tục lặp lại. Cái móc sẽ mong đợi một đối tượng chuỗi hoặc byte; . g. nó có thể là mã hóa hệ thống tệp, UTF-8 hoặc thứ gì đó khác] và nếu hook không thể giải mã đối số, nó sẽ tăng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
20.

Nếu quá trình lặp lại của

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
041 kết thúc mà không có công cụ tìm mục nhập đường dẫn nào được trả về, thì phương thức
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 của công cụ tìm đường dẫn dựa trên sẽ lưu trữ
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88 trong
spam/
    __init__.py
    foo.py
47 [để biểu thị . meta path finder could not find the module.

Nếu công cụ tìm mục nhập đường dẫn được trả về bởi một trong hook mục nhập đường dẫn callables on

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
041, then the following protocol is used to ask the finder for a module spec, which is then used when loading the module.

Thư mục làm việc hiện tại – được biểu thị bằng một chuỗi trống – được xử lý hơi khác so với các mục nhập khác trên

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27. Đầu tiên, nếu thư mục làm việc hiện tại không tồn tại, thì không có giá trị nào được lưu trữ trong
spam/
    __init__.py
    foo.py
47. Thứ hai, giá trị cho thư mục làm việc hiện tại được tra cứu mới cho mỗi lần tra cứu mô-đun. Thứ ba, đường dẫn được sử dụng cho
spam/
    __init__.py
    foo.py
47 và được trả về bởi
spam/
    __init__.py
    foo.py
78 sẽ là thư mục làm việc thực tế hiện tại chứ không phải chuỗi rỗng

5. 5. 2. Giao thức tìm mục nhập đường dẫn¶

Để hỗ trợ nhập các mô-đun và các gói đã khởi tạo và cũng để đóng góp các phần vào các gói không gian tên, công cụ tìm mục nhập đường dẫn phải triển khai phương thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 có hai đối số. tên đủ điều kiện của mô-đun đang được nhập và mô-đun đích [tùy chọn].
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 trả về thông số kỹ thuật được điền đầy đủ cho mô-đun. Thông số này sẽ luôn có bộ “loader” [với một ngoại lệ]

Để cho máy móc nhập biết rằng thông số kỹ thuật đại diện cho một phần , công cụ tìm mục nhập đường dẫn đặt “submodule_search_locations” thành một danh sách chứa .

Đã thay đổi trong phiên bản 3. 4. ______3044 đã thay thế

spam/
    __init__.py
    foo.py
83 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06, cả hai hiện không được dùng nữa nhưng sẽ được sử dụng nếu
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 không được xác định.

Các công cụ tìm mục nhập đường dẫn cũ hơn có thể triển khai một trong hai phương pháp không dùng nữa này thay vì

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044. Các phương pháp vẫn được tôn trọng vì mục đích tương thích ngược. Tuy nhiên, nếu
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 được triển khai trên công cụ tìm mục nhập đường dẫn, các phương thức cũ sẽ bị bỏ qua

spam/
    __init__.py
    foo.py
83 lấy một đối số, tên đủ điều kiện của mô-đun đang được nhập.
spam/
    __init__.py
    foo.py
83 trả về 2-tuple trong đó mục đầu tiên là trình tải và mục thứ hai là không gian tên phần .

Để tương thích ngược với các triển khai khác của giao thức nhập, nhiều công cụ tìm mục nhập đường dẫn cũng hỗ trợ cùng phương thức truyền thống

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06 mà công cụ tìm đường dẫn meta hỗ trợ. Tuy nhiên, các phương thức tìm mục nhập đường dẫn
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06 không bao giờ được gọi với đối số
spam/
    __init__.py
    foo.py
55 [chúng phải ghi lại thông tin đường dẫn thích hợp từ lệnh gọi ban đầu đến hook đường dẫn]

Phương thức

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06 trên công cụ tìm mục nhập đường dẫn không được dùng nữa vì nó không cho phép công cụ tìm mục nhập đường dẫn đóng góp các phần vào gói không gian tên. Nếu cả
spam/
    __init__.py
    foo.py
83 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06 đều tồn tại trên công cụ tìm mục nhập đường dẫn, thì hệ thống nhập sẽ luôn ưu tiên gọi
spam/
    __init__.py
    foo.py
83 hơn là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06

Đã thay đổi trong phiên bản 3. 10. Các cuộc gọi đến

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06 và
spam/
    __init__.py
    foo.py
83 bởi hệ thống nhập khẩu sẽ tăng
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
09.

5. 6. Thay thế hệ thống nhập tiêu chuẩn¶

Cơ chế đáng tin cậy nhất để thay thế toàn bộ hệ thống nhập là xóa nội dung mặc định của

spam/
    __init__.py
    foo.py
5, thay thế hoàn toàn bằng móc đường dẫn meta tùy chỉnh

Nếu có thể chấp nhận chỉ thay đổi hành vi của các câu lệnh nhập mà không ảnh hưởng đến các API khác truy cập hệ thống nhập, thì việc thay thế hàm

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
0 dựng sẵn có thể là đủ. Kỹ thuật này cũng có thể được sử dụng ở cấp mô-đun để chỉ thay đổi hành vi của các câu lệnh nhập trong mô-đun đó

Để ngăn chặn có chọn lọc việc nhập một số mô-đun từ một hook sớm trên đường dẫn meta [thay vì vô hiệu hóa hoàn toàn hệ thống nhập tiêu chuẩn], chỉ cần tăng trực tiếp

spam/
    __init__.py
    foo.py
4 từ
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
044 thay vì trả về
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88 là đủ. Cái sau chỉ ra rằng quá trình tìm kiếm đường dẫn meta sẽ tiếp tục, trong khi việc đưa ra một ngoại lệ sẽ chấm dứt nó ngay lập tức

5. 7. Số lần nhập tương đối của gói hàng¶

Nhập khẩu tương đối sử dụng dấu chấm hàng đầu. Một dấu chấm ở đầu biểu thị một lần nhập tương đối, bắt đầu với gói hiện tại. Hai hoặc nhiều dấu chấm ở đầu biểu thị mức nhập tương đối với [các] gói gốc của gói hiện tại, một cấp cho mỗi dấu chấm sau dấu chấm đầu tiên. Ví dụ: đưa ra cách bố trí gói sau

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
2

Trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
206 hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
207, những điều sau đây là nhập khẩu tương đối hợp lệ

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8

Nhập tuyệt đối có thể sử dụng cú pháp

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
208 hoặc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
209, nhưng nhập tương đối chỉ có thể sử dụng biểu mẫu thứ hai;

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
4

nên hiển thị

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
210 dưới dạng biểu thức có thể sử dụng được, nhưng. moduleY không phải là một biểu thức hợp lệ

5. 8. Những cân nhắc đặc biệt dành cho __main__¶

Mô-đun

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 là trường hợp đặc biệt so với hệ thống nhập của Python. Như đã lưu ý ở những nơi khác , mô-đun
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 được khởi tạo trực tiếp khi khởi động trình thông dịch, giống như
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
213 và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
214. Tuy nhiên, không giống như hai mô-đun đó, nó không hoàn toàn đủ điều kiện là mô-đun tích hợp. Điều này là do cách khởi tạo
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 phụ thuộc vào các cờ và các tùy chọn khác mà trình thông dịch được gọi.

5. 8. 1. __main__. __spec__¶

Tùy thuộc vào cách khởi tạo

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
217 được đặt phù hợp hoặc thành
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88

Khi Python được bắt đầu với tùy chọn

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
219,
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 được đặt thành thông số mô-đun của mô-đun hoặc gói tương ứng.
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
65 cũng được điền khi mô-đun
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 được tải như một phần của việc thực thi thư mục, tệp zip hoặc mục nhập
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
27 khác

Trong các trường hợp còn lại

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
217 được đặt thành
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88, vì mã được sử dụng để điền vào
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 không tương ứng trực tiếp với mô-đun có thể nhập.

  • lời nhắc tương tác

  • tùy chọn

    module = None
    if spec.loader is not None and hasattr[spec.loader, 'create_module']:
        # It is assumed 'exec_module' will also be defined on the loader.
        module = spec.loader.create_module[spec]
    if module is None:
        module = ModuleType[spec.name]
    # The import-related module attributes get set here:
    _init_module_attrs[spec, module]
    
    if spec.loader is None:
        # unsupported
        raise ImportError
    if spec.origin is None and spec.submodule_search_locations is not None:
        # namespace package
        sys.modules[spec.name] = module
    elif not hasattr[spec.loader, 'exec_module']:
        module = spec.loader.load_module[spec.name]
        # Set __loader__ and __package__ if missing.
    else:
        sys.modules[spec.name] = module
        try:
            spec.loader.exec_module[module]
        except BaseException:
            try:
                del sys.modules[spec.name]
            except KeyError:
                pass
            raise
    return sys.modules[spec.name]
    
    227

  • chạy từ stdin

  • chạy trực tiếp từ tệp mã nguồn hoặc mã byte

Lưu ý rằng

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
217 luôn là
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
88 trong trường hợp cuối cùng, ngay cả khi về mặt kỹ thuật, tệp có thể được nhập trực tiếp dưới dạng mô-đun. Sử dụng công tắc
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
219 nếu muốn có siêu dữ liệu mô-đun hợp lệ trong
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80

Cũng lưu ý rằng ngay cả khi

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 tương ứng với một mô-đun có thể nhập và
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
217 được đặt tương ứng, chúng vẫn được coi là các mô-đun riêng biệt. Điều này là do thực tế là các khối được bảo vệ bởi kiểm tra
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
234 chỉ thực thi khi mô-đun được sử dụng để điền vào không gian tên
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
80 chứ không phải trong quá trình nhập thông thường

5. 9. Tài liệu tham khảo¶

Máy móc nhập khẩu đã phát triển đáng kể kể từ những ngày đầu của Python. Thông số kỹ thuật ban đầu cho các gói vẫn có sẵn để đọc, mặc dù một số chi tiết đã thay đổi kể từ khi viết tài liệu đó

Thông số kỹ thuật ban đầu cho

spam/
    __init__.py
    foo.py
5 là PEP 302, với phần mở rộng tiếp theo là PEP 420

PEP 420 được giới thiệu các gói không gian tên cho Python 3. 3. PEP 420 cũng giới thiệu giao thức

spam/
    __init__.py
    foo.py
83 thay thế cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
06.

PEP 366 mô tả việc bổ sung thuộc tính

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69 để nhập tương đối rõ ràng trong các mô-đun chính

PEP 328 đã giới thiệu nhập khẩu tương đối rõ ràng và tuyệt đối và ban đầu đề xuất

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
67 cho ngữ nghĩa PEP 366 cuối cùng sẽ chỉ định cho
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
69

PEP 338 định nghĩa các mô-đun thực thi dưới dạng tập lệnh

PEP 451 thêm tính năng đóng gói trạng thái nhập theo mô-đun trong các đối tượng cụ thể. Nó cũng giảm tải hầu hết các trách nhiệm soạn sẵn của người bốc xếp trở lại máy móc nhập khẩu. Những thay đổi này cho phép ngừng sử dụng một số API trong hệ thống nhập và cũng bổ sung các phương thức mới cho trình tìm và trình tải

chú thích

1

Xem

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
242

2

Việc triển khai importlib tránh sử dụng trực tiếp giá trị trả về. Thay vào đó, nó lấy đối tượng mô-đun bằng cách tìm tên mô-đun trong

module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8. Tác động gián tiếp của việc này là một mô-đun đã nhập có thể thay thế chính nó trong
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = module
    try:
        spec.loader.exec_module[module]
    except BaseException:
        try:
            del sys.modules[spec.name]
        except KeyError:
            pass
        raise
return sys.modules[spec.name]
8. Đây là hành vi dành riêng cho triển khai không được đảm bảo hoạt động trong các triển khai Python khác

Chủ Đề