STINNER Victor <vstin...@redhat.com> added the comment:

Raymond:
> In general, we don't do deferred imports unless there is a compelling reason 
> (i.e. it is very slow or it is sometimes unavailable).

While I was working on adding OpenSSL 1.1.1 to Python 3.4, my _hashopenssl 
module was broken. In that case, "import random" fails with ImportError because 
of hashlib failures. I was surprised, since random doesn't need hashlib at 
startup.

I would like to be able to use "import random" even if hashlib is broken. For 
me, random is a key component, whereas I see hashlib more as optional. (Even if 
in practice, it should always be available).


Raymond:
> Otherwise, it is a false optimization.

Brett:
> Could you explain a bit more, Victor, about why you want to avoid importing 
> hashlib and OpenSSL so much?

Well, OpenSSL is not a random tiny library. For example, loading it increases 
Python RSS of around 2.7 MiB.

Example with script x.py:
---
import os
os.system(f"grep ^VmRSS /proc/{os.getpid()}/status")
import random
os.system(f"grep ^VmRSS /proc/{os.getpid()}/status")
---

Output without the change on Fedora 29:

VmRSS:      7396 kB
VmRSS:     11796 kB  # +4.4 MiB

With the change:

VmRSS:      7272 kB
VmRSS:      8988 kB  # +1.7 MiB


Another example is that OpenSSL loads the libz.so dynamic library by dependency.

I would prefer to minimize Python footprint if possible.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36559>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to