存在同名同级文件时导入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选项)
  • 使用Python3,它具有所谓的“绝对导入行为”或添加


  • 这似乎是本文中描述的一个经典问题

    本地模块或包可以直接将另一个挂起的模块或包隐藏在sys.path之外

    要解决这个问题:

  • 代码应该作为模块而不是脚本执行(-m选项)
  • 使用Python3,它具有所谓的“绝对导入行为”或添加


  • 您是否尝试过使用
    PYTHONPATH=$PWD
    替代?我刚才尝试过,发现它的工作方式不一样您是否尝试过
    PYTHONPATH=$PWD
    替代?我刚才尝试过,发现它的工作方式不一样