首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在写入setup.py文件时,如何包含修改后的第三方模块?

在写入setup.py文件时,如何包含修改后的第三方模块?
EN

Stack Overflow用户
提问于 2010-07-31 01:05:32
回答 1查看 423关注 0票数 1

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

代码语言:javascript
复制
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脚本,这样我就可以分发它了。我想不出该怎么做。这是我现在所拥有的:

代码语言:javascript
复制
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文件):

代码语言:javascript
复制
ImportError: No module named mutagen._util

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-31 03:34:25

不幸的是,您确实需要编辑变异体才能使其工作。

幸运的是,Python2.5和更高版本的语法完全支持您正在做的事情。

参见http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

假设变种人现在说,

代码语言:javascript
复制
from mutagen import _util

如果您将其更改为

代码语言:javascript
复制
from . import _util

然后,它将继续作为顶级包工作;如果需要,您可以将整个内容移动到子包中,它仍然可以工作。

(但是,如果您使用的是setuptools,则可以改为在setup.py中添加install_requires=参数,以告知setuptools您的软件包需要安装mutagen。然后你的包就可以直接import mutagen了。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3373779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档