[New-bugs-announce] [issue30503] It should be possible to use a module name with the same name as a package name

Håkon Hægland report at bugs.python.org
Mon May 29 04:22:55 EDT 2017


New submission from Håkon Hægland:

I have the following folder structure:

.
├── aaa
│   ├── bbb
│   │   ├── ccc.py
│   │   └── __init__.py
│   ├── bbb.py
│   └── __init__.py
├── __init__.py
└── t.py

./t.py:

import sys
sys.path = ['.']
import aaa.bbb
print(aaa.bbb.get_name())

./aaa/bbb.py:

def get_name():
    return "aaa/bbb"

however, when I run the main script:

$ python -B t.py 
Traceback (most recent call last):
  File "t.py", line 5, in <module>
    print(aaa.bbb.get_name())
AttributeError: module 'aaa.bbb' has no attribute 'get_name'

The reason is that there is also a package with name 'aaa.bbb' (i.e. file "./aaa/bbb/__init__.py") and python will see this package before it sees my module "./aaa/bbb.py" and will never load the module.

If this is correct, than this is a bad design in my opinion. I should be possible to use a module with the same name as a package. 

Thanks for considering this issue, and let me know if I can help improve Python at this point.

Note: I asked the question first at stackoverflow.com:
https://stackoverflow.com/q/44227763/2173773

----------
components: Interpreter Core
messages: 294682
nosy: hakonhagland
priority: normal
severity: normal
status: open
title: It should be possible to use a module name with the same name as a package name
type: enhancement

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30503>
_______________________________________


More information about the New-bugs-announce mailing list