[ python-Bugs-1510172 ] Absolute/relative import not working?
SourceForge.net
noreply at sourceforge.net
Tue Jun 27 06:41:11 CEST 2006
Bugs item #1510172, was opened at 2006-06-21 12:35
Message generated for change (Comment added) made by nnorwitz
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1510172&group_id=5470
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Interpreter Core
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Submitted By: Mitch Chapman (mitchchapman)
>Assigned to: Nick Coghlan (ncoghlan)
Summary: Absolute/relative import not working?
Initial Comment:
Trying to import from a module using dotted import syntax produces
this exception:
ValueError: Relative importpath too deep
This behavior has been confirmed on Mac OS X 10.4 using the Python
2.5b1 disk image; and on CentOS 4 using the Python 2.5b1 source
tarball.
The exception is raised regardless of whether the PYTHONPATH
environment variable can see the toplevel directory of the package
being tested; regardless of whether the import is performed from an
interactive Python session or from a script invoked from the command
line; and regardless of whether the main script starts with
from __future__ import absolute_import
To test, I tried to re-create the package structure used as an example
in PEP 328. (See attachments.)
Most of the files were empty, except moduleX.py and moduleY.py:
#moduleX.py:
from __future__ import absolute_import
from .moduleY import spam
#moduleY.py:
spam = "spam"
According to the PEP, if should be possible to import moduleX without
error. But I get the above exception whenever I try to import moduleX
or to run it from the command line.
$ python2.5 moduleX.py
Traceback (most recent call last):
File "moduleX.py", line 3, in <module>
from .moduleY import spam
ValueError: Relative importpath too deep
Is this a usage/documentation error?
----------------------------------------------------------------------
>Comment By: Neal Norwitz (nnorwitz)
Date: 2006-06-26 21:41
Message:
Logged In: YES
user_id=33168
http://mail.python.org/pipermail/python-dev/2006-June/066197.html
Nick you made mention of changing the docs, but I'm not sure
if you did or not. Could you address this bug? Thanks.
----------------------------------------------------------------------
Comment By: Thomas Wouters (twouters)
Date: 2006-06-23 06:52
Message:
Logged In: YES
user_id=34209
See the discussion started at:
http://mail.python.org/pipermail/python-dev/2006-June/066161.html
It's not a bug in 328 or 338 (the PEP that adds the -m
switch for packages), but in the interaction between the
two. I don't think this will be fixed for 2.5, since there
is no obvious fix. If it hurts when you press there, don't
press there. Either don't use -m for packaged modules, or
have the packaged module only use absolute imports. (But
don't be surprised if the script-module is imported twice,
once as __main__ and once as the module itself. That's a
whole other bug/feature.)
----------------------------------------------------------------------
Comment By: Mitch Chapman (mitchchapman)
Date: 2006-06-21 16:57
Message:
Logged In: YES
user_id=348188
Hm... but the same error occurs if one tries to import moduleX from an
interactive Python session, or from a sibling module.
In other words, in 2.5b1 any module which uses relative imports can be used
only as a fully-qualified member of a package. It cannot be imported directly
by a sibling module, and it cannot be used as a main module at all:
$ python2.5 -m package.subpackage1.moduleX
...
from .moduleY import spam
ValueError: Relative importpath too deep
Given other efforts (PEP 299; PEP 338) to make it easier to use modules both
as mainlines and as imports, I still think this is a bug.
----------------------------------------------------------------------
Comment By: iga Seilnacht (zseil)
Date: 2006-06-21 15:59
Message:
Logged In: YES
user_id=1326842
I think this is a usage error. The problem is that
you run moduleX as a script. This puts the module's
directory as the first entry in sys.path (see
http://docs.python.org/dev/lib/module-sys.html#l2h-5058
for detais).
As a consequence, moduleX is recognised as a top
level module, not as part of a package.
If you want to test relative import, try opening an
interactive shell in the directory where `package`
resides, and type:
>>> from package.subpackage1 import moduleX
>>> moduleX.spam
'spam'
----------------------------------------------------------------------
Comment By: Mark Nottingham (mnot)
Date: 2006-06-21 14:16
Message:
Logged In: YES
user_id=21868
Seeing the same behaviour; OSX with the installer.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1510172&group_id=5470
More information about the Python-bugs-list
mailing list