2017-04-14 104 views
0

假設我有以下文件進口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時問題消失。當我有全局模塊名稱和本地文件名稱重合時,能否請您提出一種解決方案。

+0

你試過'PYTHONPATH = $ PWD'呢? –

+0

我剛剛嘗試過,發現它不能以相同的方式工作 –

+0

[請參閱此答案](https://stackoverflow.com/questions/1224741/trying-to-import-module-with-the-same-名稱作爲一種內置模塊死因-的導入/ 1224760#1224760) – xiaoyi

回答

1

用途:

from __future__ import absolute_import 
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 
0

這似乎是在PEP 328

本地模塊或包裝描述可以影彼此直接掛sys.path中經典問題

處理它:

  1. 代碼應該作爲模塊而不是腳本執行(-m選項)。
  2. 使用Python 3已經所謂的 「絕對導入行爲」 或添加

    from __future__ import absolute_import 
    
相關問題