2013-05-27 165 views
2

我有一個模塊,我打包爲setuptools一個雞蛋。我有一個相對/絕對的問題。蟒蛇蛋和相對進口

的目錄結構如下:

setup.py  # using setuptools 
mymodule/ 
|- __init__.py 
|- mymodule_core.py 
|- utils.py 

當我easy_installmymodule從蛋系統,此導入效果很好:

# mymodule_core.py 
from mymodule.utils import some_functions 

但我想也從命令運行mymodule_core.py行,沒有安裝它(簡短測試等)。在這種情況下,以前的導入會失敗,這一點也適用:

# mymodule_core.py 
from utils import some_functions 

如何處理import所以它會在兩種情況下工作?

我想,正確的解決方案將包括if __name__ == "__main__"from .. import something__package__ =但我不能讓它工作

相關:

回答

1

一個簡單的辦法是處理ImportError,像這樣......

# mymodule_core.py 
try: 
    from mymodule.utils import some_functions 
except ImportError: 
    from utils import some_functions 

...這將在你的情況下正常工作。

因爲你的包結構是這樣的一個「相對」的進口將無法正常工作,我傾向於把這樣的事情在源文件的頂部的情況下...

import sys 
import os 

PACKAGE_PARENT = '..' 
SCRIPT_DIR = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(), os.path.expanduser(__file__)))) 
sys.path.append(os.path.normpath(os.path.join(SCRIPT_DIR, PACKAGE_PARENT))) 

...那麼from packagename.modulename import symbols語法無論哪種方式。