当存在具有相同名称的同级文件时导入Python模块

时间:2017-04-14 12:26:28

标签: python

假设我有以下文件

tata/foo.py
tata/yoyo.py

foo/__init__.py
foo/bar.py

在档案foo.py我做

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/foo.py时问题消失。当我有全局模块名称和本地文件名重合时,你能否建议一种解决我的情况的方法。

3 个答案:

答案 0 :(得分:1)

使用:

AverageTimeForFirstReferral

答案 1 :(得分:1)

这是一个例子:

文件:

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

答案 2 :(得分:0)

这似乎是PEP 328

中描述的经典问题
  

本地模块或程序包可以直接影响另一个挂在sys.path

之外的模块

处理它:

  1. 代码应该作为模块而不是脚本(-m选项)执行。
  2. 使用具有所谓&#34;绝对导入行为的Python 3&#34;或者添加

    from __future__ import absolute_import