Kartic wrote:
I'm not sure I understand, as I am currently relying on the system implementations of any modules that happen to be loaded before my code picks up. As to what's in the databaseSteve,
I believe you have to put ntpath, macpath and posixpath in the module database for os.path to work.
I tried it with zipimporter builtin and I got the same traceback till I added ntpath.py to my zip file. (Of course, I renamed the original ntpath to _ntpath so that the original did not get imported) Thanks, --Kartic
SELECT * FROM `module` WHERE modName LIKE '%path%'
shows that I have macpathm macurlpath, ntpath, nturlpath, os2emxpath and posixpath all there (but, as I say, I've already executed the standard modules by the time anything of mine gets to run). If I alter my test program to:
import dbimp, sys
if __name__ == "__main__": dbimp.install() k = sys.modules.keys() k.sort() for kk in k: print kk #import bsddb.db import a.b.c.d import bsddb
then I get as output
MySQLdb
MySQLdb.MySQLdb
...
MySQLdb.types
UserDict
__builtin__
__main__
_codecs
_locale
_mysql
_mysql_exceptions
_sre
array
cPickle
codecs
copy
copy_reg
db
dbimp
...
mx.Misc
mx.Misc.LazyModule
new
nt
ntpath
os
os.path
re
...
zipimport
Accepted *db*
found a in db
load_module: a
a loaded: <module 'a' from 'db:a'> pkg: 1
found a.b in db
load_module: a.b
a.b loaded: <module 'a.b' from 'db:a.b'> pkg: 1
found a.b.c in db
load_module: a.b.c
a.b.c loaded: <module 'a.b.c' from 'db:a.b.c'> pkg: 1
found a.b.c.d in db
load_module: a.b.c.d
a.b.c.d loaded: <module 'a.b.c.d' from 'db:a.b.c.d'> pkg: 0
found bsddb in db
load_module: bsddb
found weakref in db
load_module: weakref
weakref loaded: <module 'weakref' from 'db:weakref'> pkg: 0
Traceback (most recent call last):
File "test.py", line 11, in ?
import bsddb
File "/c/steve/Projects/Python/dbimp/dbimp.py", line 49, in load_module
exec code in module.__dict__
File "db:bsddb", line 62, in ?
File "/usr/lib/python2.4/os.py", line 133, in ?
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
ImportError: No module named path
In other words, the os module is /already/ in sys.smodules, as is os.path, yet the interpreter is complaining (I presume) that os.path is not a module. I don't even know *why* os is being executed a second time. I can only assume it's being imported as some other name like "bsddb.os" and some element of the import system is actually doing an import rather than refusing to guess.
I presume I need to control the import process more closely to make sure that this import attempt is rejected, but I can't see how to do that.
regards Steve
-- http://mail.python.org/mailman/listinfo/python-list