Không tìm thấy lệnh nhập Python

Điều này có thể xảy ra trên bất kỳ hệ thống nào, nhưng xảy ra phổ biến hơn một chút trên MacOS do họ đã loại bỏ hỗ trợ python gốc trong MacOS 12. 3. May mắn thay, vấn đề này rất dễ khắc phục

Bước 1. đảm bảo Python đã được cài đặt

Điều đầu tiên bạn nên kiểm tra là python đã được cài đặt chưa. Bạn có thể cài đặt python từ thiết bị đầu cuối nếu bạn đã cài đặt

brew install python
10 bằng cách gõ đơn giản

brew install python

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bạn cũng có thể tải xuống tệp thực thi trực tiếp từ trang web Python để cài đặt nó. Sau khi cài đặt

brew install python
11, hãy thử chạy lại
brew install python
11 từ thiết bị đầu cuối. Nếu bạn vẫn gặp vấn đề tương tự, hãy chuyển sang bước 2

Bước 2. thêm trăn vào zsh

Bước tiếp theo là thêm

brew install python
11 vào zsh để nó chạy khi gõ lệnh
brew install python
11. Bạn có thể làm điều này bằng cách chạy đoạn mã sau trong terminal

echo "alias python=/usr/bin/python3" >> ~/.zshrc

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Điều này sẽ định cấu hình hồ sơ zsh của bạn để chạy

brew install python
15 khi chạy
brew install python
11. Nếu bạn vẫn gặp phải sự cố, hãy đảm bảo rằng ____ ____ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Bước 3. khởi động lại thiết bị đầu cuối

Bây giờ bạn đã hoàn thành việc đó, chỉ cần khởi động lại thiết bị đầu cuối của bạn. Khi bạn mở lại, lệnh

brew install python
11 của bạn sẽ hoạt động thành công

Điều này có thể xảy ra trên bất kỳ hệ thống nào nhưng xảy ra phổ biến hơn một chút trên macOS do họ đã loại bỏ hỗ trợ python gốc trong macOS 12. 3. May mắn thay, vấn đề này rất dễ khắc phục

Bước 1. đảm bảo Python đã được cài đặt

Điều đầu tiên bạn nên kiểm tra là python đã được cài đặt chưa. Bạn có thể cài đặt python từ thiết bị đầu cuối nếu bạn đã cài đặt

brew install python
10 bằng cách chỉ cần gõ

brew install python

Bạn cũng có thể tải xuống tệp thực thi trực tiếp từ trang web Python để cài đặt nó. Sau khi cài đặt

brew install python
11, hãy thử chạy lại
brew install python
11 từ thiết bị đầu cuối. Nếu bạn vẫn gặp vấn đề tương tự, hãy chuyển sang bước 2

Bước 2. thêm trăn vào zsh

Bước tiếp theo là thêm

brew install python
11 vào zsh để nó chạy khi gõ lệnh
brew install python
11. Bạn có thể làm điều này bằng cách chạy đoạn mã sau trong terminal

echo "alias python=/usr/bin/python3" >> ~/.zshrc

Điều này sẽ định cấu hình hồ sơ zsh của bạn để chạy

brew install python
15 khi chạy
brew install python
11. Nếu bạn vẫn gặp phải sự cố, hãy đảm bảo rằng ____ ____ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Bước 3. khởi động lại thiết bị đầu cuối

Bây giờ bạn đã hoàn thành việc đó, chỉ cần khởi động lại thiết bị đầu cuối của bạn. Khi bạn mở lại, lệnh

brew install python
11 của bạn sẽ hoạt động thành công

Câu lệnh

brew install python
28 kết hợp hai thao tác; . Hoạt động tìm kiếm của câu lệnh
brew install python
28 đượ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
brew install python
28. Xem câu lệnh
brew install python
28 để biết chi tiết chính xác về thao tác 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
brew install python
28 thực hiện thao tác liên kết tên

Khi một câu lệnh

brew install python
28 đượ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ư
brew install python
34] 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
24 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
25. Ngoài ra, hỗ trợ gói không gian tên gốc đã được triển khai [xem PEP 420].

5. 1. ______126¶

Mô-đun

echo "alias python=/usr/bin/python3" >> ~/.zshrc
26 cung cấp API phong phú để tương tác với hệ thống nhập. Ví dụ:
brew install python
34 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
26 để 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 đề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à

