2010-07-30 74 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直接。)

相关问题