2010-07-30 40 views
1

我寫了一個獨立的腳本取決於一些修改後的模塊。目錄結構是這樣的:如何在編寫setup.py文件時包含修改的第三方模塊?

client 
    setup.py 
    tsclient 
    __init__.py 
    tsup 
    utils.py 
    mutagen 
     __init__.py 
     blah.py 
     blah.py 
     ... 
    colorama 
     __init__.py 
     blah.py 
     blah.py 
     ... 

目前,如果我只是符號鏈接usup腳本我~/bin目錄,我可以直接調用腳本,它沒有任何問題(正常進口的一切,沒有任何問題)的作品。

現在我想製作一個setup.py腳本,以便分發它。我無法弄清楚如何去做。以下是我現在有:

setup(
    name='tsclient', 
    version='1.0', 
    scripts=['tsclient/tsup'], 
    packages=['tsclient', 'tsclient.mutagen', 'tsclient.colorama'], 
) 

的問題是,我不能只是做import mutagen在TSUP腳本,因爲它現在tsclient.mutagen。如果我更改導入說from tsclient import mutagen我得到這個錯誤(從誘變的__init__.py文件):

ImportError: No module named mutagen._util 

我不認爲最好的辦法是要經過誘變劑,改變「誘變劑」和變化的每一個實例它到「tsclient.mutagen」。這是我唯一的選擇嗎?

回答

2

不幸的是,你需要編輯誘變劑才能完成這項工作。

幸運的是,Python 2.5及更高版本的語法支持您正在做的事。

請參閱http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

假設目前誘變說,

from mutagen import _util 

如果你改變它說

from . import _util 

那麼它將繼續作爲一個頂級包工作;如果需要的話,你可以把整個東西變成一個子包,它仍然可以工作。

(不過,如果你正在使用setuptools,可以改爲添加install_requires=論點setup.py告訴setuptools的,你的包需要誘變劑進行安裝。那麼你的包可能只是import mutagen直接。)

相關問題