Import Python Module When There Is Sibling File With The Same Name
Suppose I have following files tata/foo.py tata/yoyo.py foo/__init__.py foo/bar.py In file foo.py I do import foo.bar I run PYTHONPATH=. python tata/yoyo.py and I get Traceback
Solution 1:
Use:
from __future__ import absolute_import
Solution 2:
This is an example:
files:
test
|
import_test
├── foo
│ ├── bar.py
│ ├── bar.pyc
│ ├── __init__.py
│ └── __init__.pyc
├── __init__.py
├── __init__.pyc
└── tata
├── foo.py
├── foo.pyc
├── __init__.py
├── __init__.pyc
└── yoyo.py
yoyo.py:
#!/usr/bin/env python
# encoding: utf-8
from __future__ import absolute_import
from ..foo import bar
print 'cool'
Test command:
cd test
python -m import_test.tata.yoyo
output:
cool
Solution 3:
This seems to be a classical issue described in PEP 328
a local module or package can shadow another hanging directly off sys.path
to deal with it:
- Code should be executed as module rather than script (
-m
option). Use Python 3 which has so-called "absolute import behaviour" or add
from __future__ import absolute_import
Post a Comment for "Import Python Module When There Is Sibling File With The Same Name"