Skip to content

Conversation

@danielhollas
Copy link
Contributor

@danielhollasdanielhollas commented Apr 27, 2025

I went through my past PRs where I sped up the import time of threading and pathlib modules (#114509 and #123520) and added regression tests to ensure that the respective module imports stay lazy, using @JelleZijlstra's new ensure_lazy_import test fixture in #132614.

Happy to do this for more modules if it is better to do it in one PR instead of many.

I wasn't quite sure where to put these tests so happy to take guidance on that.

@danielhollas
Copy link
ContributorAuthor

@Wulian233 I am not sure what you mean. Please see #132614 and #118761 (comment) for the motivation.

@JelleZijlstra
Copy link
Member

Thanks! Feel free to make the same change for more modules in this PR.

@danielhollas
Copy link
ContributorAuthor

@JelleZijlstra thanks for taking a look! I've added the tests for enum, functools and email.utils modules. This should cover the modules handled in the original issue #109653. I'll stop for now.

Unless somebody else beats me to it, I can go through the rest of the modules handled in #118761, maybe next weekend.

@danielhollasdanielhollas changed the title gh-118761: test_lazy_import for threading and pathlib modulesgh-118761: Add test_lazy_import for more modulesApr 28, 2025
@rhettingerrhettinger removed their request for review April 29, 2025 16:07
@danielhollasdanielhollas requested a review from Eclips4 as a code ownerMay 5, 2025 17:30
@danielhollas
Copy link
ContributorAuthor

Unless somebody else beats me to it, I can go through the rest of the modules handled in #118761, maybe next weekend.

I went through the rest of the modules from #118761 and added the respective tests.
I only skipped importlib.metadata and tomllib since it is not clear to me if the tests should live in cpython repo or in the respective upstream repositories. Leaving that discussion for a follow-up PR.

This should be good to go. @JelleZijlstra I pushed one more commit which I forgot to push with the others, apologies.

Copy link
Member

@JelleZijlstraJelleZijlstra left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found a few more

@JelleZijlstra
Copy link
Member

Also a merge conflict. If you don't get to it I can spend a bit more time later today fixing it up, hopefully we can still get it in by the beta. (And it's not the end of the world if we don't.)

@danielhollas
Copy link
ContributorAuthor

Also a merge conflict. If you don't get to it I can spend a bit more time later today fixing it up, hopefully we can still get it in by the beta. (And it's not the end of the world if we don't.)

Done, thanks for a thorough review!

I'm getting these by searching for "import" in the source file and collecting the imports inside functions

Ah, good thinking. I've only included those modules that were specifically made lazy in the various PRs.

This got me thinking though that the current approach is somewhat suboptimal -- it would be more robust to have an allowlist of modules. Right now, a previously unused module can still be added and the tests might still pass. But this PR is definitely an improvement, LMK if you want me to open a follow-up issue for discussion.

@JelleZijlstra
Copy link
Member

An allowlist could make sense too, but might be harder to maintain. Feel free to open an issue discussing it. I guess my primary motivation was "I did all this work to make it so typing doesn't import annotationlib, let's make it so we don't regress by accident".

@JelleZijlstraJelleZijlstra enabled auto-merge (squash) May 5, 2025 22:37
@JelleZijlstraJelleZijlstra merged commit cae660d into python:mainMay 5, 2025
41 of 42 checks passed
@danielhollasdanielhollas deleted the test-lazy-import branch May 5, 2025 23:00
Pranjal095 pushed a commit to Pranjal095/cpython that referenced this pull request Jul 12, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip newstestsTests in the Lib/test dir

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@danielhollas@JelleZijlstra@picnixz