Ka-Ping wrote:
On Wed, 7 Jun 2000, Andy Robinson wrote:
We hit some very weird behaviour recently while setting up a package hierarchy. Robin Becker managed to distil this into a simple example. Can anyone shed any light on what is happening below? Is Python behaving as it should?
[snip entirely correct analysis]
The solution is to avoid directly running scripts that are inside packages; the confusion is produced by the fact that you're running "test.py" from within the A/ directory.
I disagree with the moral. If test.py uses "import A.parent" and changes references accordingly, it works. So my version of the moral is that import * is EVIL. Not only that, but relative imports are EVIL. This is what I meant when I said (in reply to Greg Wilson's inquiry about package structures) that there are some very bad precedents getting set. Doing this junk (usually in __init__.py) not only makes your package fragile, it also makes the package structure mysterious to the user (who's a developer - making things mysterious to him/her is just making both your lives harder!). If you want to make it friendly to lazy coders, then something like: import A.parent Parent = A.parent.Parent also works, (leaving references as Parent). I'm not terribly fond of this, either, but at least the coder has a reasonable hope of tracking down what "Parent" actually is. I'm not necessarily yelling at you, Andy. It seems that most package developers are going down this slope. It stinks. - Gordon