我创建了一个 Python 包,其中包含纯模块和脚本,都在同一个文件夹中。脚本需要利用模块中的功能,因此只需导入它们:
import *module*
我现在希望与其他人分享这个包,所以我使用 distutils 把它变成了一个可分发的包。按照 distutils文档的指示,我在我的包中的“setup.py”中声明了脚本文件,如下所示:
setup(...,
scripts=['path/to/script/a', 'path/to/script/b']
)
安装此软件包后,我注意到 distutils 已将我的命令行脚本的副本安装到我的 Python 安装中的“脚本”文件夹中。一切都很好。现在,如果我尝试运行这些脚本中的任何一个,它会失败并显示:
ImportError: No module named *module*
这可能是因为脚本和模块之间的相对路径在安装后发生了变化,因此它无法再找到模块。所以我的问题是,你应该如何从同一个包中的脚本导入模块,以便它既可以与 distutils 预捆绑,也可以在安装后工作?
现在我可以通过像这样修改我的模块导入来轻松解决这个问题:
try:
import *module*
except ImportError:
from *package* import *module*
这似乎有点骇人听闻。我在这里错过了一个技巧吗?我本来希望 distutils 会为我解决这个问题。有没有更好更强大的方法来处理这个问题?