Skip to content

gh-118761: Add test_lazy_import for more modules #133057

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 5, 2025

Conversation

danielhollas
Copy link
Contributor

@danielhollas danielhollas 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
Contributor Author

@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 danielhollas requested review from ethanfurman, rhettinger and a team as code owners April 28, 2025 00:12
@danielhollas
Copy link
Contributor Author

@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.

@danielhollas danielhollas changed the title gh-118761: test_lazy_import for threading and pathlib modules gh-118761: Add test_lazy_import for more modules Apr 28, 2025
@rhettinger rhettinger removed their request for review April 29, 2025 16:07
@danielhollas danielhollas requested a review from Eclips4 as a code owner May 5, 2025 17:30
@danielhollas
Copy link
Contributor Author

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

@JelleZijlstra JelleZijlstra 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
Contributor Author

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".

@JelleZijlstra JelleZijlstra enabled auto-merge (squash) May 5, 2025 22:37
@JelleZijlstra JelleZijlstra merged commit cae660d into python:main May 5, 2025
41 of 42 checks passed
@danielhollas danielhollas deleted the test-lazy-import branch May 5, 2025 23:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
skip news tests Tests in the Lib/test dir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants