Comments (8)
@rmuchan 既然是插件式的开发,所以我并不推荐在插件间进行import,这可能带来不必要的麻烦,插件间应该尽可能的解耦。
from . import
错误
关于这个问题,你可以尝试如下:
目录结构
BotRepo/
bot/
plugins/
a.py
b.py
解决方案一
在 a.py
定义 __package__ = "plugins"
然后 from .b import xxx
解决方案二
在 b.py
中使用 from a import xxx
绝对路径import,前提是a插件在b之前被加载!
from nonebot2.
此外,我注意到NB1中load_plugins是通过调用load_plugin实现的,NB2中直接调用了底层的_load。这一变化使我的bot中对load_plugin的挂钩(为了监视自动部署状态)失效了。请问是为什么做出了这个选择呢?
from nonebot2.
Python 3 以后,当相对目录中没有 __init__.py 时 Python 不会将该目录识别为一个包,因此会返回 no known parent package ,请问这两个 py 文件是否包含了 __init__.py ?
from nonebot2.
Python 3 以后,当相对目录中没有 init.py 时 Python 不会将该目录识别为一个包,因此会返回 no known parent package ,请问这两个 py 文件是否包含了 init.py ?
添加__init__.py后仍然报错。测试中发现并没有执行__init__.py的内容,那就是说没有加载插件的父包?
from nonebot2.
Python 3 以后,当相对目录中没有 __init__.py 时 Python 不会将该目录识别为一个包,因此会返回 no known parent package ,请问这两个 py 文件是否包含了 __init__.py ?
添加 __init__.py 后仍然报错。测试中发现并没有执行 __init__.py 的内容,那就是说没有加载插件的父包?
通过 nonebot.load_plugin 加载指定的一个包,py文件或者存在 __init__.py 的文件夹(被 Python3 所承认的一个合法的包)。相应地, nonebot.load_plugins 也要满足这些条件,考虑你当前的情况可能是需要被导入的包已经嵌套在了多层目录内,那该情况对应的其所有父级目录都需要存在 __init__.py (可以根据情况在必要层级的 __init__.py 进行额外的 import
from nonebot2.
Python 3 以后,当相对目录中没有 init.py 时 Python 不会将该目录识别为一个包,因此会返回 no known parent package ,请问这两个 py 文件是否包含了 init.py ?
添加 init.py 后仍然报错。测试中发现并没有执行 init.py 的内容,那就是说没有加载插件的父包?
通过 nonebot.load_plugin 加载指定的一个包, py 文件 或 存在 init.py 的文件夹(被 Python3 所承认的一个合法的包)。相应地, nonebot.load_plugins 也要满足这些条件,考虑你当前的情况可能是需要被导入的包已经嵌套在了多层目录内,那该情况对应的其所有父级目录都需要存在 init.py (可以根据情况在必要层级的 init.py 进行额外的 import
当目录结构如下所示:
repo/ # 工作目录
plugins/
addons/
management/
__init__.py
solver.py
test.py
base.py
以上情况通过 nonebot.load_plugins('plugins') 只能导入 base.py ,因为 addons 目录没有 __init__.py 不是一个合法的包。
此例为了在 solver.py 内导入 test.py 需要确保 addons 目录存在 __init__.py 即构成一个合法的包,然后就可以在 solver.py 通过
from plugins.addons import test # 当然,需要 plugins/ 目录也存在 __init__.py
才能成功导入 test.py,或者按题主的原意,在 solver.py 用过
from .. import test
来成功导入 test.py 。而像题主在最开始所说的
2.在一个文件中通过相对路径导入另一个(from . import)
理论上如果这个包合法并被成功导入,那同目录下自然可以用 from . import xxx 导入另一个 py 文件。
猜测实际情况可能是从多个父级导入,或者这个问题的本身就是 nonebot.load_plugins() 所使用的路径错。
from nonebot2.
此外,我注意到NB1中load_plugins是通过调用load_plugin实现的,NB2中直接调用了底层的_load。这一变化使我的bot中对load_plugin的挂钩(为了监视自动部署状态)失效了。请问是为什么做出了这个选择呢?
由于nb1中load_plugins需要同时提供路径以及import的前缀,nb2中希望仅通过提供路径进行import,使用了pkgutil.iter_modules
遍历路径下的所有插件,如果找到替代方案可以改进这一部分
from nonebot2.
既然是插件式的开发,所以我并不推荐在插件间进行import,这可能带来不必要的麻烦,插件间应该尽可能的解耦。
有道理,我之前的使用方式跟NB的设计有些出入。把文件下移了一层解决了。
from nonebot2.
Related Issues (20)
- Adapter: DoDo HOT 1
- Plugin: SCUM HOT 1
- Feature: 建议插件商店新增一个更新排序 HOT 1
- Plugin: 用户 HOT 1
- Plugin: 短链接服务支持 HOT 3
- Plugin: 文件托管支持 HOT 2
- Plugin: sm.ms图床 HOT 1
- Bug: 使用正向连接的适配器在 NoneBot 启动完毕前处理事件 HOT 11
- Plugin: 群聊 NSFW 图片检测 HOT 1
- Feature: 查看已安装插件及版本 HOT 4
- Feature: 支持Graceful Shutdown(等待正在执行的matcher执行完毕后再退出) HOT 1
- Plugin: ba塔罗牌,运势与魔法占卜! HOT 6
- Plugin: CNRail HOT 1
- Plugin: nonebot_plugin_longtu HOT 1
- Plugin: Riffusion HOT 2
- Plugin: Phigros查分器(Adapter-qq) HOT 22
- Plugin: AntiMonkey HOT 1
- Plugin: nonebot-plugin-imagemaster HOT 9
- Plugin: Waiter 插件 HOT 1
- Plugin: nonebot_plugin_nikke HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nonebot2.