我写了一个独立的脚本依赖于一些修改过的模块。目录结构如下所示:
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我不认为最好的解决方案是通过诱变剂,并更改每个实例的“诱变剂”,并将其更改为"tsclient.mutagen“。这是我唯一的选择吗?
发布于 2010-07-31 03:34:25
不幸的是,您确实需要编辑变异体才能使其工作。
幸运的是,Python2.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您的软件包需要安装mutagen。然后你的包就可以直接import mutagen了。)
https://stackoverflow.com/questions/3373779
复制相似问题