Steven D'Aprano <steve+pyt...@pearwood.info> added the comment:

> Shouldn't that say that "'environ' is not a package" instead?

No. The os module is special, so I'll talk about the usual case first.

Normally, for `import spam.eggs` to succeed, *spam* has to be a package, and 
*eggs* has to be either a sub-module inside that package, or a sub-package. So 
the general error message is correct. You can't normally use the dotted import 
syntax to import functions from a module.

But the `os` module is special: it is very old, pre-dating the invention of 
packages, and the `os` module fakes a pretend package for `os.path` by doing 
this:

    sys.modules['os.path'] = path


So even though `os` is not a package, you can still use dotted package syntax 
to import `os.path`.

I guess this was intended as a convenience, without considering how this could 
be confusing.

----------
nosy: +steven.daprano

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39637>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to