echo "alias python=/usr/bin/python3" >> ~/.zshrc
82, đến lượt gói này có một gói con có tên là
echo "alias python=/usr/bin/python3" >> ~/.zshrc
83 và một mô-đun bên trong gói con đó có tên là
echo "alias python=/usr/bin/python3" >> ~/.zshrc
84

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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
85 file. When a regular package is imported, this
echo "alias python=/usr/bin/python3" >> ~/.zshrc
85 file is implicitly executed, and the objects it defines are bound to names in the package’s namespace. The
echo "alias python=/usr/bin/python3" >> ~/.zshrc
85 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
88 cấp cao nhất với ba gói con

brew install python
6

Nhập

echo "alias python=/usr/bin/python3" >> ~/.zshrc
89 sẽ ngầm thực thi
brew install python
80 và
brew install python
81. Các lần nhập tiếp theo của
brew install python
82 hoặc
brew install python
83 sẽ thực hiện tương ứng với
brew install python
84 và
brew install python
85

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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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
brew install python
87 đố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

brew install python
80. Trên thực tế, có thể có nhiều thư mục
echo "alias python=/usr/bin/python3" >> ~/.zshrc
88 đượ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 đó,
brew install python
80 có thể không được đặt bên cạnh
brew install python
81. Trong trường hợp này, Python sẽ tạo một gói không gian tên cho gói
echo "alias python=/usr/bin/python3" >> ~/.zshrc
88 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 . Tên này có thể đến từ các đối số khác nhau cho câu lệnh

brew install python
28 hoặc từ các tham số cho các hàm
brew install python
34 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.

brew install python
86. Trong trường hợp này, trước tiên Python sẽ cố gắng nhập
brew install python
87, sau đó là
brew install python
88 và cuối cùng là
brew install python
86. Nếu bất kỳ lần nhập trung gian nào không thành công, một
echo "alias python=/usr/bin/python3" >> ~/.zshrc
24 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
brew install python
86 đã đượ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
brew install python
87,
brew install python
88 và
brew install python
86. 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 yêu cầu nhập và quá trình hoàn tất. Tuy nhiên, nếu giá trị là
brew install python
48, thì một
echo "alias python=/usr/bin/python3" >> ~/.zshrc
24 đượ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 tên, khiến Python phải tìm kiếm lại mô-đun được đặt tên trong lần nhập tiếp theo. Khóa cũng có thể được gán cho
brew install python
48, buộc lần nhập mô-đun tiếp theo dẫn đến một
echo "alias python=/usr/bin/python3" >> ~/.zshrc
24

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]
04 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 đã đặt 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à các trình nhập - chúng tự trả về khi 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 trước của Python, 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ý
brew install python
87, các mô-đun bị đóng băng hoặc thậm chí các mô-đun tích hợp. 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
25, 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ý

brew install python
87 [hoặc
brew install python
280], 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
brew install python
281 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 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
25, 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à
brew install python
284, 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ề

brew install python
48. Nếu quá trình xử lý
echo "alias python=/usr/bin/python3" >> ~/.zshrc
25 đến cuối danh sách của nó mà không trả về thông số kỹ thuật, thì
echo "alias python=/usr/bin/python3" >> ~/.zshrc
24 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

brew install python
284 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ụ:
brew install python
86. Đố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à
brew install python
48, 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 của gói mẹ. Nếu không thể truy cập thuộc tính
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 thích hợp, một
echo "alias python=/usr/bin/python3" >> ~/.zshrc
24 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ộ nhớ cache, việc nhập

brew install python
86 trước tiên sẽ thực hiện nhập cấp cao nhất, gọi
brew install python
345 trên mỗi công cụ tìm đường dẫn meta [
brew install python
346]. Sau khi
brew install python
87 đã được nhập,
brew install python
88 sẽ được nhập bằng cách duyệt qua đường dẫn meta lần thứ hai, gọi
brew install python
349. Khi
brew install python
88 đã đượ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ề

brew install python
48 khi bất kỳ thứ gì khác ngoài
brew install python
48 được chuyển làm đối số thứ hai

_______125 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

brew install python
284 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
brew install python
284.

Đã 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 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 tác dụ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 trong đó ngay cả mô-đun bị lỗi vẫn cò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 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, thì 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ề
brew install python
48, máy nhập sẽ tự tạo mô-đun mới

Mới trong phiên bản 3. 4. 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 của bộ tải.

Đã 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ộ nạp 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ộ nạp nếu nó tồn tại và bộ nạp 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]
    
    04 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 mọi mô-đun 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.

echo "alias python=/usr/bin/python3" >> ~/.zshrc
26 API, các câu lệnh
brew install python
28 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
module = None
if spec.loader is not None and hasattr[spec.loader, 'create_module']:
    # It is assumed 'exec_module' will also be defined on the loader.
    module = spec.loader.create_module[spec]
if module is None:
    module = ModuleType[spec.name]
