Relative Package Import
Peter Otten
__peter__ at web.de
Thu Jul 10 02:11:11 EDT 2008
Kay Schluehr wrote:
> On 8 Jul., 21:09, Peter Otten <__pete... at web.de> wrote:
>> Robert Hancock wrote:
>> > mypackage/
>> > __init__.py
>> > push/
>> > __init__.py
>> > dest.py
>> > feed/
>> > __init__py
>> > subject.py
>>
>> > In subject.py I have
>> > from ..push import dest
>>
>> > But i receive the error:
>> > Caught exception importing module subject:
>> > File "/usr/local/python/lib/python2.5/site-packages/pychecker/
>> > checker.py", line 621, in setupMainCode()
>> > module = imp.load_module(self.moduleName, file, filename, smt)
>> > File "subject.py", line 1, in <module>()
>> > from ..feed import dest
>> > ValueError: Attempted relative import in non-package
>>
>> > What am I missing?
>>
>> When you run subject as a file
>>
>> pychecker mypackage/feed/subject.py
>>
>> subject.py is regarded as a standalone script, not as part of a package.
>> Try
>>
>> pychecker mypackage.feed.subject
>>
>> instead to invoke the module via the standard import mechanism.
>>
>> Peter
>
> Since when are Python modules not regarded as standalone scripts but
> as a "part of a package"?
>
> The only indication that there is some duality and that it is relevant
> at all are those relative imports that came in with Python 2.5. As it
> seems this feature is justified by the artificial semantic differences
> it produces.
I'm probably misunderstanding you, but the ambiguity I wanted to point out
has existed before and has nothing artificial:
$ tree
.
`-- mypackage
|-- __init__.py
|-- feed
| |-- __init__.py
| |-- subject.py
| `-- subject.py~
`-- push
|-- __init__.py
`-- dest.py
3 directories, 6 files
$ python2.4 -c "import mypackage.push.dest as d; print d.__name__"
mypackage.push.dest
$ cd mypackage/push/
$ python2.4 -c "import dest as d; print d.__name__"
dest
".." in the import goes one up in the package name, not in the filesystem
and therefore won't work in the second example.
Peter
More information about the Python-list
mailing list