mathspp.com · 12d · discuss
Learn how to use lazy imports to speed up the startup time of your Python applications. Python 3.15 introduced explicit lazy imports. An explicit lazy import is an import statement that starts with the keyword lazy: import json lazy import math lazy from pathlib import Path The module json is imported normally, but math and Path are imported lazily. If an import is lazy, the module will only be loaded when it is needed instead of being loaded immediately when Python encounters the import statement. This article explains how to use lazy imports and how to write backwards-compatible code with these features. 15 days of Python 3.15 To celebrate the release of Python 3.15, over the next 15 business days I'll be writing about a new 3.15 feature every day. Explained clearly and with examples so you don't have to sift through the changelog. Subscribe to receive this free email series: (function() { window.GravRecaptchaInitializers = window.GravRecaptchaInitializers || {}; function addHiddenInput(form, name, value) { const existing = form.querySelector('input[type="hidden"][name="' + name + '"]'); if (existing) { existing.value = value; } else { const input = document.createElement('input'); input.setAttribute('type', 'hidden'); input.setAttribute('name', name); input.setAttribute('value', value); form.insertBefore(input, form.firstChild); } } function initRecaptchaV3(container) { const formId = container.dataset.formId; const siteKey = container.dataset.sitekey; const action = container.dataset.action; const form = document.getElementById(formId); if (!form) return; console.log(`Initializing reCAPTCHA v3 for form ${formId}`); const submitHandler = function(event) { event.preventDefault(); console.log(`reCAPTCHA v3 intercepting submit for form ${formId}`); grecaptcha.ready(function() { grecaptcha.execute(siteKey, { action: action }) .then(function(token) { console.log(`reCAPTCHA v3 token received for form ${formId}`); addHiddenInput(form, 'data[token]', token); addHiddenInput(form, 'data[action]', action); form.removeEventListener('submit', submitHandler); if (form.dataset.xhrEnabled === 'true' && window.GravFormXHR && typeof window.GravFormXHR.submit === 'function') { window.GravFormXHR.submit(form); } else { if (typeof form.requestSubmit === 'function') { form.requestSubmit(); } else { form.submit(); } } setTimeout(() => { const currentForm = document.getElementById(formId); if (currentForm && !currentForm.dataset.recaptchaListenerAttached) { currentForm.addEventListener('submit', submitHandler); currentForm.dataset.recaptchaListenerAttached = 'true'; } else if (currentForm) { delete currentForm.dataset.recaptchaListenerAttached; } }, 0); }); }); }; delete form.dataset.recaptchaListenerAttached; if (!form.dataset.recaptchaListenerAttached) { form.addEventListener('submit', submitHandler); form.dataset.recaptchaListenerAttached = 'true'; } } // Register the initializer function const initializerFunctionName = 'initRecaptcha_enroll'; window.GravRecaptchaInitializers[initializerFunctionName] = function() { const container = document.querySelector('[data-form-id="enroll"][data-captcha-provider="recaptcha"]'); if (!container) return; initRecaptchaV3(container); }; // Initial call if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', window.GravRecaptchaInitializers[initializerFunctionName]); } else { setTimeout(window.GravRecaptchaInitializers[initializerFunctionName], 0); } })(); Enroll for free 🐍🚀 If you want, you can also check the schedule of the upcoming emails. Why does Python need lazy imports? The import system in Python loads a module when it encounters the import statement. That means that when Python finds a statement import some_module it looks for the corresponding Python module file and runs it. In turn, that file might import other modules that will run at that point in time, and this branching can be arbitrarily deep. Since Python files usually collect all imports at the top, this means that you may spend an arbitrarily long amount of time taking care of your imports even before your start running your own code. And in some situations, you won't even need your imports. Imagine a...