Skip to content
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

Prefix search is filesystem-centric #41525

Open
holdenweb opened this issue Feb 4, 2005 · 12 comments
Open

Prefix search is filesystem-centric #41525

holdenweb opened this issue Feb 4, 2005 · 12 comments
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement

Comments

@holdenweb
Copy link
Member

BPO 1116520
Nosy @terryjreedy, @gpshead, @ncoghlan, @carljm, @merwok, @ericsnowcurrently, @zooba, @iselind

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields:

assignee = None
closed_at = None
created_at = <Date 2005-02-04.22:16:00.000>
labels = ['interpreter-core', 'type-feature']
title = 'Prefix search is filesystem-centric'
updated_at = <Date 2019-12-19.00:29:24.734>
user = 'https://bugs.python.org/holdenweb'

bugs.python.org fields:

activity = <Date 2019-12-19.00:29:24.734>
actor = 'brett.cannon'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Interpreter Core']
creation = <Date 2005-02-04.22:16:00.000>
creator = 'holdenweb'
dependencies = []
files = []
hgrepos = []
issue_num = 1116520
keywords = []
message_count = 12.0
messages = ['60644', '113379', '113406', '154337', '154370', '222630', '283964', '283965', '284001', '284005', '284006', '284011']
nosy_count = 10.0
nosy_names = ['holdenweb', 'terry.reedy', 'gregory.p.smith', 'ncoghlan', 'carljm', 'eric.araujo', 'eric.snow', 'steve.dower', 'superluser', 'patriki']
pr_nums = []
priority = 'low'
resolution = None
stage = 'test needed'
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue1116520'
versions = ['Python 3.6']

@holdenweb
Copy link
Member Author

With the introduction of zipimport I experimented to
determine how much of the standard library could be
provided in zip format.

I discovered that I could entirely remove the standard
library, replacing it with /lib/python24.zip, with the
following caveats (this is under Cygwin, where /usr/lib
appears to be a loopback mount of /lib: paths will
differ on other platforms):

  1. The /lib/python2.4/lib-dynload directory had to be
    copied to the /lib directory to make zlib available to
    zipimport;

  2. The interpreter now produced three error messages:
    "Could not find platform independent libraries <prefix>"
    "Could not find platform dependent libraries <exec_prefix>"
    "Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]"

With the move towards esoteric import mechanisms it
seems that the searches for os.py in the filesystem
might no longer be an appropriate way to start
executing the interpreter.

Should some import hook API be available to determine
whether standard libraries are available without
actually importing anything?

@holdenweb holdenweb added interpreter-core (Objects, Python, Grammar, and Parser dirs) labels Feb 4, 2005
@devdanzin devdanzin mannequin added type-feature A feature request or enhancement labels Feb 15, 2009
@terryjreedy
Copy link
Member

Is this request still relevant for 3.2?

@holdenweb
Copy link
Member Author

Personally I think it's just as relevant as it always was, particularly with the introduction of importlib, but Brett will have a more informed opinion. I won't be surprised if this issue is closed as wontfix.

@ncoghlan
Copy link
Contributor

Yeah, I'm pretty sure the bootstrap mechanism needs to be able to get hold of os.py directly so it can be injected into the importlib._bootstrap namespace.

However, it may be worth figuring out and documenting the bare minimum that has to exist on the filesystem in order for importlib to get going.

It's even possible that Brett freezes enough into the interpreter binary that the required set has shrunk to zero.

@brettcannon
Copy link
Member

Importlib actually requires no files from disk; everything that is required for importlib are built-in modules or are constants in importlib itself (e.g. os.sep). So technically this should be doable since my bootstrap work freezes importlib itself.

@BreamoreBoy
Copy link
Mannequin

BreamoreBoy mannequin commented Jul 9, 2014

Is this something that we could get into 3.5?

@iselind
Copy link
Mannequin

iselind mannequin commented Dec 24, 2016

How much smaller would the stdlib for 3.5 become if you compress it with zip?

@iselind
Copy link
Mannequin

iselind mannequin commented Dec 24, 2016

What about the performance penalty for zipping stdlib? is it significant?

When would you like to zip stdlib? For embedded systems with limited disk
space?

Patrik Iselind

On Sat, Dec 24, 2016 at 6:34 PM, Patrik Iselind <report@bugs.python.org>
wrote:

Patrik Iselind added the comment:

How much smaller would the stdlib for 3.5 become if you compress it with
zip?

----------
nosy: +patriki


Python tracker <report@bugs.python.org>
<http://bugs.python.org/issue1116520\>


@brettcannon
Copy link
Member

Originally zip file importing was faster than standard importing from disk because of the fewer stat calls, but importlib caches such things so I don't know if it's still beneficial. As for space savings, I have no idea; you can try zipping the files yourself to find out the space savings.

@iselind
Copy link
Mannequin

iselind mannequin commented Dec 25, 2016

Is it enough to include everything in the Lib folder, excluding
__pycache__, site-packages and the test folder in Lib? Would that be
representative enough?

Patrik Iselind

Den 2016-12-25 kl. 17:31, skrev Brett Cannon:

Brett Cannon added the comment:

Originally zip file importing was faster than standard importing from disk because of the fewer stat calls, but importlib caches such things so I don't know if it's still beneficial. As for space savings, I have no idea; you can try zipping the files yourself to find out the space savings.

----------


Python tracker <report@bugs.python.org>
<http://bugs.python.org/issue1116520\>


@holdenweb
Copy link
Member Author

Don't forget that the built-in modules may need to be available before the
zipimporter is. A long time ago (when sys.metapath was introduced) I
experimented with imports from non-filesystem sources and that hit me until
I realised what was going on.

S

Steve Holden

On Sun, Dec 25, 2016 at 5:48 PM, Patrik Iselind <report@bugs.python.org>
wrote:

Patrik Iselind added the comment:

Is it enough to include everything in the Lib folder, excluding
__pycache__, site-packages and the test folder in Lib? Would that be
representative enough?

Patrik Iselind

Den 2016-12-25 kl. 17:31, skrev Brett Cannon:
> Brett Cannon added the comment:
>
> Originally zip file importing was faster than standard importing from
disk because of the fewer stat calls, but importlib caches such things so I
don't know if it's still beneficial. As for space savings, I have no idea;
you can try zipping the files yourself to find out the space savings.
>
> ----------
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue1116520\>
> _______________________________________

----------


Python tracker <report@bugs.python.org>
<http://bugs.python.org/issue1116520\>


@ncoghlan
Copy link
Contributor

Note that Steve Dower made some significant changes to sys.path initialisation on Windows in Python 3.6 that could potentially be generalised to other platforms: https://docs.python.org/3/using/windows.html#finding-modules

(There's nothing inherently Windows specific about them, they're mainly useful for the case of embedding CPython inside a larger application)

One of those was to allow pythonXY.zip to be used as a sentinel indicating the location of PYTHONHOME.

@ezio-melotti ezio-melotti transferred this issue from another repository Apr 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

4 participants