我写了一个独立的脚本,它依赖于一些修改后的模块。目录结构如下所示:
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/