# The import-related module attributes get set here:
_init_module_attrs[spec, module]

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = 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], một liên kết đượ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
brew install python
87, 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
brew install python
87 được liên kết với mô hình con. Giả sử bạn có cấu trúc thư mục sau

echo "alias python=/usr/bin/python3" >> ~/.zshrc
2

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

if spec.loader is None:
    # unsupported
    raise ImportError
if spec.origin is None and spec.submodule_search_locations is not None:
    # namespace package
    sys.modules[spec.name] = module
elif not hasattr[spec.loader, 'exec_module']:
    module = spec.loader.load_module[spec.name]
    # Set __loader__ and __package__ if missing.
else:
    sys.modules[spec.name] = 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 đó

echo "alias python=/usr/bin/python3" >> ~/.zshrc
8

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

brew install python
87 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

brew install python
8

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
brew install python
87 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 _____669 thành chuỗi trống cho các mô-đun cấp cao nhất hoặc cho 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 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]
67 để tính toán nhập khẩu tương đối rõ ràng cho các mô-đun chính, như được định nghĩa trong PEP 366. Dự kiến ​​nó 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. ______675 đượ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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 không có ý nghĩa gì nữa. Nếu
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 đượ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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81

__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ố 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81, thì đó là một gói

Thuộc tính

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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ư
brew install python
87, 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,
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 thường bị ràng buộc nhiều hơn so với
brew install python
87

echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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
brew install python
87 cũng áp dụng cho
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 của gói và
brew install python
281 [được mô tả bên dưới] được tham khảo khi duyệt qua
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 của gói

Tệp

echo "alias python=/usr/bin/python3" >> ~/.zshrc
85 của gói có thể đặt hoặc thay đổi thuộc tính
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
85 chỉ chứa mã thao tác
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81;

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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
214,
echo "alias python=/usr/bin/python3" >> ~/.zshrc
215 và
echo "alias python=/usr/bin/python3" >> ~/.zshrc
216 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 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ó 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]
    
    68 không phải là
    brew install python
    
    48, 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
223 đã 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
224 của trình tải, nếu được xác định, trước khi thử một trong hai cách tiếp cận đượ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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
224 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
224 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
229, nó sẽ kiểm tra xem bộ đệm có được cập nhật với tệp nguồn
echo "alias python=/usr/bin/python3" >> ~/.zshrc
230 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
229 dựa trên hàm băm. đã kiểm tra và bỏ chọn. Đối với các tệp
echo "alias python=/usr/bin/python3" >> ~/.zshrc
229 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
229 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
229 dựa trên hàm băm có thể bị ghi đè bằng cờ
echo "alias python=/usr/bin/python3" >> ~/.zshrc
235

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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
229 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 [

echo "alias python=/usr/bin/python3" >> ~/.zshrc
237], 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
230], mã byte Python [tệp
echo "alias python=/usr/bin/python3" >> ~/.zshrc
229] và thư viện dùng chung [e. g.
echo "alias python=/usr/bin/python3" >> ~/.zshrc
240 tệp]. Khi được hỗ trợ bởi mô-đun
echo "alias python=/usr/bin/python3" >> ~/.zshrc
241 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ý 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. phần này và phần trước đều sử dụng công cụ tìm thuật ngữ, 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ự 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
25. . 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
25 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 dựa trên đường dẫn bị xóa khỏi

echo "alias python=/usr/bin/python3" >> ~/.zshrc
25, 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

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

The công cụ tìm 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à 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

brew install python
284 được mô tả trước đây, 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 ,

brew install python
87,
brew install python
281 và
echo "alias python=/usr/bin/python3" >> ~/.zshrc
247. Các thuộc tính
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 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.

brew install python
87 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
250 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
brew install python
87 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
252] 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
brew install python
87;

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ố

