In comp.lang.python, hai scritto: > Sandro Dentella wrote: >> The structure of my package: >> >> python/ >> `-- dbg/ >> |-- __init__.py >> `-- lib >> |-- __init__.py >> |-- debug.py >> `-- gtk_dbg.py >> >> my sys.path includes 'python' and I wanted that the content of debug.py was >> simply included by: 'import dbg', so I wrote dbg/__init__.py as follows: >> >> import os >> Dir = os.path.dirname(__file__) >> __path__ = [os.path.join(Dir, 'lib')] >> from debug import * > > What you probably want in python/dbg/__init__.py to get values is: > > from dbg.lib.debug import *
This does not work: Traceback (most recent call last): File "<string>", line 1, in ? File "dbg/__init__.py", line 8, in ? from dbg.lib.debug import * ImportError: No module named lib.debug > >> BUT, if I set some variables they are not correctly seen: >> import dbg >> dbg.DBG = 1 >> function test included in debug.py raises NameError: >> def test(): >> print DBG >> NameError: global name 'DBG' is not defined` >> >> What's happening? DBG seems to be set, as shown by dir(dbg)... any hints? > You misunderstand modules and python variables. Each module has a > dictionary associating the names of its globals and their current > values. After: > import dbg.lib.debug, dbg.lib.gtk_dbg > you have four modules: > dbg # Corresponds to python/dbg/__init__.py > dbg.lib # Corresponds to python/dbg/lib/__init__.py > dbg.lib.debug # Corresponds to python/dbg/lib/debug.py > dbg.lib.gtk_dbg # Corresponds to python/dbg/lib/gtk_dbg.py > Each has its own globals. > after: > dbg.DBG = 1 > the dbg module's global dictionary contains an entry mapping 'DBG' to 1 > after: > dbg.DBG = 1+2 > the dbg module's global dictionary contains an entry mapping 'DBG' to 3 > > In no case will an assignment to a global in dbg cause an assignment to > anything in dbg.lib.debug. The "from dbg.lib.debug import *" statement > can be seen as a module import followed by a fancy multiple assignment, > where module dbg.lib.debug is first imported, then its globals are > assigned to globals of the same names in module dbg. This confirms to me that I'm seriously confused... so I started with a very simple setup: $ cat dbg.py DBG = 1 def test(): global DBG print DBG def set(): global DBG DBG = 3 $ cat m.py from dbg import * test() #dbg.DBG = 2 ## does not work, no way to assign in module dbg set() # this acts in dbg module and sets 'DBG = 3' test() # test the value of DBG print DBG $ python m.py 1 3 # changed by 'set' that was 'imported' 1 # value of local DBG isn't this contraddicting you words: > can be seen as a module import followed by a fancy multiple assignment, > where module dbg.lib.debug is first imported, then its globals are > assigned to globals of the same names in module dbg. So: which is the way I can change a value of a package 'imported', only with a function that sets it? is there a way to assign the value directly? is there any way to make some introspection of what is really there (in dbg)? Thanks angain for any possible hint. sandro *:-) -- Sandro Dentella *:-) http://www.tksql.org TkSQL Home page - My GPL work -- http://mail.python.org/mailman/listinfo/python-list