我写了一个独立的脚本取决于一些修改过的模块。目录结构如下所示:
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'],
)
问题是我不能在tsup脚本中执行import mutagen
,因为它现在是tsclient.mutagen
。如果我将导入更改为from tsclient import mutagen
,我会收到此错误(来自mutagen的__init__.py
文件):
ImportError: No module named mutagen._util
我认为最好的解决方案是通过mutagen并更改“mutagen”的每个实例并将其更改为“tsclient.mutagen”。这是我唯一的选择吗?
答案 0 :(得分:2)
不幸的是,您需要编辑mutagen才能使其正常工作。
幸运的是,Python 2.5及更高版本的语法可以完全支持您正在做的事情。
请参阅http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports。
假设mutagen目前说,
from mutagen import _util
如果您将其更改为
from . import _util
然后它将继续作为顶级包工作;如果需要,你可以将整个东西移动到一个子包中,它仍然可以工作。
(但是,如果您使用的是setuptools
,则可以在setup.py中添加install_requires=
参数,告诉setuptools您的软件包需要安装mutagen。然后您的软件包就可以{{ 1}}直接。)