2015-11-19 59 views
0

我有以下文件結構的項目:上python3模塊導入不python2

test/ 
    test.py 
    extra/ 
     stuff.py 
     __init.py__ 

爲test.py的代碼很簡單:

import sys 
sys.path.append("/path/to/test") 
import extra 

這愉快地運行使用python3 test.py,但會沒有運行在python 2.7中,我完全難以理解這個話題的許多問題。

由Python 2.7版給出的錯誤是

Traceback (most recent call last): 
    File "test.py", line 3, in <module> 
    import extra 
ImportError: No module named extra 

感謝您的幫助!

回答

0

這是從複製粘貼: http://python3porting.com/differences.html

在Python 2,如果你有一個名爲mypackage包,並且包含一個名爲csv.py模塊,它會隱藏csv模塊從標準圖書館。代碼導入csv會在mypackage中導入本地文件,從標準庫導入會變得棘手。

在Python 3中,這已更改,以便導入csv將從標準庫導入,並導入需要編寫的本地csv.py文件。導入csv並從csv導入my_csv需要從.csv導入my_csv更改爲。這些被稱爲「相對進口」,並且還有一個從上一級模塊導入的語法;從..進口csv。

如果您同時支持Python 2和Python 3而不使用2to3 from。並從..語法已經可用,因爲從Python 2.5,一起從未來導入absolute_import語句,將行爲更改爲Python 3的行爲。

如果您需要支持Python 2.4或更早版本,則必須拼出整個包名稱,以便導入csv從mypkg導入csv和從csv導入my_csv從mypckg.csv導入my_csv。爲了清晰和可讀性,如果可以,並且總是拼出整個路徑,我會避免相對輸入。

2to3會檢查您的導入是否爲本地並更改它們。

總之,Python2可以讓你逃脫相對的進口,python3 不會。

+0

感謝您的支持。 – Jack