Working to Make Python Lazy
iscinumpy.dev
Working to Make Python Lazy
1–10 of 21 posts
Re: Working to Make Python Lazy
#2Wait, that seems bad. These kinds of modules (especially numba) are often exactly the ones that you want to delay importing. Why not provide a way to check the existence at import time? How are you supposed to handle nonexistence in that case?
Re: Working to Make Python Lazy
#3Re: Working to Make Python Lazy
#4> Currently, disabling lazy imports disabled the syntax keyword, which means that you can’t use it for circular imports, type checking, etc.
Imo this is a good thing, laziness shouldn't be semantically important. The ability to force disable laziness while maintaining semantics is important for linting and testing, and more often than not, circular imports are a sign of bad code structure.
Re: Working to Make Python Lazy
#5> This pattern, for example, can’t be lazy: try: import numpy; except ModuleNotFoundError: ... Wait, that seems bad. These kinds of modules (especially numba) are often exactly the ones that you want to delay importing. Why not provide a way to check the existence at import time? How are you supposed to handle nonexistence in that case?
Seriously: crash if your dependencies aren't available. There are better ways to do optional dependencies. ImportError ain't it.
Re: Working to Make Python Lazy
#6> This pattern, for example, can’t be lazy: try: import numpy; except ModuleNotFoundError: ... Wait, that seems bad. These kinds of modules (especially numba) are often exactly the ones that you want to delay importing. Why not provide a way to check the existence at import time? How are you supposed to handle nonexistence in that case?
...crash? Seriously: crash if your dependencies aren't available. There are better ways to do optional dependencies. ImportError ain't it.
Re: Working to Make Python Lazy
#7> This pattern, for example, can’t be lazy: try: import numpy; except ModuleNotFoundError: ... Wait, that seems bad. These kinds of modules (especially numba) are often exactly the ones that you want to delay importing. Why not provide a way to check the existence at import time? How are you supposed to handle nonexistence in that case?
import importlib.util
if importlib.util.find_spec("numpy") is None:
... # whatever you wanted to do if numpy is missing
lazy import numpyRe: Working to Make Python Lazy
#8Earlier quoted context omitted.
...crash? Seriously: crash if your dependencies aren't available. There are better ways to do optional dependencies. ImportError ain't it.
What is the right way to handle an optional dependency?
I might recommend doing something like importing from something like `numpy.version` (or some other "random" very small utils package) so that the work done on file load is still fairly small.
Re: Working to Make Python Lazy
#9I've got my reservations about lazy imports, but scipy in particular is such a memory hog, I've increasingly been vendoring smaller utilities out of it. Good lazy imports would be a big help.