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

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,则会收到此错误(来自诱变的__init__.py文件):

ImportError: No module named mutagen._util


我认为最好的解决方案不是遍历诱变并更改“诱变”的每个实例,然后将其更改为“ tsclient.mutagen”。这是我唯一的选择吗?

最佳答案

不幸的是,您确实需要编辑诱变剂才能完成这项工作。

幸运的是,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。)

关于python - 编写setup.py文件时,如何包括修改后的第三方模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3373779/

10-10 18:21