-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
search for needed package files locally instead of using pip every time #29
Comments
importlib.metadata 这俩还真没研究过,我实际做的东西很少,就是实现了类似 shiv 的功能,然后加一个延迟安装的功能进去,使它运行时安装依赖,可以减轻打包体积和重复安装的浪费时间,一开始是给 hadoop 和 Serverless 里用的 我研究研究你说的metadata |
importlib.metadata 用起来挺现代的,就是向后兼容(包括老pip 元数据相关)不太好确定,zipapps 一开始面向无依赖+兼容3.6 是因为公司用的老服务器上只有 3.6 环境,兼容性风险还是挺大的。惰性安装也是为了跨平台+跨版本发布用的 倒是学到新知识了 |
对于较低版本,可以使用移植的importlib-metadata,但是pypi页面显示这个包最早也只能支持到3.8。 我提出这个issue主要是想优化内置依赖的打包。在打包端已经安装需要的包时,就不需要再重新下载一遍了。 |
另外,当前版本的 |
非惰性安装走的 pip install -t 的方式,没想到元数据居然不带进去,这有点麻烦 importlib-metadata 这个库破坏了 zipapps 一开始的 “无第三方依赖” 的初衷,而且收益和风险不成比例,暂时不打算带进去 你提到的避免重新下载,如果一开始就在 venv 里打包的话,直接把 site-packages 目录带过去可以勉强做一下,惰性安装其实多次安装也是通过 md5 避免重复安装的(这部分在模块化重构) 一开始做 zipapps 简单理解就是
以上都是工作中遇到的麻烦事情,各种 bug 层出不穷的。至于 importlib-metadata,暂时还是遵循奥卡姆剃刀原则,毕竟这个库的主要工作是打包和发布,重新通过 pip 安装相对来说比较干净,我就遇到过同事乱改 site-packages 源码导致的线上 P0 问题,通宵查了一夜都没解决。 所以提速的话可以提前都做成 wheel,或者提前 pip install -t 到特定目录用的时候 includes 进去,依赖 metadata 虽然自动化程度高了,还是有一定风险 |
一定要追求无依赖的话,可以复制并固定
What can I say.
我大概应该将这个issue开头放的那段脚本做成一种类似独立可选插件的东西。毕竟直接从已安装的包中提取所需包的文件确实是一个需求,我不希望每个人都拿开头那个脚本魔改一个自己的版本。 |
刚才偶然发现,我这边 zipapps 打包的时候会清理 |
|
需要保留吗,需要的话我留个可选项 |
包的元数据大部分情况下是不会影响运行的,这就是为什么它会被当做垃圾文件。 |
嗯,一直没用过metadata做什么事情,我加个默认值那两个文件夹,不需要清理就传入 [] 就行了,今天发个版带上它 |
Date: Tue Jun 04 2024 22:51:23 GMT+0800 上个版本加入 rm_patterns 参数过, |
Requirements of a package can be searched with
importlib.metadata.requires
and files can be searched withimportlib.metadata.files
, so it is possible to gather needed files without using pip to install into a virtual environment.Here is a script in my project that gathers needed files into cache directory and uses
zipapps
to pack. Just to illustate how to search package files with the way mentioned above. This script works on Python 3.11, earlier versions may use backportedimportlib-metadata
instead.An example config file for this script:
The text was updated successfully, but these errors were encountered: