-
Notifications
You must be signed in to change notification settings - Fork 6
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
feat: rewrite the backend to use the build hook #19
Conversation
Signed-off-by: Frost Ming <[email protected]>
Signed-off-by: Frost Ming <[email protected]>
不妨试试用 dependencies group 配置分包特有的依赖……我想先确认一下,不同的 dependencies group 可以提供相互冲突的依赖吗? |
可是可以,但是不能一起lock |
README 我后面会重写一下。
good, 这样在有些情况下就不需要 raw-dependencies 了: 我们可以直接用这个特性。 “不再要求package依赖必须包含在项目依赖中,避免重复配置。” |
如何安装子包的依赖需要另行考虑,但最好不要通过重复配置解决
override = False情况下字段的值都是merge的,包含dependencies |
那不妨试试直接将分包的依赖系统挂靠在整个 dependencies group 系统上?虽然 pylance 可能会骂我怎么找不到包。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果可以,我还是希望能使用 dependencies group 来处理分包的依赖,除此之外还需要保留 raw deps 用来处理分包之间的依赖关系。
除此之外……uh,backend hooks L44-L47 那段逻辑看起来好怪
raw-dep现有用法包括
另外一点,子包的project.dependencies既可以只写依赖名称(跟随workspace的版本)也可以加上版本 |
其实总结一下,就是一个不被pdm resolver收集的依赖集合 我现在的改动以后,子包的依赖都不会被PDM收集到。然而又产生问题,如果我想收集呢? 现在的改动是把逻辑简化到简单的继承追加,或是覆盖,二者择其一。先从一个简单的模型出发,后面补充行为更容易。 optional groups是一种方法,但这里有个麻烦的问题 子包引用workspace的某个optional group,那么这个group还出现在workspace的optional group(并被其他子包所继承)吗? |
Signed-off-by: Frost Ming <[email protected]>
我倒觉得另一种方法比较好(先不说实现可能) 不弄乱optional dependencies,而是在workspace中显式依赖子包,因为现在子包不止一个,我们需要用一种方法让builder构建正确的子包,一个建议: [tool.pdm.dev-dependencies]
workspace = [
"-e file:///${PROJECT_ROOT}/#egg=foo", # 使用 mina-target=foo构建
"-e file:///${PROJECT_ROOT}/#egg=bar", # 使用 mina-target=bar构建
] 这样没有改变对optional-dependencies 字段意义,只是在构建 |
这点倒简单……直接接管这方面的逻辑,让 group 直接被独占,仅对 mina 相关逻辑可见,mina 则作为一个 workspace manager 协助性质的管理这些,例如 以及,在设计上,workspace 是不会被 publish 的,其只暴露给项目本身作为 editable package 使用。 |
错,这可能破坏 editable package 吧,如果我 |
对于子包的构建……嗯,这些子包的构建……确实,如果我子包声明一些 metadata,那要怎么处理,我想你应该说的是这个问题吧。 |
这个 PR 的思想就是减少规则,简化逻辑,既然workspace的配置是用来被继承的,它完全可以是可以publish的,那么workspace的metadata就应该一视同仁,没有额外的规则
这是个问题,但我感觉这是实现的问题,PDM现在的逻辑是如果碰到同名的包已经被editable安装了,就不会安装pypi的包,所以感觉应该没问题。 而且,用optional group似乎也解决不了,甚至子包都不能被editable安装,因为子包在workspace的眼里他不是个包。 最后有没想过这东西这么难设计,是因为workspace他太复杂了,有各种互相依赖、元数据复用等问题。 |
好消息,我现在不在乎这方面。那么便一视同仁……如果用到了有问题再修。 我已经在 #19 (comment) 提出了一个初步思路。 |
当时的我:我就只想分割一下……什么,这些东西?我现在用不到不做 workspace 可以 publish……嗯,即使现在你也可以直接丢掉 mina 直接 build entire workspace,你自己把控好炸了我再看看怎么修,没用到的我先开摆 好消息,根本不用碰,mina 从原理层面只是替换 project describe,竟然如此没必要去管 workspace 怎样,连 optional dependencies 也不需要管。至于 cli,啊啊,如果用 optional dependencies + editable replace,只有后者是必须要修改 cli 行为……嗯 |
其实这一点也不重要,如果default-target配置了,或者干脆workspace就是其中一个子包,build backend 永远看到是子包中的其中一个,看不到 workspace,所以就算直接用
抱歉没太明白,不要太跳跃了。 先理清问题,现在剩下的问题是,workspace 对于第一个问题,我上面的评论有补充,你可以继续解释 你认为的 对于第二个问题,因为
那么现在PDM的行为是(你配置了 |
嗯……有个神奇的问题: |
pdm-project/pdm#1505 仍在摆烂中 我会想到用mina 是发现传统的分包方式会碰到project file(README/LICENSE) 复用不了的问题,需要每个子包拷一份,而我非常受不了repeat和copy。这也正是我为什么对现在的dependency配置方式不满的原因 |
那么……hmm,Requirement 不能塞别的东西……如果可以: [package]
dependencies = [
"that_package; mina-workspace != enabled"
]
|
诶等会,现在Mina允许子包设置单独的proj file吗@GreyElaina |
完全没有问题,写就是了。 |
傻了,这俩可以指定文件路径的 |
很好,我们不用什么 此外,workspace 依赖分包似乎会引发一些循环依赖 |
所以还是没懂为什么不依靠 build backend 去收集依赖,这是已有的机制。而非要让 cli 去处理 我是倾向于重 backend 轻 front-end |
在 #19 (comment) 这一设计下,丢个形似 |
我们目的是安装时候包含子包,说白了就是为了开发workspace方便,至于构建和publish单一个hook就解决了,所以放dev dependencies就可以,不涉及循环依赖 |
ok……还是得处理分包间依赖。 |
可以,放着吧 |
|
这个 PR 的改动范围可能比较大,我会把改动点一一列出。这也是我最近有用 Mina 的需求,如果你觉得不符合你的用法不想 merge,我只能 fork 一个新的项目。
Change list
pdm-backend
的 Hook 功能实现 backend,这样 Mina-backend 不暴露任何 backend 界面,用户只需要在build-system.requires
中加入mina-build
并依旧使用pdm-backend
即可。hooks.py
,避免了需要先发版本项目才能用。mina-target
因为--
看起来并没有必要default-target
mina.backend
,原有项目的build-backend
设置需要更新。raw-dependencies
项配置,因为已有override
设定控制是追加还是覆盖,另一方面依赖包括默认依赖和可选依赖,配置会很复杂,单一个raw-dependencies
不能满足需要。即使存在一些用例,仅希望追加依赖,而覆盖其他字段,考虑到这个用例还是比较少,而且可以重复base的依赖解决有任何异议欢迎反馈