echo "alias python=/usr/bin/python3" >> ~/.zshrc
255 cho
brew install python
284 được đưa ra, nó sẽ là danh sách các đường dẫn chuỗi để duyệt qua - thường là thuộc tính
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 của gói cho một lần nhập trong gói đó. Nếu đối số
echo "alias python=/usr/bin/python3" >> ~/.zshrc
255 là
brew install python
48, thì điều này cho biết nhập cấp cao nhất và
brew install python
87 được sử dụng. import path search by calling the path based finder’s
brew install python
284 method as described previously. When the
echo "alias python=/usr/bin/python3" >> ~/.zshrc
255 argument to
brew install python
284 is given, it will be a list of string paths to traverse - typically a package’s
echo "alias python=/usr/bin/python3" >> ~/.zshrc
81 attribute for an import within that package. If the
echo "alias python=/usr/bin/python3" >> ~/.zshrc
255 argument is
brew install python
48, this indicates a top level import and
brew install python
87 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
262 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ộ nhớ cache tới các công cụ tìm mục nhập đường dẫn. Bộ đệm này được duy trì trong
echo "alias python=/usr/bin/python3" >> ~/.zshrc
247 [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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
247 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

brew install python
281. 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

brew install python
281 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
brew install python
284 của công cụ tìm đường dẫn sẽ lưu trữ
brew install python
48 trong
echo "alias python=/usr/bin/python3" >> ~/.zshrc
247 [để 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

brew install python
281, 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

brew install python
87. Đầ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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
247. 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
247 và được trả về bởi
echo "alias python=/usr/bin/python3" >> ~/.zshrc
278 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

brew install python
284

brew install python
284 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].
brew install python
284 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. ______3284 đã thay thế

echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 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
brew install python
284 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ì

brew install python
284. 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
brew install python
284 đượ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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 lấy một đối số, tên đủ điều kiện của mô-đun được nhập.
echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 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 một 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ác công cụ tìm đường dẫn meta hỗ trợ. Tuy nhiên, các 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 của công cụ tìm mục nhập đường dẫn không bao giờ được gọi với đối số
echo "alias python=/usr/bin/python3" >> ~/.zshrc
255 [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ả
echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 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à
echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
25, 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ừ 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
24 trực tiếp từ
brew install python
284 thay vì trả lại
brew install python
48. 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

brew install python
8

Trong

echo "alias python=/usr/bin/python3" >> ~/.zshrc
806 hoặc
echo "alias python=/usr/bin/python3" >> ~/.zshrc
807, sau đây là nhập khẩu tương đối hợp lệ

brew install python
4

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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
808 hoặc
echo "alias python=/usr/bin/python3" >> ~/.zshrc
809, 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]
0

nên hiển thị

echo "alias python=/usr/bin/python3" >> ~/.zshrc
810 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ư
echo "alias python=/usr/bin/python3" >> ~/.zshrc
813 và
echo "alias python=/usr/bin/python3" >> ~/.zshrc
814. 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,
echo "alias python=/usr/bin/python3" >> ~/.zshrc
817 được đặt phù hợp hoặc thành
brew install python
48

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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
819, 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]
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
brew install python
87 khác

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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
817 được đặt thành
brew install python
48, 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

    echo "alias python=/usr/bin/python3" >> ~/.zshrc
    
    827

  • chạy từ stdin

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

Lưu ý rằng

echo "alias python=/usr/bin/python3" >> ~/.zshrc
817 luôn là
brew install python
48 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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
819 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à
echo "alias python=/usr/bin/python3" >> ~/.zshrc
817 đượ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
echo "alias python=/usr/bin/python3" >> ~/.zshrc
834 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
25 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
283 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

echo "alias python=/usr/bin/python3" >> ~/.zshrc
842

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 tra cứu 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ể tự thay thế 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

Lệnh không tìm thấy có nghĩa là Python là gì?

Lỗi này có thể do có thể bạn chưa chọn tùy chọn THÊM VÀO ĐƯỜNG DẪN trong quá trình cài đặt . Để khắc phục sự cố này, bạn cần kiểm tra đường dẫn biến hệ thống trên máy tính của mình.

Nhập _ trong Python là gì?

Trong Python, bạn sử dụng từ khóa nhập để cung cấp mã trong một mô-đun trong một mô-đun khác . Nhập trong Python rất quan trọng để cấu trúc mã của bạn một cách hiệu quả. Sử dụng nhập đúng cách sẽ giúp bạn làm việc hiệu quả hơn, cho phép bạn sử dụng lại mã trong khi vẫn duy trì dự án của mình.

Chúng ta có thể nhập hàm trong Python không?

Để sử dụng các chức năng trong mô-đun, bạn cần nhập mô-đun bằng câu lệnh nhập. Câu lệnh nhập được tạo thành từ từ khóa nhập cùng với tên của mô-đun. Trong một tệp Python, điều này sẽ được khai báo ở đầu mã, dưới bất kỳ dòng shebang hoặc nhận xét chung nào

Python có phải là một dòng lệnh không?

Python bao gồm một dòng lệnh để xử lý đầu vào của người dùng và một số loại mục nhập dữ liệu nhất định trong quá trình thực thi các chương trình Python. Điều này cho phép các tác vụ mạnh mẽ hơn và tương tác nhiều hơn với chương trình, cho phép người dùng nhập dữ liệu và thực hiện các tác vụ không thể thực hiện được.

Chủ Đề