gpt4 book ai didi

python - 安装的 Python 脚本无法导入包模块

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:05 25 4
gpt4 key购买 nike

我创建了一个具有以下目录结构的 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 方可以通过将自己的文件添加到 tools 目录来添加该应用程序。这是通过让他们对我创建的类进行子类化来实现的。例如,这些是 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 和其他具有相同结果的导入。

但是,我能够从 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,
....
)

我做错了什么?如何在随包安装的脚本中导入我自己的代码和工具目录中的文件?

已更新MrAlias 在下面编辑的评论有效。令人困惑的是该脚本与包本身同名并且不在单独的目录中。将脚本移动到它自己的 bin/目录解决了这个问题。

最佳答案

首先,当您安装包时,您正在导入核心,但没有识别它是 multitool 包的一部分。所以:

import core

应该是,

from multitool import core

这样解释器就知道要从中导入核心的模块。

[编辑]

至于安装包的目录结构,脚本需要从模块本身进入一个单独的目录。所示目录结构的方式 Distutils 会将您指定的脚本安装到系统查找可执行文件的位置以及包本身,这很可能是所有混淆的来源。

关于python - 安装的 Python 脚本无法导入包模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24221631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com