存在同名同级文件时导入Python模块
假设我有以下文件存在同名同级文件时导入Python模块,python,Python,假设我有以下文件 tata/foo.py tata/yoyo.py foo/__init__.py foo/bar.py 在文件foo.pyI中 import foo.bar 我运行PYTHONPATH=。python-tata/yoyo.py我得到了 Traceback (most recent call last): File "tata/yoyo.py", line 1, in <module> import foo.bar ImportError: No m
tata/foo.py
tata/yoyo.py
foo/__init__.py
foo/bar.py
在文件foo.py
I中
import foo.bar
我运行PYTHONPATH=。python-tata/yoyo.py
我得到了
Traceback (most recent call last):
File "tata/yoyo.py", line 1, in <module>
import foo.bar
ImportError: No module named bar
回溯(最近一次呼叫最后一次):
文件“tata/yoyo.py”,第1行,在
导入foo.bar
ImportError:没有名为bar的模块
当我删除tata/foo.py
时,问题消失。当我的全局模块名和本地文件名一致时,您能否建议一种解决方法。使用:
from __future__ import absolute_import
使用:
这是一个例子:
档案:
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'
测试命令:
cd test
python -m import_test.tata.yoyo
输出:
cool
这是一个例子:
档案:
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'
测试命令:
cd test
python -m import_test.tata.yoyo
输出:
cool
这似乎是本文中描述的一个经典问题 本地模块或包可以直接将另一个挂起的模块或包隐藏在sys.path之外 要解决这个问题:
-m
选项)这似乎是本文中描述的一个经典问题 本地模块或包可以直接将另一个挂起的模块或包隐藏在sys.path之外 要解决这个问题:
-m
选项)您是否尝试过使用
PYTHONPATH=$PWD
替代?我刚才尝试过,发现它的工作方式不一样您是否尝试过PYTHONPATH=$PWD
替代?我刚才尝试过,发现它的工作方式不一样