'Python package name conflict
I have (ended up with) my packages being setup in the following way. There are two packages with the same name, but one of them is inside package_a.
├── package_a/
│ ├── __init__.py
│ └── package_aa/
│ ├── __init__.py
│ └── module_a.py
│ └── module_c.py
└── package_aa/
├── __init__.py
└── module_b.py
How do I import both module_a.py and module_b.py in my code? The following
from package_a.package_aa import module_a; from package_aa import module_b;
fails with the error message
ImportError: cannot import name 'module_b' from 'package_aa' (.\package_a\package_aa\__init__.py)
All __init__.py files contain a single line
import os, sys; sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
Renaming is unfortunately not an option as I am not the owner of these packages.
EDIT : Swapping works. Thanks. I have a follow up question : Suppose in module_c.py, modula_a.py is imported like this from package_aa import module_a. Then the following fail with similar error, but it is not as apparent (to the user) as in the original question
from package_aa import module_b; from package_a import module_c
How can the owner of package_a modify it so that its users don't run into errors like this? I am starting to think, the way __init__.py is written might not be right. Although, I have seen answers elsewhere which suggests adding sys.path.append or sys.path.insert in this fashion.
Solution 1:[1]
My guess would be to swap them like this:
from package_aa import module_b
from package_a.package_aa import module_a
This way, package_aa is not referenced in the path.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | 9769953 |
