> > Just as sys.path currently has default directory names, default > > zip archive names are added too. Otherwise there is no way to > > import all Python library files from an archive. > > A standard for this would be really cool. Yup. > > Suppose import.c generates the path > > "/A/B/SubDir/Q/R/modfoo.pyc". Then it will also generate the path > > "/C/D/E/Archive.zip/Q/R/modfoo.pyc". Finding the SubDir path is > > exactly equivalent to finding "Q/R/modfoo.pyc" in the archive. > > So python packages and modules can exists *only* at the top level? That > would conflict somewhat with jython where at would be common to put > python modules into the same .zip file as java classes and java classes > also wants to own the root of a zip file. > > In the current implementaion in jython, we can put python modules under > any path and add the zipfile!path to sys.path: > > sys.path.append("/path/to/zipfile.zip!Lib") > > which will look for Lib/Q/R/modfoo.py (and Lib/Q/R/modfoo$py.class) in > the archive. Maybe it's possible to allow "/path/to/zipfile.zip/subdirectory/etc/" in sys.path? That sounds better than picking a random new character as delimiter. > [I found efficiency hard to achieve in jython because opening a zipfile > in java also cause the zip index to be read into a dictionary. So we > did not want to reopen a zipfile if it can be avoided. Instead we hide a > reference to the opened file in sys.path so that when removing a zipfile > name from sys.path, the file is eventually closed.] I don't think Python has this problem, since we have control over the zipfile reading code. > Would entries in the static python dict be removed when a zipfile is > removed from sys.path? It can be arranged that they are removed at some later point (e.g. when sys.path is next searched). > What is the __path__ vrbl set to in a module imported from a zipfile? > Can the module make changes to __path__ and will be changes to used when > importing submodules? > > What value should __file__ have? IMO these two questions are answered by the pathname semantics that Jim proposes: __file__ = "/C/D/E/Archive.zip/Q/R/modfoo.pyc" and __path__ = ["/C/D/E/Archive.zip/Q/R"]. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4