我创建了一个具有以下目录结构的 Python 包:
/
LICENSE
MANIFEST.IN
README.rst
VERSION
docs/
multitool/
__init__.py
core/
__init__.py
classes.py
utils.py
libs/
multitool.py
tests/
tools/
__init__.py
hashtool.py
webtool.py
setup.py
目标是创建一个命令行应用程序 (multitool.py),第 3 方可以通过将自己的文件添加到工具目录来添加该应用程序。这是通过让他们对我创建的类进行子类化来完成的。例如,这些是 hashtool.py 的前几行:
import multitool
class HashTool(multitool.core.classes.CLITool):
只要我从项目目录本身运行它,所有这些都有效:
$ ./multitool.py -h <---works
$ ./multitool/multitool.py -h <---works
当我尝试将其创建并安装为包时,问题就出现了。安装运行并安装脚本。但是,当您运行脚本时,它找不到包中的任何模块:
$ multitool.py
import core
ImportError: No module named core
我尝试将导入更改为 multitool、multitool.core、.multitool、..multitool 和其他文件,但结果相同。
但是,我am能够从 Python 解释器进行导入:
Type "help", "copyright", "credits" or "license" for more information.
>>> import multitool
>>> import multitool.core
>>> import multitool.core.classes
>>> from multitool import core
>>>
这是我的 setup.py 的相关部分
setup(
name = 'multitool',
version = __version__,
license = 'GPLv2',
packages = find_packages(exclude=['test/']),
scripts = ['multitool/multitool.py'],
include_package_data = True,
....
)
我究竟做错了什么?如何从随包安装的脚本中的工具目录中导入我自己的代码和文件?
UpdatedMrAlias 在下面编辑的评论有效。令人困惑的是,该脚本与包本身同名,并且不在单独的目录中。将脚本移至其自己的 bin/ 目录解决了问题。