项目
https://github.com/zmaplex/fetch_import
为什么造轮子
因为自己最近要编写插件系统,如果写死在项目中,每次都要随着项目更新才能更新插件。然后自己想把插件放在一个可访问的 URL 中,每次都要重新写一遍动态加载的代码,感觉很烦所以有了这个简陋的项目。
兼容性啥的都没有,建议 Python 版本 >= 3.6 。
示例
from fetch_import import import_attr
# equivalent "from youtube_downloader import YoutubeDownloader"
@import_attr(
"https://raw.githubusercontent.com/zmaplex/fetch_import/main/example/youtube_downloader.py",
"YoutubeDownloader")
def main():
ydl_opts = {
'f': 'bestvideo+bestaudio[ext=m4a]',
'ratelimit': 1024 * 1024 * 1024,
'merge-output-format': 'mp4'}
job_args = {
"job_id": "63ba4e4e67cf417ab6a27365cecabec5",
"plugin_args": {
"url": "https://www.youtube.com/watch?v=UvuJx7rVUxg",
"ydl_opts": ydl_opts
}
}
yd = YoutubeDownloader()
yd.run(**job_args)
想要改进的
这是今天匆忙赶出来的第一个版本,有很多想法没实现,也有很多问题,包括使用文档还没有写。
未来几周会抽出时间逐渐完善的,初步想要实现的是暴露两个方法去远程加载包。
比如实现远程加载以下的对象
# 这个可以用 import_attr 来实现
from typing import List, Dict, Tuple, Any
# 待实现
import typing
from typing import *
我希望只要暴露两个装饰器以及函数能实现以上的功能就可以了。
# 目前只暴露了一个装饰器只能这样实现
@import_attr("https://example.com/typing.py","List")
@import_attr("https://example.com/typing.py","Dict")
@import_attr("https://example.com/typing.py","Tuple")
@import_attr("https://example.com/typing.py","Any")
def main():
pass
# 后续会增加 一个装饰器以及函数来实现更简短的代码
# @import_attrs("https://example.com/typing.py",["List","Dict","Tuple","Any"])
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.