2013-02-02 27 views
27

我有一個名爲extended.py模塊,它包含以下行:「非包嘗試相對進口」在一個目錄

from .basic import BasicModule 

basic.py駐留在同一目錄中的文件__init__.py

python extended.py 

我得到的錯誤:

ValueError: Attempted relative import in non-package 

還加入一行:

from __future__ import absolute_import 

不能解決問題但是,當我嘗試運行它。 也許我太累了,看不到明顯的 - 但我沒有看到問題在這裏。

+1

可能的重複[試圖相對導入非包甚至\ _ \ _ init \ _ \ _。py](http://stackoverflow.com/questions/11536764/attempted-relative-import-in-non- package-even-with-init-py) – BrenBarn

+0

'python -m parent_directory.extended'? – SparkAndShine

+0

可能重複的[如何在Python中執行相對導入?](http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python) –

回答

47

相對導入僅適用於軟件包,但是當您導入extended.py時,您正在運行頂級模塊

當前目錄可能包含__init__.py文件,但該文件不會使exended.py包成爲其中的一部分。

對於某些需要考慮的軟件包,您需要導入目錄名稱。下面將工作:

main.py 

packagename\ 
    __init__.py 
    basic.py 
    extended.py 

然後在main.py地說:

import packagename.extended 

只有然後是包的一部分extended,做相對進口工作。

相對導入現在有一些相對的packagename父。

+3

但是我怎麼能夠運行'在這種情況下單位測試?我是否需要爲這些導入情況指定一個python參數(-m)? – Alex

+0

對於未在包中定義的任何內容,請勿使用相對導入,而應使用絕對導入。 unittest腳本不是包的一部分,它是一個外部腳本。 –

+0

我一直以爲應該把單元測試放在同一個模塊內? python與unitest有一個好習慣還是一個PEP? – Alex

相關問題