Mô-đun tải lại Python từ đường dẫn khác

Tải lại các mô-đun trong Python

Cải thiện bài viết

Lưu bài viết

Thích bài viết

  • Độ khó. Dễ dàng
  • Cập nhật lần cuối. 15 tháng 7 năm 2022

  • Đọc
  • Bàn luận
  • khóa học
  • Luyện tập
  • Băng hình
  • Cải thiện bài viết

    Lưu bài viết

    Reload[] là mô-đun đã nhập trước đó. Nếu bạn đã thay đổi tệp nguồn mô-đun bằng trình chỉnh sửa bên ngoài và muốn kiểm tra phiên bản cập nhật mà không cần thoát khỏi trình thông dịch Python, điều này rất hữu ích. Đối tượng mô-đun là giá trị trả về.

    Tải lại các mô-đun trong Python2. x

    reload[module]

    Đối với trên 2. x và =Python3. 4 trở lên

    import importlib
    importlib.reload[module]

    Làm cách nào để hủy tải mô-đun Python?

    Chưa thể tải một mô-đun Python trong Python

    Ghi chú cá nhân của tôi arrow_drop_up

    Tiết kiệm

    Vui lòng Đăng nhập để nhận xét.

    Một là cung cấp việc triển khai câu lệnh [và do đó, theo cách mở rộng, hàm] trong mã nguồn Python. Điều này cung cấp việc triển khai

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    1 có thể di chuyển tới bất kỳ trình thông dịch Python nào. Điều này cũng cung cấp một cách triển khai dễ hiểu hơn so với cách triển khai bằng ngôn ngữ lập trình khác ngoài Python

    Thứ hai, các thành phần cần triển khai được hiển thị trong gói này, giúp người dùng dễ dàng tạo các đối tượng tùy chỉnh của riêng họ [được gọi chung là ] để tham gia vào quá trình nhập

    Thứ ba, gói chứa các mô-đun hiển thị chức năng bổ sung để quản lý các khía cạnh của gói Python

    • trình bày quyền truy cập vào siêu dữ liệu từ các bản phân phối của bên thứ ba

    • cung cấp các quy trình để truy cập “tài nguyên” không mã từ các gói Python

    Xem thêm

    Tham chiếu ngôn ngữ cho tuyên bố

    đặc điểm kỹ thuật gói

    Thông số kỹ thuật ban đầu của gói. Một số ngữ nghĩa đã thay đổi kể từ khi viết tài liệu này [e. g. chuyển hướng dựa trên

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 trong ]

    Chức năng

    Câu lệnh là đường cú pháp cho chức năng này

    Việc khởi tạo của

    PEP 235

    Import on Case-Insensitive Platforms

    PEP 263

    Defining Python Source Code Encodings

    PEP 302

    New Import Hooks

    PEP 328

    Imports. Multi-Line and Absolute/Relative

    PEP 366

    Main module explicit relative imports

    PEP 420

    Gói không gian tên ẩn

    PEP 451

    A ModuleSpec Type for the Import System

    PEP 488

    Elimination of PYO files

    PEP 489

    Multi-phase extension module initialization

    PEP 552

    Deterministic pycs

    PEP 3120

    Using UTF-8 as the Default Source Encoding

    PEP 3147

    PYC Repository Directories

    Functions

    importlib. __import__[name , globals=None , locals=None , fromlist=[] , level=0]

    An implementation of the built-in function

    Note

    Programmatic importing of modules should use instead of this function

    importlib. import_module[name , package=None]

    Import a module. The name argument specifies what module to import in absolute or relative terms [e. g. either

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    7 or
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    8]. If the name is specified in relative terms, then the package argument must be set to the name of the package which is to act as the anchor for resolving the package name [e. g.
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    9 sẽ nhập khẩu
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    7]

    Hàm hoạt động như một trình bao bọc đơn giản hóa xung quanh. Điều này có nghĩa là tất cả ngữ nghĩa của hàm được lấy từ. Sự khác biệt quan trọng nhất giữa hai chức năng này là trả về gói hoặc mô-đun đã chỉ định [e. g.

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    7], trong khi trả về gói hoặc mô-đun cấp cao nhất [e. g.
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    7]

    Nếu bạn đang nhập động một mô-đun đã được tạo từ khi trình thông dịch bắt đầu thực thi [e. g. , đã tạo tệp nguồn Python], bạn có thể cần phải gọi để hệ thống nhập nhận thấy mô-đun mới

    Đã thay đổi trong phiên bản 3. 3. Các gói gốc được nhập tự động.

    importlib. find_loader[tên , đường dẫn=None]

    Tìm trình tải cho một mô-đun, tùy chọn trong đường dẫn đã chỉ định. Nếu mô-đun ở trong , thì

    import importlib
    
    itertools = importlib.import_module['itertools']
    
    0 được trả về [trừ khi bộ nạp sẽ là
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 hoặc không được đặt, trong trường hợp đó được nâng lên]. Nếu không, một tìm kiếm sử dụng được thực hiện.
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 được trả lại nếu không tìm thấy bộ nạp

    Một tên chấm không có cha mẹ của nó được nhập ngầm vì điều đó yêu cầu tải chúng và điều đó có thể không được mong muốn. Để nhập đúng cách một mô hình con, bạn sẽ cần nhập tất cả các gói mẹ của mô hình con và sử dụng đối số chính xác cho đường dẫn

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

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

    import importlib
    
    itertools = importlib.import_module['itertools']
    
    5 không được đặt, hãy tăng , giống như khi thuộc tính được đặt thành
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0.

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    importlib. invalidate_caches[]

    Vô hiệu hóa bộ đệm nội bộ của công cụ tìm được lưu trữ tại. Nếu một công cụ tìm thực hiện

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    8 thì nó sẽ được gọi để thực hiện việc vô hiệu hóa. Chức năng này nên được gọi nếu bất kỳ mô-đun nào được tạo/cài đặt trong khi chương trình của bạn đang chạy để đảm bảo tất cả những người tìm thấy sẽ nhận thấy sự tồn tại của mô-đun mới

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

    Đã thay đổi trong phiên bản 3. 10. Các gói không gian tên được tạo/cài đặt ở một vị trí khác sau khi cùng một không gian tên đã được nhập sẽ được chú ý.

    importlib. tải lại[mô-đun]

    Tải lại mô-đun đã nhập trước đó. Đối số phải là một đối tượng mô-đun, vì vậy nó phải được nhập thành công trước đó. Điều này hữu ích nếu bạn đã chỉnh sửa tệp nguồn mô-đun bằng trình chỉnh sửa bên ngoài và muốn dùng thử phiên bản mới mà không cần rời khỏi trình thông dịch Python. Giá trị trả về là đối tượng mô-đun [có thể khác nếu việc nhập lại khiến một đối tượng khác được đặt vào]

    Khi nào được thực thi

    • Mã của mô-đun Python được biên dịch lại và mã cấp mô-đun được thực thi lại, xác định một nhóm đối tượng mới được liên kết với các tên trong từ điển của mô-đun bằng cách sử dụng lại đối tượng đã tải mô-đun ban đầu. Chức năng

      import importlib.util
      import sys
      
      # For illustrative purposes.
      name = 'itertools'
      
      if name in sys.modules:
          print[f"{name!r} already in sys.modules"]
      elif [spec := importlib.util.find_spec[name]] is not None:
          # If you chose to perform the actual import ...
          module = importlib.util.module_from_spec[spec]
          sys.modules[name] = module
          spec.loader.exec_module[module]
          print[f"{name!r} has been imported"]
      else:
          print[f"can't find the {name!r} module"]
      
      4 của mô-đun mở rộng không được gọi lần thứ hai

    • Như với tất cả các đối tượng khác trong Python, các đối tượng cũ chỉ được lấy lại sau khi số tham chiếu của chúng giảm xuống 0

    • Tên trong không gian tên mô-đun được cập nhật để trỏ đến bất kỳ đối tượng mới hoặc thay đổi nào

    • Các tham chiếu khác đến các đối tượng cũ [chẳng hạn như các tên bên ngoài mô-đun] không được phục hồi để tham chiếu đến các đối tượng mới và phải được cập nhật trong mỗi không gian tên nơi chúng xuất hiện nếu muốn

    Có một số lưu ý khác

    Khi một mô-đun được tải lại, từ điển của nó [chứa các biến toàn cục của mô-đun] được giữ lại. Định nghĩa lại tên sẽ ghi đè định nghĩa cũ, vì vậy đây thường không phải là vấn đề. Nếu phiên bản mới của mô-đun không xác định tên đã được xác định bởi phiên bản cũ, thì định nghĩa cũ vẫn còn. Tính năng này có thể được sử dụng để tạo lợi thế cho mô-đun nếu nó duy trì một bảng toàn cầu hoặc bộ đệm của các đối tượng — với một câu lệnh, nó có thể kiểm tra sự hiện diện của bảng và bỏ qua quá trình khởi tạo nếu muốn

    try:
        cache
    except NameError:
        cache = {}
    

    Thường không hữu ích lắm khi tải lại các mô-đun tích hợp hoặc được tải động. Tải lại , và các mô-đun chính khác không được khuyến nghị. Trong nhiều trường hợp, các mô-đun mở rộng không được thiết kế để khởi tạo nhiều lần và có thể bị lỗi theo các cách tùy ý khi tải lại

    Nếu một mô-đun nhập các đối tượng từ một mô-đun khác bằng cách sử dụng … …, thì việc gọi mô-đun kia không xác định lại các đối tượng được nhập từ nó — một cách để giải quyết vấn đề này là thực hiện lại câu lệnh

    import importlib.util
    import sys
    
    # For illustrative purposes.
    name = 'itertools'
    
    if name in sys.modules:
        print[f"{name!r} already in sys.modules"]
    elif [spec := importlib.util.find_spec[name]] is not None:
        # If you chose to perform the actual import ...
        module = importlib.util.module_from_spec[spec]
        sys.modules[name] = module
        spec.loader.exec_module[module]
        print[f"{name!r} has been imported"]
    else:
        print[f"can't find the {name!r} module"]
    
    9, một cách khác là sử dụng
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    1 và các tên đủ điều kiện [mô-đun. tên] thay vào đó

    Nếu một mô-đun khởi tạo các thể hiện của một lớp, thì việc tải lại mô-đun định nghĩa lớp đó không ảnh hưởng đến các định nghĩa phương thức của các thể hiện — chúng tiếp tục sử dụng định nghĩa lớp cũ. Điều này cũng đúng với các lớp dẫn xuất

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

    Đã thay đổi trong phiên bản 3. 7. được nâng lên khi mô-đun được tải lại thiếu.

    – Các lớp cơ sở trừu tượng liên quan đến nhập khẩu

    Mã nguồn. Lib/nhậplib/abc. py

    Mô-đun chứa tất cả các lớp cơ sở trừu tượng cốt lõi được sử dụng bởi. Một số lớp con của các lớp cơ sở trừu tượng cốt lõi cũng được cung cấp để giúp triển khai các ABC cốt lõi.

    hệ thống phân cấp ABC

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    

    lớp importlib. abc. Trình tìm kiếm

    Một lớp cơ sở trừu tượng đại diện cho một

    Không dùng nữa kể từ phiên bản 3. 3. Sử dụng hoặc thay thế.

    phương thức trừu tượng find_module[tên đầy đủ , path=None]

    Một phương pháp trừu tượng để tìm một cho mô-đun được chỉ định. Ban đầu được chỉ định trong PEP 302, phương pháp này được dùng để sử dụng trong và trong hệ thống con nhập dựa trên đường dẫn

    Đã thay đổi trong phiên bản 3. 4. Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 khi được gọi thay vì nâng.

    Deprecated since version 3. 10. Triển khai hoặc thay thế.

    lớp importlib. abc. MetaPathFinder

    Một lớp cơ sở trừu tượng đại diện cho một

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

    Đã thay đổi trong phiên bản 3. 10. Không còn là lớp con của.

    find_spec[tên đầy đủ , đường dẫn, target=None]

    Một phương pháp trừu tượng để tìm một cho mô-đun được chỉ định. Nếu đây là lần nhập cấp cao nhất, đường dẫn sẽ là

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0. Mặt khác, đây là tìm kiếm gói con hoặc mô-đun và đường dẫn sẽ là giá trị của gói mẹ. Nếu không thể tìm thấy một thông số kỹ thuật, thì trả về
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0. Khi được chuyển vào,
    import importlib.machinery
    import sys
    
    # For illustrative purposes only.
    SpamMetaPathFinder = importlib.machinery.PathFinder
    SpamPathEntryFinder = importlib.machinery.FileFinder
    loader_details = [importlib.machinery.SourceFileLoader,
                      importlib.machinery.SOURCE_SUFFIXES]
    
    # Setting up a meta path finder.
    # Make sure to put the finder in the proper location in the list in terms of
    # priority.
    sys.meta_path.append[SpamMetaPathFinder]
    
    # Setting up a path entry finder.
    # Make sure to put the path hook in the proper location in the list in terms
    # of priority.
    sys.path_hooks.append[SpamPathEntryFinder.path_hook[loader_details]]
    
    0 là một đối tượng mô-đun mà công cụ tìm có thể sử dụng để đưa ra dự đoán chính xác hơn về thông số kỹ thuật sẽ trả về. có thể hữu ích cho việc triển khai bê tông
    import importlib.machinery
    import sys
    
    # For illustrative purposes only.
    SpamMetaPathFinder = importlib.machinery.PathFinder
    SpamPathEntryFinder = importlib.machinery.FileFinder
    loader_details = [importlib.machinery.SourceFileLoader,
                      importlib.machinery.SOURCE_SUFFIXES]
    
    # Setting up a meta path finder.
    # Make sure to put the finder in the proper location in the list in terms of
    # priority.
    sys.meta_path.append[SpamMetaPathFinder]
    
    # Setting up a path entry finder.
    # Make sure to put the path hook in the proper location in the list in terms
    # of priority.
    sys.path_hooks.append[SpamPathEntryFinder.path_hook[loader_details]]
    
    2

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

    find_module[tên đầy đủ , đường dẫn]

    Một phương pháp cũ để tìm một cho mô-đun được chỉ định. Nếu đây là lần nhập cấp cao nhất, đường dẫn sẽ là

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0. Mặt khác, đây là tìm kiếm gói con hoặc mô-đun và đường dẫn sẽ là giá trị của gói mẹ. Nếu không tìm thấy bộ nạp, thì trả lại
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0

    Nếu được xác định, chức năng tương thích ngược sẽ được cung cấp

    Đã thay đổi trong phiên bản 3. 4. Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 khi được gọi thay vì nâng. Có thể sử dụng để cung cấp chức năng.

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    invalidate_caches[]

    Một phương thức tùy chọn, khi được gọi, sẽ làm mất hiệu lực bất kỳ bộ đệm nội bộ nào được sử dụng bởi công cụ tìm. Được sử dụng khi làm mất hiệu lực bộ đệm của tất cả các công cụ tìm trên

    Đã thay đổi trong phiên bản 3. 4. Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 khi được gọi thay vì
    import importlib.util
    import sys
    
    def import_module[name, package=None]:
        """An approximate implementation of import."""
        absolute_name = importlib.util.resolve_name[name, package]
        try:
            return sys.modules[absolute_name]
        except KeyError:
            pass
    
        path = None
        if '.' in absolute_name:
            parent_name, _, child_name = absolute_name.rpartition['.']
            parent_module = import_module[parent_name]
            path = parent_module.__spec__.submodule_search_locations
        for finder in sys.meta_path:
            spec = finder.find_spec[absolute_name, path]
            if spec is not None:
                break
        else:
            msg = f'No module named {absolute_name!r}'
            raise ModuleNotFoundError[msg, name=absolute_name]
        module = importlib.util.module_from_spec[spec]
        sys.modules[absolute_name] = module
        spec.loader.exec_module[module]
        if path is not None:
            setattr[parent_module, child_name, module]
        return module
    
    4.

    lớp importlib. abc. Trình tìm đường dẫn

    Một lớp cơ sở trừu tượng đại diện cho một. Mặc dù nó có một số điểm tương đồng với , nhưng

    >>> import importlib.util
    >>> import sys
    >>> def lazy_import[name]:
    ..     spec = importlib.util.find_spec[name]
    ..     loader = importlib.util.LazyLoader[spec.loader]
    ..     spec.loader = loader
    ..     module = importlib.util.module_from_spec[spec]
    ..     sys.modules[name] = module
    ..     loader.exec_module[module]
    ..     return module
    ...
    >>> lazy_typing = lazy_import["typing"]
    >>> #lazy_typing is a real module object,
    >>> #but it is not loaded in memory yet.
    >>> lazy_typing.TYPE_CHECKING
    False
    
    0 chỉ được sử dụng trong hệ thống con nhập dựa trên đường dẫn được cung cấp bởi

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

    Đã thay đổi trong phiên bản 3. 10. Không còn là lớp con của.

    find_spec[tên đầy đủ , mục tiêu=None]

    Một phương pháp trừu tượng để tìm một cho mô-đun được chỉ định. Công cụ tìm sẽ chỉ tìm kiếm mô-đun trong phạm vi mà nó được gán. Nếu không thể tìm thấy một thông số kỹ thuật, thì trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0. Khi được chuyển vào,
    import importlib.machinery
    import sys
    
    # For illustrative purposes only.
    SpamMetaPathFinder = importlib.machinery.PathFinder
    SpamPathEntryFinder = importlib.machinery.FileFinder
    loader_details = [importlib.machinery.SourceFileLoader,
                      importlib.machinery.SOURCE_SUFFIXES]
    
    # Setting up a meta path finder.
    # Make sure to put the finder in the proper location in the list in terms of
    # priority.
    sys.meta_path.append[SpamMetaPathFinder]
    
    # Setting up a path entry finder.
    # Make sure to put the path hook in the proper location in the list in terms
    # of priority.
    sys.path_hooks.append[SpamPathEntryFinder.path_hook[loader_details]]
    
    0 là một đối tượng mô-đun mà công cụ tìm có thể sử dụng để đưa ra dự đoán chính xác hơn về thông số kỹ thuật sẽ trả về. có thể hữu ích cho việc triển khai bê tông
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    02

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

    find_loader[tên đầy đủ]

    Một phương pháp cũ để tìm một cho mô-đun được chỉ định. Trả về 2-tuple của

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    03 trong đó
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    04 là một chuỗi các vị trí hệ thống tệp đóng góp vào một phần của gói không gian tên. Trình tải có thể là
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 trong khi chỉ định
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    04 để biểu thị sự đóng góp của các vị trí hệ thống tệp vào gói không gian tên. Một danh sách trống có thể được sử dụng cho
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    04 để biểu thị trình tải không phải là một phần của gói không gian tên. Nếu
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    08 là
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 và
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    04 là danh sách trống thì không tìm thấy trình tải hoặc vị trí nào cho gói không gian tên [i. e. không tìm thấy bất cứ thứ gì cho mô-đun]

    Nếu được xác định thì chức năng tương thích ngược được cung cấp

    Đã thay đổi trong phiên bản 3. 4. Trả về

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    12 thay vì tăng. Sử dụng khi có sẵn để cung cấp chức năng.

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    find_module[tên đầy đủ]

    Việc triển khai cụ thể tương đương với

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    17

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    invalidate_caches[]

    Một phương thức tùy chọn, khi được gọi, sẽ làm mất hiệu lực bất kỳ bộ đệm nội bộ nào được sử dụng bởi công cụ tìm. Được sử dụng khi vô hiệu hóa bộ đệm của tất cả các công cụ tìm được lưu trong bộ đệm

    lớp importlib. abc. Trình tải

    Một lớp cơ sở trừu tượng cho một. Xem PEP 302 để biết định nghĩa chính xác cho bộ nạp

    Các trình tải muốn hỗ trợ đọc tài nguyên nên triển khai phương pháp

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    20 như được chỉ định bởi

    Đã thay đổi trong phiên bản 3. 7. Giới thiệu phương pháp

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    20 tùy chọn.

    create_module[spec]

    Phương thức trả về đối tượng mô-đun để sử dụng khi nhập mô-đun. Phương thức này có thể trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0, cho biết rằng ngữ nghĩa tạo mô-đun mặc định sẽ diễn ra

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

    Đã thay đổi trong phiên bản 3. 6. Phương thức này không còn tùy chọn khi được xác định.

    exec_module[module]

    An abstract method that executes the module in its own namespace when a module is imported or reloaded. Mô-đun đã được khởi tạo khi được gọi. Khi phương pháp này tồn tại, phải được xác định

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

    Đã thay đổi trong phiên bản 3. 6. cũng phải được xác định.

    load_module[tên đầy đủ]

    Một phương pháp cũ để tải một mô-đun. Nếu không thể tải mô-đun, nó sẽ được nâng lên, nếu không, mô-đun đã tải sẽ được trả về

    Nếu mô-đun được yêu cầu đã tồn tại trong , mô-đun đó sẽ được sử dụng và tải lại. Mặt khác, trình tải sẽ tạo một mô-đun mới và chèn nó vào trước khi bất kỳ quá trình tải nào bắt đầu, để ngăn chặn việc nhập đệ quy. If the loader inserted a module and the load fails, it must be removed by the loader from ; modules already in before the loader began execution should be left alone [see ]

    Trình tải phải đặt một số thuộc tính trên mô-đun [lưu ý rằng một số thuộc tính này có thể thay đổi khi mô-đun được tải lại]

    • Tên đầy đủ của mô-đun. Đó là

      object
       +-- Finder [deprecated]
       +-- MetaPathFinder
       +-- PathEntryFinder
       +-- Loader
            +-- ResourceLoader --------+
            +-- InspectLoader          |
                 +-- ExecutionLoader --+
                                       +-- FileLoader
                                       +-- SourceLoader
      
      35 cho một mô-đun được thực thi

    • Vị trí được sử dụng để tải mô-đun. Ví dụ: đối với các mô-đun được tải từ một. tệp py đây là tên tệp. Nó không được đặt trên tất cả các mô-đun [e. g. mô-đun tích hợp]

    • Tên tệp của phiên bản đã biên dịch của mã mô-đun. Nó không được đặt trên tất cả các mô-đun [e. g. mô-đun tích hợp]

    • Danh sách các vị trí nơi các mô hình con của gói sẽ được tìm thấy. Hầu hết thời gian đây là một thư mục duy nhất. Hệ thống nhập chuyển thuộc tính này tới

      object
       +-- Finder [deprecated]
       +-- MetaPathFinder
       +-- PathEntryFinder
       +-- Loader
            +-- ResourceLoader --------+
            +-- InspectLoader          |
                 +-- ExecutionLoader --+
                                       +-- FileLoader
                                       +-- SourceLoader
      
      4 và tới công cụ tìm theo cách tương tự nhưng chỉ đối với gói hàng. Nó không được đặt trên các mô-đun không phải gói để nó có thể được sử dụng làm chỉ báo rằng mô-đun là một gói

    • Tên đủ điều kiện của gói chứa mô-đun [hoặc chuỗi trống cho mô-đun cấp cao nhất]. Nếu mô-đun là một gói thì điều này giống như

    • Được sử dụng để tải mô-đun

    Khi có sẵn thì chức năng tương thích ngược được cung cấp

    Đã thay đổi trong phiên bản 3. 4. Tăng khi được gọi thay vì. Chức năng được cung cấp khi có sẵn.

    Không dùng nữa kể từ phiên bản 3. 4. API được đề xuất để tải mô-đun là [và ]. Trình tải nên thực hiện nó thay vì. Máy móc nhập khẩu lo tất cả các trách nhiệm khác khi được thực hiện.

    module_repr[module]

    Một phương thức kế thừa mà khi được triển khai sẽ tính toán và trả về biểu diễn của mô-đun đã cho, dưới dạng một chuỗi. Mặc định của loại mô-đun

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    53 sẽ sử dụng kết quả của phương pháp này khi thích hợp

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

    Đã thay đổi trong phiên bản 3. 4. Được tạo tùy chọn thay vì một phương thức trừu tượng.

    Không dùng nữa kể từ phiên bản 3. 4. Máy móc nhập khẩu giờ đây sẽ tự động xử lý việc này.

    lớp importlib. abc. Trình tải tài nguyên

    Lớp cơ sở trừu tượng dành cho lớp triển khai giao thức PEP 302 tùy chọn để tải các tài nguyên tùy ý từ back-end lưu trữ

    Không dùng nữa kể từ phiên bản 3. 7. ABC này không được dùng nữa để hỗ trợ tải tài nguyên thông qua.

    phương pháp trừu tượng get_data[đường dẫn]

    Một phương thức trừu tượng để trả về các byte cho dữ liệu nằm ở đường dẫn. Các trình tải có back-end lưu trữ giống như tệp cho phép lưu trữ dữ liệu tùy ý có thể triển khai phương pháp trừu tượng này để cấp quyền truy cập trực tiếp vào dữ liệu được lưu trữ. sẽ được nâng lên nếu không tìm thấy đường dẫn. Đường dẫn dự kiến ​​sẽ được xây dựng bằng thuộc tính của mô-đun hoặc một mục từ gói

    Đã thay đổi trong phiên bản 3. 4. Tăng thay vì.

    lớp importlib. abc. Kiểm tra bộ nạp

    Một lớp cơ sở trừu tượng để triển khai giao thức PEP 302 tùy chọn cho các bộ tải kiểm tra các mô-đun

    get_code[tên đầy đủ]

    Trả về đối tượng mã cho một mô-đun hoặc

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 nếu mô-đun không có đối tượng mã [như trường hợp, chẳng hạn như đối với mô-đun tích hợp sẵn]. Nâng cao nếu trình tải không thể tìm thấy mô-đun được yêu cầu

    Note

    Mặc dù phương thức này có cách triển khai mặc định, nhưng bạn nên ghi đè phương thức này nếu có thể để đảm bảo hiệu suất

    Đã thay đổi trong phiên bản 3. 4. Không còn trừu tượng nữa và cung cấp triển khai cụ thể.

    phương thức trừu tượng get_source[tên đầy đủ]

    An abstract method to return the source of a module. Nó được trả về dưới dạng một chuỗi văn bản bằng cách sử dụng , dịch tất cả các dấu phân cách dòng được nhận dạng thành

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    62 ký tự. Trả về
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 nếu không có nguồn [e. g. một mô-đun tích hợp]. Tăng nếu trình tải không thể tìm thấy mô-đun được chỉ định

    Đã thay đổi trong phiên bản 3. 4. Tăng thay vì.

    is_package[tên đầy đủ]

    Một phương thức tùy chọn để trả về giá trị thực nếu mô-đun là một gói, nếu không thì trả về giá trị sai. được nâng lên nếu không thể tìm thấy mô-đun

    Đã thay đổi trong phiên bản 3. 4. Tăng thay vì.

    tĩnh source_to_code[dữ liệu , path='']

    Tạo một đối tượng mã từ nguồn Python

    Đối số dữ liệu có thể là bất kỳ thứ gì mà hàm hỗ trợ [i. e. chuỗi hoặc byte]. Đối số đường dẫn phải là “đường dẫn” đến nguồn gốc của mã nguồn, có thể là một khái niệm trừu tượng [e. g. vị trí trong tệp zip]

    Với đối tượng mã tiếp theo, người ta có thể thực thi nó trong một mô-đun bằng cách chạy

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    71

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

    Đã thay đổi trong phiên bản 3. 5. Tạo phương thức tĩnh.

    exec_module[module]

    Tiến hành làm

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

    load_module[tên đầy đủ]

    Tiến hành làm

    Không dùng nữa kể từ phiên bản 3. 4. sử dụng thay thế.

    lớp importlib. abc. Trình tải thực thi

    Một lớp cơ sở trừu tượng kế thừa từ đó, khi được triển khai, sẽ giúp một mô-đun được thực thi dưới dạng tập lệnh. ABC đại diện cho một giao thức PEP 302 tùy chọn

    phương thức trừu tượng get_filename[tên đầy đủ]

    Một phương thức trừu tượng để trả về giá trị của mô-đun đã chỉ định. Nếu không có đường dẫn, được nâng lên

    Nếu mã nguồn có sẵn, thì phương thức sẽ trả về đường dẫn đến tệp nguồn, bất kể mã byte có được sử dụng để tải mô-đun hay không

    Đã thay đổi trong phiên bản 3. 4. Tăng thay vì.

    lớp importlib. abc. Trình tải tệp[tên đầy đủ , đường dẫn]

    Một lớp cơ sở trừu tượng kế thừa từ và, cung cấp các triển khai cụ thể của và

    Đối số tên đầy đủ là tên được giải quyết đầy đủ của mô-đun mà trình tải sẽ xử lý. Đối số đường dẫn là đường dẫn đến tệp cho mô-đun

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

    Tên

    Tên của mô-đun mà trình tải có thể xử lý

    đường dẫn

    Đường dẫn đến tệp của mô-đun

    load_module[tên đầy đủ]

    Gọi số tiền của

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    50

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    phương thức trừu tượng get_filename[tên đầy đủ]

    trả lại

    phương pháp trừu tượng get_data[đường dẫn]

    Đọc đường dẫn dưới dạng tệp nhị phân và trả về các byte từ nó

    lớp importlib. abc. Trình tải nguồn

    Lớp cơ sở trừu tượng để triển khai tải tệp nguồn [và mã byte tùy chọn]. Lớp kế thừa từ cả hai và , yêu cầu thực hiện

    • Chỉ nên trả lại đường dẫn đến tệp nguồn;

    Các phương thức trừu tượng được định nghĩa bởi lớp này là thêm hỗ trợ tệp mã byte tùy chọn. Việc không triển khai các phương thức tùy chọn này [hoặc khiến chúng tăng lên] khiến trình tải chỉ hoạt động với mã nguồn. Việc triển khai các phương thức cho phép trình tải hoạt động với các tệp mã nguồn và mã byte; . Các tệp mã byte là một tối ưu hóa để tăng tốc độ tải bằng cách loại bỏ bước phân tích cú pháp của trình biên dịch Python và do đó không có API dành riêng cho mã byte nào bị lộ

    path_stats[đường dẫn]

    Phương thức trừu tượng tùy chọn trả về siêu dữ liệu có chứa về đường dẫn đã chỉ định. Các khóa từ điển được hỗ trợ là

    • object
       +-- Finder [deprecated]
       +-- MetaPathFinder
       +-- PathEntryFinder
       +-- Loader
            +-- ResourceLoader --------+
            +-- InspectLoader          |
                 +-- ExecutionLoader --+
                                       +-- FileLoader
                                       +-- SourceLoader
      
      93 [bắt buộc]. một số nguyên hoặc số dấu phẩy động biểu thị thời gian sửa đổi của mã nguồn;

    • object
       +-- Finder [deprecated]
       +-- MetaPathFinder
       +-- PathEntryFinder
       +-- Loader
            +-- ResourceLoader --------+
            +-- InspectLoader          |
                 +-- ExecutionLoader --+
                                       +-- FileLoader
                                       +-- SourceLoader
      
      94 [tùy chọn]. kích thước tính bằng byte của mã nguồn

    Bất kỳ khóa nào khác trong từ điển đều bị bỏ qua, để cho phép mở rộng trong tương lai. Nếu đường dẫn không thể được xử lý, được nâng lên

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

    Đã thay đổi trong phiên bản 3. 4. Tăng thay vì.

    path_mtime[path]

    Phương thức trừu tượng tùy chọn trả về thời gian sửa đổi cho đường dẫn đã chỉ định

    Không dùng nữa kể từ phiên bản 3. 3. Phương pháp này không được dùng nữa vì. Bạn không cần phải triển khai nó, nhưng nó vẫn có sẵn cho mục đích tương thích. Tăng nếu đường dẫn không thể được xử lý.

    Đã thay đổi trong phiên bản 3. 4. Tăng thay vì.

    set_data[đường dẫn , dữ liệu]

    Phương thức trừu tượng tùy chọn ghi các byte đã chỉ định vào đường dẫn tệp. Bất kỳ thư mục trung gian nào không tồn tại sẽ được tạo tự động

    Khi ghi vào đường dẫn không thành công vì đường dẫn chỉ đọc [/], không truyền bá ngoại lệ

    Đã thay đổi trong phiên bản 3. 4. No longer raises when called.

    get_code[tên đầy đủ]

    Triển khai cụ thể

    exec_module[module]

    Triển khai cụ thể

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

    load_module[tên đầy đủ]

    Triển khai cụ thể

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    get_source[tên đầy đủ]

    Triển khai cụ thể

    is_package[tên đầy đủ]

    Triển khai cụ thể. Một mô-đun được xác định là một gói nếu đường dẫn tệp của nó [như được cung cấp bởi ] là một tệp có tên

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    12 khi phần mở rộng tệp bị xóa và tên mô-đun không kết thúc bằng
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    12

    – Trình nhập và móc đường dẫn

    Mã nguồn. Lib/importlib/máy móc. py

    Mô-đun này chứa các đối tượng khác nhau giúp tìm và tải các mô-đun

    importlib. máy móc. SOURCE_SUFFIXES

    Danh sách các chuỗi đại diện cho các hậu tố tệp được nhận dạng cho các mô-đun nguồn

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

    importlib. máy móc. DEBUG_BYTECODE_SUFFIXES

    Danh sách các chuỗi đại diện cho hậu tố tệp cho các mô-đun mã byte không được tối ưu hóa

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

    Không dùng nữa kể từ phiên bản 3. 5. Sử dụng thay thế.

    importlib. máy móc. OPTIMIZED_BYTECODE_SUFFIXES

    Danh sách các chuỗi đại diện cho hậu tố tệp cho các mô-đun mã byte được tối ưu hóa

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

    Không dùng nữa kể từ phiên bản 3. 5. Sử dụng thay thế.

    importlib. máy móc. BYTECODE_SUFFIXES

    Danh sách các chuỗi đại diện cho các hậu tố tệp được nhận dạng cho các mô-đun mã byte [bao gồm cả dấu chấm ở đầu]

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

    Đã thay đổi trong phiên bản 3. 5. Giá trị không còn phụ thuộc vào

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    18.

    importlib. máy móc. EXTENSION_SUFFIXES

    Danh sách các chuỗi đại diện cho các hậu tố tệp được công nhận cho các mô-đun mở rộng

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

    importlib. máy móc. all_suffixes[]

    Trả về một danh sách kết hợp các chuỗi đại diện cho tất cả các hậu tố tệp cho các mô-đun được máy móc nhập tiêu chuẩn nhận dạng. Đây là một trình trợ giúp cho mã chỉ cần biết liệu đường dẫn hệ thống tệp có khả năng đề cập đến một mô-đun mà không cần bất kỳ chi tiết nào về loại mô-đun hay không [ví dụ:]

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

    lớp importlib. máy móc. Trình nhập nội bộ

    Một cho các mô-đun tích hợp. Tất cả các mô-đun tích hợp đã biết được liệt kê trong. Lớp này thực hiện và ABC

    Chỉ các phương thức lớp được lớp này định nghĩa để giảm bớt nhu cầu khởi tạo

    Đã thay đổi trong phiên bản 3. 5. Là một phần của PEP 489, trình nhập khẩu dựng sẵn hiện triển khai

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    23 và
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    72

    lớp importlib. máy móc. Trình nhập đông lạnh

    Một cho các mô-đun bị đóng băng. Lớp này thực hiện và ABC

    Chỉ các phương thức lớp được lớp này định nghĩa để giảm bớt nhu cầu khởi tạo

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

    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    26 và
    object
     +-- Finder [deprecated]
     +-- MetaPathFinder
     +-- PathEntryFinder
     +-- Loader
          +-- ResourceLoader --------+
          +-- InspectLoader          |
               +-- ExecutionLoader --+
                                     +-- FileLoader
                                     +-- SourceLoader
    
    24.

    lớp importlib. máy móc. WindowsRegistryFinder

    cho các mô-đun được khai báo trong sổ đăng ký Windows. Lớp này thực hiện ABC

    Chỉ các phương thức lớp được lớp này định nghĩa để giảm bớt nhu cầu khởi tạo

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

    Không dùng nữa kể từ phiên bản 3. 6. Thay vào đó, hãy sử dụng cấu hình. Các phiên bản Python trong tương lai có thể không bật công cụ tìm này theo mặc định.

    lớp importlib. máy móc. Trình tìm đường

    Một thuộc tính cho và gói

    >>> import importlib.util
    >>> import sys
    >>> def lazy_import[name]:
    ..     spec = importlib.util.find_spec[name]
    ..     loader = importlib.util.LazyLoader[spec.loader]
    ..     spec.loader = loader
    ..     module = importlib.util.module_from_spec[spec]
    ..     sys.modules[name] = module
    ..     loader.exec_module[module]
    ..     return module
    ...
    >>> lazy_typing = lazy_import["typing"]
    >>> #lazy_typing is a real module object,
    >>> #but it is not loaded in memory yet.
    >>> lazy_typing.TYPE_CHECKING
    False
    
    8. Lớp này thực hiện ABC

    Chỉ các phương thức lớp được lớp này định nghĩa để giảm bớt nhu cầu khởi tạo

    phương pháp phân loại find_spec[tên đầy đủ , path=None, target=None]

    Phương thức lớp cố gắng tìm một cho mô-đun được chỉ định bởi tên đầy đủ trên hoặc, nếu được xác định, trên đường dẫn. Đối với mỗi mục nhập đường dẫn được tìm kiếm, được kiểm tra. Nếu một đối tượng không sai được tìm thấy thì nó được sử dụng làm đối tượng để tìm mô-đun đang được tìm kiếm. Nếu không tìm thấy mục nào trong , thì sẽ tìm kiếm công cụ tìm mục nhập đường dẫn và nếu tìm thấy, sẽ được lưu vào cùng với việc được truy vấn về mô-đun. If no finder is ever found then

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 is both stored in the cache and returned

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

    Đã thay đổi trong phiên bản 3. 5. Nếu thư mục làm việc hiện tại – được biểu thị bằng một chuỗi trống – không còn hiệu lực thì hàm trả về ___4_______0 nhưng không có giá trị nào được lưu trong bộ nhớ đệm.

    phương thức lớp find_module[tên đầy đủ , path=None]

    Một trình bao bọc di sản xung quanh

    Không dùng nữa kể từ phiên bản 3. 4. Sử dụng thay thế.

    classmethod invalidate_caches[]

    Gọi tất cả các công cụ tìm được lưu trữ trong đó xác định phương thức. Nếu không, các mục nhập được đặt thành

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 sẽ bị xóa

    Đã thay đổi trong phiên bản 3. 7. Các mục nhập của

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 trong bị xóa.

    Đã thay đổi trong phiên bản 3. 4. Gọi các đối tượng trong thư mục làm việc hiện tại cho

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    51 [i. e. chuỗi rỗng].

    lớp importlib. máy móc. Trình tìm tệp[đường dẫn , *loader_details]

    Một triển khai cụ thể trong đó bộ nhớ cache là kết quả từ hệ thống tệp

    Đối số đường dẫn là thư mục mà công cụ tìm chịu trách nhiệm tìm kiếm

    Đối số loader_details là một số lượng khác nhau của các bộ 2 mục, mỗi bộ chứa một trình tải và một chuỗi các hậu tố tệp mà trình tải nhận ra. Các trình tải dự kiến ​​​​là các hàm có thể gọi được chấp nhận hai đối số là tên của mô-đun và đường dẫn đến tệp được tìm thấy

    Công cụ tìm sẽ lưu trữ nội dung thư mục khi cần thiết, thực hiện lệnh gọi stat cho từng tìm kiếm mô-đun để xác minh bộ đệm không bị lỗi thời. Vì độ ổn định của bộ nhớ cache phụ thuộc vào mức độ chi tiết của thông tin trạng thái hệ điều hành của hệ thống tệp, nên có một điều kiện chạy đua tiềm ẩn là tìm kiếm một mô-đun, tạo một tệp mới, sau đó tìm kiếm mô-đun mà tệp mới đại diện. Nếu các hoạt động diễn ra đủ nhanh để phù hợp với mức độ chi tiết của lệnh gọi stat, thì quá trình tìm kiếm mô-đun sẽ không thành công. Để ngăn điều này xảy ra, khi bạn tạo một mô-đun động, hãy nhớ gọi

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

    đường dẫn

    Đường dẫn mà công cụ tìm sẽ tìm kiếm trong

    find_spec[tên đầy đủ , mục tiêu=None]

    Cố gắng tìm thông số kỹ thuật để xử lý tên đầy đủ trong

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

    find_loader[tên đầy đủ]

    Cố gắng tìm trình tải để xử lý tên đầy đủ trong

    Không dùng nữa kể từ phiên bản 3. 10. Sử dụng thay thế.

    invalidate_caches[]

    Xóa bộ nhớ cache nội bộ

    classmethod path_hook[*loader_details]

    Một phương thức lớp trả về một bao đóng để sử dụng trên. Một thể hiện của được trả về bởi bao đóng bằng cách sử dụng đối số đường dẫn được cung cấp trực tiếp cho bao đóng và loader_details gián tiếp

    Nếu đối số để đóng không phải là một thư mục hiện có, được nâng lên

    lớp importlib. máy móc. SourceFileLoader[tên đầy đủ , đường dẫn]

    Việc triển khai cụ thể bằng cách phân lớp và cung cấp một số triển khai cụ thể của các phương thức khác

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

    Tên

    Tên của mô-đun mà trình tải này sẽ xử lý

    đường dẫn

    Đường dẫn đến tệp nguồn

    is_package[tên đầy đủ]

    Trả lại

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    62 nếu có vẻ như là một gói hàng

    path_stats[đường dẫn]

    Triển khai cụ thể

    set_data[đường dẫn , dữ liệu]

    Triển khai cụ thể

    load_module[tên=Không có]

    Việc triển khai cụ thể nơi chỉ định tên của mô-đun sẽ tải là tùy chọn

    Không dùng nữa kể từ phiên bản 3. 6. Sử dụng thay thế.

    lớp importlib. máy móc. SourcelessFileLoader[tên đầy đủ , đường dẫn]

    Việc triển khai cụ thể có thể nhập các tệp mã byte [i. e. không có tệp mã nguồn nào tồn tại]

    Xin lưu ý rằng việc sử dụng trực tiếp các tệp mã byte [và do đó không phải tệp mã nguồn] sẽ ngăn các mô-đun của bạn không thể sử dụng được bởi tất cả các triển khai Python hoặc các phiên bản Python mới làm thay đổi định dạng mã byte

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

    Tên

    Tên của mô-đun mà trình tải sẽ xử lý

    đường dẫn

    Đường dẫn đến tệp mã byte

    is_package[tên đầy đủ]

    Xác định xem mô-đun có phải là một gói dựa trên

    get_code[tên đầy đủ]

    Trả về đối tượng mã được tạo từ

    get_source[tên đầy đủ]

    Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 vì các tệp mã byte không có nguồn khi trình tải này được sử dụng

    load_module[tên=Không có]

    Việc triển khai cụ thể nơi chỉ định tên của mô-đun sẽ tải là tùy chọn

    Không dùng nữa kể từ phiên bản 3. 6. Sử dụng thay thế.

    lớp importlib. máy móc. ExtensionFileLoader[tên đầy đủ , đường dẫn]

    Triển khai cụ thể cho các mô-đun mở rộng

    Đối số tên đầy đủ chỉ định tên của mô-đun mà trình tải sẽ hỗ trợ. Đối số đường dẫn là đường dẫn đến tệp của mô-đun mở rộng

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

    Tên

    Tên của mô-đun mà trình tải hỗ trợ

    đường dẫn

    Đường dẫn đến mô-đun mở rộng

    create_module[spec]

    Tạo đối tượng mô-đun từ thông số kỹ thuật đã cho theo PEP 489

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

    exec_module[module]

    Khởi tạo đối tượng mô-đun đã cho theo PEP 489

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

    is_package[tên đầy đủ]

    Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    62 nếu đường dẫn tệp trỏ đến mô-đun
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    12 của gói dựa trên

    get_code[tên đầy đủ]

    Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 vì các mô-đun mở rộng thiếu đối tượng mã

    get_source[tên đầy đủ]

    Trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 vì các mô-đun mở rộng không có mã nguồn

    get_filename[tên đầy đủ]

    trả lại

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

    NamespaceLoader[tên, đường dẫn, path_finder].

    Một triển khai cụ thể cho các gói không gian tên. Đây là bí danh cho một lớp riêng tư và chỉ được công khai để xem xét nội quan thuộc tính

    import importlib
    
    itertools = importlib.import_module['itertools']
    
    5 trên các gói không gian tên

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    

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

    lớp importlib. máy móc. ModuleSpec[tên , trình tải, *, origin=None, loader_state=None, is_package=None]

    Thông số kỹ thuật cho trạng thái liên quan đến hệ thống nhập của mô-đun. Điều này thường được hiển thị dưới dạng thuộc tính của mô-đun. Trong các mô tả bên dưới, các tên trong ngoặc đơn cung cấp thuộc tính tương ứng có sẵn trực tiếp trên đối tượng mô-đun, e. g.

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    85. Tuy nhiên, lưu ý rằng mặc dù các giá trị thường tương đương nhưng chúng có thể khác nhau do không có sự đồng bộ hóa giữa hai đối tượng. Ví dụ: có thể cập nhật mô-đun trong thời gian chạy và điều này sẽ không được tự động phản ánh trong
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    87 của mô-đun và ngược lại

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

    Tên

    []

    Tên đầy đủ của mô-đun. Phải luôn đặt thuộc tính này thành một chuỗi không trống

    người bốc vác

    []

    Được sử dụng để tải mô-đun. Phải luôn đặt thuộc tính này

    gốc

    []

    Vị trí nên sử dụng để tải mô-đun. Ví dụ: đối với các mô-đun được tải từ một. tệp py đây là tên tệp. Phải luôn đặt thuộc tính này thành một giá trị có ý nghĩa để sử dụng. Trong trường hợp không phổ biến là không có [như đối với các gói không gian tên], nó nên được đặt thành

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0

    submodule_search_locations

    []

    Danh sách các vị trí nơi các mô hình con của gói sẽ được tìm thấy. Hầu hết thời gian đây là một thư mục duy nhất. Nên đặt thuộc tính này thành một danh sách, thậm chí là một danh sách trống, để cho hệ thống nhập biết rằng mô-đun là một gói. Nó phải được đặt thành

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 cho các mô-đun không đóng gói. Nó được đặt tự động sau đó thành một đối tượng đặc biệt cho các gói không gian tên

    loader_state

    Có thể đặt thuộc tính này thành một đối tượng chứa dữ liệu bổ sung, dành riêng cho mô-đun để sử dụng khi tải mô-đun. Nếu không, nó nên được đặt thành

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0

    lưu vào bộ nhớ cache

    []

    Tên tệp của phiên bản đã biên dịch của mã mô-đun. Phải luôn đặt thuộc tính này nhưng nó có thể là

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 đối với các mô-đun không cần lưu trữ mã đã biên dịch

    cha mẹ

    []

    [Chỉ đọc] Tên đủ điều kiện của gói chứa mô-đun [hoặc chuỗi trống cho mô-đun cấp cao nhất]. Nếu mô-đun là một gói thì điều này giống như

    has_location ______4_______62 nếu thông số kỹ thuật đề cập đến một vị trí có thể tải,

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    01 ngược lại. Giá trị này tác động đến cách diễn giải và cách mô-đun được phổ biến

    – Mã tiện ích cho nhà nhập khẩu

    Mã nguồn. Lib/importlib/tận dụng. py

    Mô-đun này chứa các đối tượng khác nhau giúp xây dựng một

    importlib. sử dụng. MAGIC_NUMBER

    Các byte đại diện cho số phiên bản mã byte. Nếu bạn cần trợ giúp về việc tải/ghi mã byte thì hãy xem xét

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

    importlib. sử dụng. cache_from_source[đường dẫn , debug_override=None, *, optimization=None]

    Trả lại đường dẫn PEP 3147/PEP 488 cho tệp được biên dịch theo byte được liên kết với đường dẫn nguồn. Ví dụ: nếu đường dẫn là

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    06 thì giá trị trả về sẽ là
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    07 cho Python 3. 2. Chuỗi
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    08 đến từ thẻ ma thuật hiện tại [xem
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    09; nếu
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    10 không được xác định thì sẽ được nâng lên]

    Tham số tối ưu hóa được sử dụng để chỉ định mức độ tối ưu hóa của tệp mã byte. Chuỗi rỗng biểu thị không có tối ưu hóa, vì vậy,

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    06 với tối ưu hóa là
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    51 sẽ dẫn đến đường dẫn mã byte là
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    07.
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 khiến mức độ tối ưu hóa của thông dịch viên được sử dụng. Bất kỳ biểu diễn chuỗi nào của giá trị khác đều được sử dụng, do đó,
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    06 với sự tối ưu hóa của
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    17 sẽ dẫn đến đường dẫn mã byte của
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    18. Biểu diễn chuỗi tối ưu hóa chỉ có thể là chữ và số, nếu không thì được nâng lên

    Tham số debug_override không được dùng nữa và có thể được sử dụng để ghi đè giá trị của hệ thống cho

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    18. Giá trị
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    62 tương đương với cài đặt tối ưu hóa cho chuỗi trống. Giá trị
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    01 giống như cài đặt tối ưu hóa thành
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    23. Nếu cả hai debug_override một tối ưu hóa không phải là
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 thì sẽ được nâng lên

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

    Đã thay đổi trong phiên bản 3. 5. Tham số tối ưu hóa đã được thêm vào và tham số debug_override không được dùng nữa.

    Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

    importlib. sử dụng. source_from_cache[đường dẫn]

    Cung cấp đường dẫn đến tên tệp PEP 3147, trả lại đường dẫn tệp mã nguồn được liên kết. Ví dụ: nếu đường dẫn là

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    07 thì đường dẫn được trả về sẽ là
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    06. đường dẫn không cần tồn tại, tuy nhiên nếu nó không phù hợp với định dạng PEP 3147 hoặc PEP 488, a sẽ tăng lên. If
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    10 is not defined, is raised

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

    Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

    importlib. sử dụng. decode_source[source_byte]

    Giải mã các byte đã cho đại diện cho mã nguồn và trả về nó dưới dạng một chuỗi với các dòng mới chung [theo yêu cầu của ]

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

    importlib. sử dụng. resolve_name[name , gói]

    Phân giải tên mô-đun tương đối thành tên tuyệt đối

    Nếu tên không có dấu chấm ở đầu, thì tên chỉ được trả về. Điều này cho phép sử dụng chẳng hạn như

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    32 mà không cần kiểm tra xem có cần đối số gói không

    được nâng lên nếu tên là tên mô-đun tương đối nhưng gói là giá trị sai [e. g.

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 hoặc chuỗi trống]. cũng được nâng lên nếu một tên tương đối sẽ thoát khỏi gói chứa nó [e. g. yêu cầu
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    36 từ bên trong gói
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    37]

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

    Đã thay đổi trong phiên bản 3. 9. Để cải thiện tính nhất quán với câu lệnh nhập, hãy tăng thay vì tăng đối với các lần nhập tương đối không hợp lệ.

    importlib. sử dụng. find_spec[tên , gói=None]

    Tìm cho một mô-đun, tùy ý liên quan đến tên gói đã chỉ định. Nếu mô-đun ở trong , thì

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    41 được trả về [trừ khi thông số kỹ thuật sẽ là
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 hoặc không được đặt, trong trường hợp đó được tăng lên]. Nếu không, một tìm kiếm sử dụng được thực hiện.
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 được trả lại nếu không tìm thấy thông số kỹ thuật

    Nếu tên dành cho mô-đun con [chứa dấu chấm], mô-đun mẹ sẽ tự động được nhập

    tên và gói hoạt động tương tự như đối với

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    6

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

    Đã thay đổi trong phiên bản 3. 7. Tăng thay vì nếu gói trên thực tế không phải là gói [i. e. thiếu một thuộc tính].

    importlib. sử dụng. module_from_spec[spec]

    Tạo một mô-đun mới dựa trên thông số kỹ thuật và

    Nếu không trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0, thì mọi thuộc tính có sẵn sẽ không được đặt lại. Ngoài ra, không sẽ được nâng lên nếu được kích hoạt trong khi truy cập thông số kỹ thuật hoặc đặt thuộc tính trên mô-đun

    Chức năng này được ưa thích hơn là sử dụng để tạo một mô-đun mới vì thông số kỹ thuật được sử dụng để đặt càng nhiều thuộc tính được kiểm soát nhập trên mô-đun càng tốt

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

    @importlib. sử dụng. module_for_loader

    Một để xử lý việc chọn đối tượng mô-đun thích hợp để tải với. Phương thức được trang trí dự kiến ​​​​sẽ có chữ ký cuộc gọi nhận hai đối số vị trí [e. g.

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    56] mà đối số thứ hai sẽ là đối tượng mô-đun được trình tải sử dụng. Lưu ý rằng trình trang trí sẽ không hoạt động trên các phương thức tĩnh do giả định có hai đối số

    Phương thức được trang trí sẽ lấy tên của mô-đun sẽ được tải như mong đợi cho một. Nếu không tìm thấy mô-đun thì một mô-đun mới được xây dựng. Bất kể mô-đun đến từ đâu, hãy đặt thành tự và được đặt dựa trên những gì trả về [nếu có]. Các thuộc tính này được đặt vô điều kiện để hỗ trợ tải lại

    Nếu một ngoại lệ được đưa ra bởi phương pháp được trang trí và một mô-đun đã được thêm vào, thì mô-đun đó sẽ bị xóa để ngăn mô-đun được khởi tạo một phần ở bên trái trong. Nếu mô-đun đã có sẵn thì nó được để yên

    Đã thay đổi trong phiên bản 3. 3. và được đặt tự động [khi có thể].

    Đã thay đổi trong phiên bản 3. 4. Đặt , vô điều kiện để hỗ trợ tải lại.

    Không dùng nữa kể từ phiên bản 3. 4. Máy móc nhập khẩu hiện trực tiếp thực hiện tất cả các chức năng do chức năng này cung cấp.

    @importlib. sử dụng. set_loader

    A for để đặt thuộc tính trên mô-đun được trả về. Nếu thuộc tính đã được đặt thì trình trang trí không làm gì cả. Giả sử rằng đối số vị trí đầu tiên cho phương thức được bao bọc [i. e.

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    71] là những gì nên được đặt thành

    Đã thay đổi trong phiên bản 3. 4. Đặt

    import importlib
    
    itertools = importlib.import_module['itertools']
    
    5 nếu được đặt thành
    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0, như thể thuộc tính không tồn tại.

    Không dùng nữa kể từ phiên bản 3. 4. Máy móc nhập khẩu sẽ tự động xử lý việc này.

    @importlib. sử dụng. set_package

    A for để đặt thuộc tính trên mô-đun được trả về. Nếu được đặt và có giá trị khác với

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 thì sẽ không bị thay đổi

    Không dùng nữa kể từ phiên bản 3. 4. Máy móc nhập khẩu sẽ tự động xử lý việc này.

    importlib. sử dụng. spec_from_loader[tên , trình tải, *, origin=None, is_package=None]

    Chức năng xuất xưởng để tạo phiên bản dựa trên trình tải. Các tham số có cùng ý nghĩa như đối với ModuleSpec. Hàm này sử dụng các API có sẵn, chẳng hạn như

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    10, để điền vào bất kỳ thông tin còn thiếu nào về thông số kỹ thuật

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

    importlib. sử dụng. spec_from_file_location[tên , vị trí, *, loader=None, submodule_search_locations=None]

    Hàm xuất xưởng để tạo phiên bản dựa trên đường dẫn đến tệp. Thông tin còn thiếu sẽ được điền vào thông số kỹ thuật bằng cách sử dụng API trình tải và ngụ ý rằng mô-đun sẽ dựa trên tệp

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

    Đã thay đổi trong phiên bản 3. 6. Chấp nhận một.

    importlib. sử dụng. source_hash[source_byte]

    Trả lại hàm băm của source_bytes dưới dạng byte. Tệp

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    82 dựa trên hàm băm nhúng nội dung của tệp nguồn tương ứng vào tiêu đề của nó

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

    lớp importlib. sử dụng. LazyLoader[trình tải]

    Một lớp trì hoãn việc thực thi trình tải mô-đun cho đến khi mô-đun có một thuộc tính được truy cập

    Lớp này chỉ hoạt động với các trình tải xác định là cần kiểm soát loại mô-đun nào được sử dụng cho mô-đun. Vì những lý do tương tự, phương thức của trình tải phải trả về

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    0 hoặc một loại mà thuộc tính
    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    
    87 của nó có thể bị thay đổi cùng với việc không sử dụng. Cuối cùng, các mô-đun thay thế đối tượng được đặt vào sẽ không hoạt động vì không có cách nào để thay thế đúng các tham chiếu mô-đun trong trình thông dịch một cách an toàn;

    Note

    Đối với các dự án mà thời gian khởi động là rất quan trọng, lớp này cho phép giảm thiểu chi phí tải một mô-đun nếu nó không bao giờ được sử dụng. Đối với các dự án mà thời gian khởi động không cần thiết thì việc sử dụng lớp này không được khuyến khích nhiều do các thông báo lỗi được tạo trong quá trình tải bị hoãn lại và do đó xảy ra ngoài ngữ cảnh

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

    Đã thay đổi trong phiên bản 3. 6. Bắt đầu gọi , xóa cảnh báo tương thích cho và.

    classmethod factory[loader]

    Một phương thức tĩnh trả về một phương thức có thể gọi được để tạo ra một bộ tải chậm. Điều này có nghĩa là được sử dụng trong các tình huống mà trình tải được truyền theo lớp thay vì theo thể hiện

    suffixes = importlib.machinery.SOURCE_SUFFIXES
    loader = importlib.machinery.SourceFileLoader
    lazy_loader = importlib.util.LazyLoader.factory[loader]
    finder = importlib.machinery.FileFinder[path, [lazy_loader, suffixes]]
    

    ví dụ

    Nhập theo chương trình

    Để nhập một mô-đun theo chương trình, hãy sử dụng

    import importlib
    
    itertools = importlib.import_module['itertools']
    

    Kiểm tra xem một mô-đun có thể được nhập không

    Nếu bạn cần tìm hiểu xem một mô-đun có thể được nhập mà không thực sự nhập hay không, thì bạn nên sử dụng

    Lưu ý rằng nếu

    >>> from importlib.machinery import NamespaceLoader
    >>> import my_namespace
    >>> isinstance[my_namespace.__loader__, NamespaceLoader]
    True
    >>> import importlib.abc
    >>> isinstance[my_namespace.__loader__, importlib.abc.Loader]
    True
    
    70 là mô-đun con [chứa dấu chấm], sẽ nhập mô-đun mẹ

    import importlib.util
    import sys
    
    # For illustrative purposes.
    name = 'itertools'
    
    if name in sys.modules:
        print[f"{name!r} already in sys.modules"]
    elif [spec := importlib.util.find_spec[name]] is not None:
        # If you chose to perform the actual import ...
        module = importlib.util.module_from_spec[spec]
        sys.modules[name] = module
        spec.loader.exec_module[module]
        print[f"{name!r} has been imported"]
    else:
        print[f"can't find the {name!r} module"]
    

    Nhập tệp nguồn trực tiếp

    Để nhập trực tiếp tệp nguồn Python, hãy sử dụng công thức sau

    import importlib.util
    import sys
    
    # For illustrative purposes.
    import tokenize
    file_path = tokenize.__file__
    module_name = tokenize.__name__
    
    spec = importlib.util.spec_from_file_location[module_name, file_path]
    module = importlib.util.module_from_spec[spec]
    sys.modules[module_name] = module
    spec.loader.exec_module[module]
    

    Thực hiện nhập khẩu lười biếng

    Ví dụ dưới đây cho thấy cách thực hiện nhập chậm

    >>> import importlib.util
    >>> import sys
    >>> def lazy_import[name]:
    ..     spec = importlib.util.find_spec[name]
    ..     loader = importlib.util.LazyLoader[spec.loader]
    ..     spec.loader = loader
    ..     module = importlib.util.module_from_spec[spec]
    ..     sys.modules[name] = module
    ..     loader.exec_module[module]
    ..     return module
    ...
    >>> lazy_typing = lazy_import["typing"]
    >>> #lazy_typing is a real module object,
    >>> #but it is not loaded in memory yet.
    >>> lazy_typing.TYPE_CHECKING
    False
    

    Thiết lập nhà nhập khẩu

    Đối với các tùy chỉnh nhập sâu, bạn thường muốn triển khai một. Điều này có nghĩa là quản lý cả mặt và mặt của sự vật. Đối với công cụ tìm, có hai hương vị để lựa chọn tùy thuộc vào nhu cầu của bạn. một hoặc một. The former is what you would put on while the latter is what you create using a on which works with entries to potentially create a finder. Ví dụ này sẽ chỉ cho bạn cách đăng ký trình nhập khẩu của riêng bạn để quá trình nhập sẽ sử dụng chúng [để tạo trình nhập khẩu cho chính bạn, hãy đọc tài liệu về các lớp thích hợp được xác định trong gói này]

    import importlib.machinery
    import sys
    
    # For illustrative purposes only.
    SpamMetaPathFinder = importlib.machinery.PathFinder
    SpamPathEntryFinder = importlib.machinery.FileFinder
    loader_details = [importlib.machinery.SourceFileLoader,
                      importlib.machinery.SOURCE_SUFFIXES]
    
    # Setting up a meta path finder.
    # Make sure to put the finder in the proper location in the list in terms of
    # priority.
    sys.meta_path.append[SpamMetaPathFinder]
    
    # Setting up a path entry finder.
    # Make sure to put the path hook in the proper location in the list in terms
    # of priority.
    sys.path_hooks.append[SpamPathEntryFinder.path_hook[loader_details]]
    

    xấp xỉ

    Import itself is implemented in Python code, making it possible to expose most of the import machinery through importlib. The following helps illustrate the various APIs that importlib exposes by providing an approximate implementation of

    Bạn có thể nhập lại mô-đun Python không?

    Bạn có thể nhập lại mô-đun trong python bằng cách sử dụng importlib và chức năng tải lại của nó .

    How many times does a module gets loaded when imported multiple times?

    Mã mô-đun được đánh giá chỉ lần đầu tiên khi được nhập . If the same module is imported into multiple other modules, its code is executed only once, upon the first import. Then its exports are given to all further importers. The one-time evaluation has important consequences, that we should be aware of.

    Chúng tôi có thể nhập bất kỳ mô-đun nào trong phiên phiên dịch bao nhiêu lần?

    Vì lý do hiệu quả, mỗi mô-đun chỉ được nhập một lần cho mỗi phiên phiên dịch . Do đó, nếu bạn thay đổi các mô-đun của mình, bạn phải khởi động lại trình thông dịch – hoặc, nếu đó chỉ là một mô-đun mà bạn muốn kiểm tra tương tác, hãy sử dụng importlib. tải lại [], e. g. nhập importlib; . tải lại [tên mô-đun].

    Chủ Đề