1

我写了一个独立的脚本,依赖于几个修改过的模块。目录结构如下所示:

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”。这是我唯一的选择吗?

4

1 回答 1

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,则可以改为在 setup.py 中添加一个install_requires=参数来告诉 setuptools 您的包需要安装诱变剂。然后您的包可以import mutagen直接安装。)

于 2010-07-30T19:34:25.263 回答