-
Notifications
You must be signed in to change notification settings - Fork 22
BUG: lazy_loader imports all lazy-loaded packages when trying to lazy-load a missing package #131
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
Comments
Note, this can be avoided by specifying the It looks like the problem is that |
Just started to try to reproduce this, and I discovered that #151 actually makes the problem go away. Before:$ git checkout main
$ git clean -fxd
$ uv sync
Using CPython 3.13.2
Creating virtual environment at: .venv
Resolved 39 packages in 1.11s
Built lazy-loader @ file:///var/home/chris/Projects/lazy-loader
Prepared 1 package in 1.10s
Installed 2 packages in 2ms
+ lazy-loader==0.5rc0.dev0 (from file:///var/home/chris/Projects/lazy-loader)
+ packaging==25.0
$ source .venv/bin/activate
$ pip install numpy
Resolved 1 package in 80ms
Installed 1 package in 37ms
+ numpy==2.2.5
$ python -X importtime -c 'import lazy_loader;lazy_loader.load("numpy"); lazy_loader.load("dne")'
import time: self [us] | cumulative | imported package
import time: 413 | 413 | _io
import time: 73 | 73 | marshal
import time: 594 | 594 | posix
import time: 1139 | 2217 | _frozen_importlib_external
import time: 264 | 264 | time
import time: 402 | 666 | zipimport
import time: 117 | 117 | _codecs
import time: 1034 | 1151 | codecs
import time: 803 | 803 | encodings.aliases
import time: 1010 | 2963 | encodings
import time: 369 | 369 | encodings.utf_8
import time: 197 | 197 | _signal
import time: 76 | 76 | _abc
import time: 310 | 386 | abc
import time: 314 | 699 | io
import time: 97 | 97 | _stat
import time: 211 | 307 | stat
import time: 1980 | 1980 | _collections_abc
import time: 159 | 159 | errno
import time: 140 | 140 | genericpath
import time: 330 | 628 | posixpath
import time: 1149 | 4063 | os
import time: 183 | 183 | _sitebuiltins
import time: 889 | 889 | encodings.utf_8_sig
import time: 343 | 343 | __future__
import time: 226 | 226 | importlib
import time: 116 | 341 | importlib.machinery
import time: 308 | 308 | importlib._abc
import time: 430 | 430 | types
import time: 306 | 1043 | importlib.util
import time: 216 | 216 | itertools
import time: 190 | 190 | keyword
import time: 131 | 131 | _operator
import time: 475 | 605 | operator
import time: 268 | 268 | reprlib
import time: 101 | 101 | _collections
import time: 1670 | 2832 | collections
import time: 88 | 88 | _functools
import time: 955 | 3874 | functools
import time: 910 | 910 | contextlib
import time: 2530 | 2530 | enum
import time: 115 | 115 | _sre
import time: 373 | 373 | re._constants
import time: 566 | 939 | re._parser
import time: 155 | 155 | re._casefix
import time: 490 | 1697 | re._compiler
import time: 220 | 220 | copyreg
import time: 773 | 5218 | re
import time: 188 | 188 | fnmatch
import time: 789 | 7104 | glob
import time: 1042 | 12019 | pathlib._abc
import time: 162 | 162 | _winapi
import time: 64 | 64 | nt
import time: 53 | 53 | nt
import time: 55 | 55 | nt
import time: 46 | 46 | nt
import time: 44 | 44 | nt
import time: 42 | 42 | nt
import time: 50 | 50 | nt
import time: 370 | 882 | ntpath
import time: 1029 | 1029 | warnings
import time: 81 | 81 | pwd
import time: 65 | 65 | grp
import time: 853 | 2908 | pathlib._local
import time: 191 | 15117 | pathlib
import time: 5166 | 22223 | __editable___lazy_loader_0_5rc0_dev0_finder
import time: 2301 | 2301 | _virtualenv
import time: 107 | 107 | sitecustomize
import time: 1896 | 31659 | site
import time: 286 | 286 | linecache
import time: 142 | 142 | _ast
import time: 1988 | 2130 | ast
import time: 337 | 337 | _weakrefset
import time: 997 | 1334 | threading
import time: 3068 | 6531 | lazy_loader
import time: 79 | 79 | _opcode
import time: 313 | 313 | _opcode_metadata
import time: 418 | 809 | opcode
import time: 1732 | 2541 | dis
import time: 226 | 226 | token
import time: 53 | 53 | _tokenize
import time: 1329 | 1607 | tokenize
import time: 698 | 698 | weakref
import time: 3104 | 7949 | inspect
import time: 532 | 532 | numpy._utils._convertions
import time: 1009 | 1541 | numpy._utils
import time: 1248 | 2788 | numpy._globals
import time: 1954 | 1954 | numpy._expired_attrs_2_0
import time: 889 | 889 | numpy.version
import time: 121 | 121 | numpy._distributor_init_local
import time: 862 | 982 | numpy._distributor_init
import time: 1820 | 1820 | numpy._utils._inspect
import time: 380 | 380 | _datetime
import time: 901 | 1280 | datetime
import time: 238 | 238 | math
import time: 6772 | 6772 | numpy.exceptions
import time: 7852 | 7852 | numpy._core._exceptions
import time: 111 | 111 | _contextvars
import time: 416 | 527 | contextvars
import time: 1085 | 1611 | numpy._core.printoptions
import time: 1103 | 1103 | numpy.dtypes
import time: 23366 | 42219 | numpy._core._multiarray_umath
import time: 1830 | 45868 | numpy._core.overrides
import time: 6191 | 52058 | numpy._core.multiarray
import time: 1555 | 1555 | numpy._core.umath
import time: 2257 | 2257 | numbers
import time: 1040 | 1040 | numpy._core._string_helpers
import time: 2179 | 2179 | numpy._core._type_aliases
import time: 7750 | 7750 | numpy._core._dtype
import time: 11108 | 24332 | numpy._core.numerictypes
import time: 303 | 303 | _struct
import time: 299 | 601 | struct
import time: 514 | 514 | _compat_pickle
import time: 187 | 187 | _pickle
import time: 1830 | 3130 | pickle
import time: 4274 | 7403 | numpy._core._methods
import time: 18910 | 26312 | numpy._core.fromnumeric
import time: 6309 | 32621 | numpy._core.shape_base
import time: 2572 | 2572 | numpy._core._ufunc_config
import time: 16231 | 16231 | numpy._core.arrayprint
import time: 1713 | 1713 | numpy._core._asarray
import time: 31196 | 84331 | numpy._core.numeric
import time: 8706 | 8706 | numpy._core.records
import time: 2580 | 2580 | numpy._core.memmap
import time: 3582 | 3582 | numpy._core.function_base
import time: 3343 | 3343 | numpy._core._machar
import time: 6774 | 6774 | numpy._core.getlimits
import time: 9381 | 9381 | numpy._core.einsumfunc
import time: 9629 | 9629 | numpy._core._add_newdocs
import time: 2651 | 2651 | numpy._core._add_newdocs_scalars
import time: 1393 | 1393 | numpy._core._dtype_ctypes
import time: 256 | 256 | _ctypes
import time: 440 | 440 | ctypes._endian
import time: 1289 | 1984 | ctypes
import time: 9243 | 11227 | numpy._core._internal
import time: 1527 | 1527 | numpy._pytesttester
import time: 6530 | 229590 | numpy._core
import time: 67 | 229657 | numpy._core._multiarray_umath
import time: 2507 | 232164 | numpy.__config__
import time: 693 | 693 | numpy.lib._array_utils_impl
import time: 440 | 1132 | numpy.lib.array_utils
import time: 772 | 772 | numpy.lib.introspect
import time: 1667 | 1667 | numpy.lib.mixins
import time: 1827 | 1827 | textwrap
import time: 112 | 112 | _wmi
import time: 1228 | 1340 | platform
import time: 5770 | 8936 | numpy.lib._utils_impl
import time: 5837 | 14772 | numpy.lib.format
import time: 5290 | 5290 | numpy.lib._datasource
import time: 6948 | 6948 | numpy.lib._iotools
import time: 18436 | 45445 | numpy.lib._npyio_impl
import time: 366 | 45810 | numpy.lib.npyio
import time: 1189 | 1189 | numpy.lib._ufunclike_impl
import time: 3210 | 4399 | numpy.lib._type_check_impl
import time: 1998 | 6397 | numpy.lib._scimath_impl
import time: 549 | 6945 | numpy.lib.scimath
import time: 2907 | 2907 | numpy.lib._stride_tricks_impl
import time: 455 | 3362 | numpy.lib.stride_tricks
import time: 608 | 608 | numpy.linalg.linalg
import time: 114 | 114 | _typing
import time: 4284 | 4397 | typing
import time: 4150 | 4150 | numpy.lib._twodim_base_impl
import time: 505 | 505 | numpy.linalg._umath_linalg
import time: 1098 | 1098 | numpy._typing._nested_sequence
import time: 1126 | 1126 | numpy._typing._nbit_base
import time: 498 | 498 | numpy._typing._nbit
import time: 4275 | 4275 | numpy._typing._char_codes
import time: 664 | 664 | numpy._typing._scalars
import time: 343 | 343 | numpy._typing._shape
import time: 5649 | 5649 | numpy._typing._dtype_like
import time: 5016 | 5016 | numpy._typing._array_like
import time: 456 | 456 | numpy._typing._ufunc
import time: 1177 | 20297 | numpy._typing
import time: 16834 | 46182 | numpy.linalg._linalg
import time: 707 | 47496 | numpy.linalg
import time: 4918 | 52413 | numpy.matrixlib.defmatrix
import time: 595 | 53007 | numpy.matrixlib
import time: 6232 | 6232 | numpy.lib._histograms_impl
import time: 31994 | 38225 | numpy.lib._function_base_impl
import time: 5680 | 96911 | numpy.lib._index_tricks_impl
import time: 8568 | 8568 | numpy.lib._nanfunctions_impl
import time: 5683 | 5683 | numpy.lib._shape_base_impl
import time: 6772 | 6772 | numpy.lib._arraysetops_impl
import time: 8453 | 8453 | numpy.lib._polynomial_impl
import time: 2332 | 2332 | numpy.lib._arrayterator_impl
import time: 5099 | 5099 | numpy.lib._arraypad_impl
import time: 1715 | 1715 | numpy.lib._version
import time: 1849 | 197063 | numpy.lib
import time: 1701 | 1701 | numpy._array_api_info After:$ git checkout src-layout
$ git clean -fxd
$ uv sync
Using CPython 3.13.2
Creating virtual environment at: .venv
Resolved 39 packages in 1.21s
Built lazy-loader @ file:///var/home/chris/Projects/lazy-loader
Prepared 1 package in 1.09s
Installed 2 packages in 2ms
+ lazy-loader==0.5rc0.dev0 (from file:///var/home/chris/Projects/lazy-loader)
+ packaging==25.0
$ source .venv/bin/activate
$ python -X importtime -c 'import lazy_loader;lazy_loader.load("numpy"); lazy_loader.load("dne")'
import time: self [us] | cumulative | imported package
import time: 443 | 443 | _io
import time: 80 | 80 | marshal
import time: 673 | 673 | posix
import time: 1329 | 2523 | _frozen_importlib_external
import time: 237 | 237 | time
import time: 488 | 724 | zipimport
import time: 111 | 111 | _codecs
import time: 1498 | 1609 | codecs
import time: 1103 | 1103 | encodings.aliases
import time: 1414 | 4125 | encodings
import time: 343 | 343 | encodings.utf_8
import time: 187 | 187 | _signal
import time: 65 | 65 | _abc
import time: 329 | 393 | abc
import time: 304 | 696 | io
import time: 82 | 82 | _stat
import time: 177 | 259 | stat
import time: 1717 | 1717 | _collections_abc
import time: 151 | 151 | errno
import time: 128 | 128 | genericpath
import time: 283 | 562 | posixpath
import time: 914 | 3449 | os
import time: 178 | 178 | _sitebuiltins
import time: 802 | 802 | encodings.utf_8_sig
import time: 5287 | 5287 | _virtualenv
import time: 236 | 236 | sitecustomize
import time: 1570 | 11519 | site
import time: 327 | 327 | linecache
import time: 191 | 191 | itertools
import time: 176 | 176 | keyword
import time: 128 | 128 | _operator
import time: 387 | 514 | operator
import time: 258 | 258 | reprlib
import time: 93 | 93 | _collections
import time: 1233 | 2463 | collections
import time: 92 | 92 | _functools
import time: 863 | 3416 | functools
import time: 454 | 454 | types
import time: 2751 | 6620 | enum
import time: 116 | 116 | _sre
import time: 357 | 357 | re._constants
import time: 530 | 887 | re._parser
import time: 198 | 198 | re._casefix
import time: 546 | 1745 | re._compiler
import time: 313 | 313 | copyreg
import time: 926 | 9603 | re
import time: 124 | 124 | _ast
import time: 1138 | 1138 | contextlib
import time: 1808 | 12672 | ast
import time: 271 | 271 | importlib
import time: 305 | 305 | importlib._abc
import time: 251 | 556 | importlib.util
import time: 493 | 493 | warnings
import time: 788 | 788 | _weakrefset
import time: 1034 | 2314 | threading
import time: 3325 | 19135 | lazy_loader
import time: 77 | 77 | _opcode
import time: 300 | 300 | _opcode_metadata
import time: 395 | 770 | opcode
import time: 1399 | 2169 | dis
import time: 104 | 104 | importlib.machinery
import time: 221 | 221 | token
import time: 73 | 73 | _tokenize
import time: 1363 | 1655 | tokenize
import time: 694 | 694 | weakref
import time: 3723 | 8344 | inspect I don't know if it's worth debugging further. |
MRE:
lazy_loader.load
lazy_loader.load
Good behaviour: lazy-loading an existing package
Bad behaviour: lazy-load an existing then a missing package
The text was updated successfully, but these errors were encountered: