Achim Domma (Procoders) wrote:
> Achim Domma (Procoders) wrote:
>
>> Seems like I'm mixing up something in a very bad way, but I have no
>> idea what I'm doing wrong!?
>
>
> I have moved the calculation of VERSION to a module _Version.py which
> contains a function Version(), which is imported by __init__.py and
> _C.py. That works and is much cleaner, but I would still be happy if
> somebody could explain we, what's going wrong.
>
> regards,
> Achim
Well, the big problem with your original formulation is your circular
imports. In brief ...
If A imports B, and B imports A, the copy of A that B sees is the
incompletely-executed definition at the time that the import of B was
started.
When you say in your first post """
Now I should be able to write:
import A.B
if A.B.VERSION[0]=5:
do_something()
but
from A.B import VERSION
does not work.""", are you trying to use both those formulations in the
same module? You do not explain what you mean by "does not work", so I
suspect that you are trying to use a package=based reference
(A.B.VERSION) when you have actually imported the VERSION variable into
your namespace.
sholden@dellboy ~
$ cat pkg/__init__.py
#!/usr/bin/python
objv = "2.3.45"
VERSION = tuple([int(x) for x in objv.split(".")])
del objv
sholden@dellboy ~
$ python -c "from pkg import VERSION; print VERSION"
(2, 3, 45)
The above is not an exact match for your code, but it shows that when
you use the "from" form of the import statement the imported variables
appear directly in the namespace of the importing module, so there is no
need to qualify them with the package name.
Hope this helps. If not, perhaps you could post some actual error
messages to explain what you mean by "does not work".
regards
Steve
--
http://www.holdenweb.com
http://pydish.holdenweb.com
Holden Web LLC +1 800 494 3119