发布人生第一个 Python 包

2022-01-17 18:34:52 +08:00
 huangzhiyia

项目

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX