项目
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"])
1
zhangjinghua 2022-01-17 18:45:08 +08:00
虽然不知道是做什么用的(目前看来好像就是下视频的),但是我还是给了个星星
|
2
lc1450 2022-01-17 18:51:46 +08:00
log4j 警告 🐶
|
3
huangzhiyia OP @lc1450 哈哈哈,( •̀ ω •́ )y 如果以后影响力有那么广就好了,到时候破产可能也要删库跑路🤣🤣
|
4
anc95 2022-01-17 21:47:44 +08:00
不错的开始
|
5
yyingx 2022-01-18 00:12:06 +08:00
目前有比较成熟的 yt_dlp,还是顶楼主
|
6
minmini 2022-01-18 08:52:06 +08:00
几年前做过一个类似的东西。用 flask 监听一个接口,然后 POST 请求传入模块名字和执行参数,就去执行项目文件夹里面的 python 文件。就是为了大家可以吧自己的脚本丢到服务器里面去执行
后来发现有的可以动态加载,有的不行,还是要重启,但是我懒……就没去优化过了 感觉 OP 的这个方案更优雅,准备有空把那个老项目改改了😝 |
7
2i2Re2PLMaDnghL 2022-01-18 12:53:02 +08:00
没有 License ,应被视为专有代码。
|
8
huangzhiyia OP @2i2Re2PLMaDnghL 这个先开发再考虑使用哪个 License
|