openlang

用同一份源码在多个 venv 中构建不同的 editable 包

我想修改自己项目使用的一个依赖。这个依赖是 kivy(https://kivy.org/),它有一些可选依赖,并通过 cython 编译部分原生模块,我的项目需要特定的组合,实际上是空集,而 kivy 自己的测试需要 [dev,full]。

两个项目需要不同配置,所以不能共用 venv,但两边都需要以 editable 模式安装 kivy,才能方便地在两个项目中测试改动。

顺便说一下,我觉得逐步测试多个 python 版本,并分别使用 editable 模式的 venv,也会遇到同样的限制。

有人知道怎样让这种配置工作吗?

从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接

    应该用一个能为每个环境分别声明依赖的环境管理工具。如果用 tox(https://tox.wiki/),大致可以这样配置。

    pyproject.toml:

    dependencies = [
        "kivy",
        ...
    ]
    
    dependency-groups = [
        "widgetdev" = "kivy[dev,full]",
    ]

    tox.ini:

    [tox]
    envlist =
        py314
        py314-widget
    
    [testenv]
    dependency_groups =
        widget: widgetdev
    ...

    要完成配置,还得看 tox 文档里的具体说明。pixi(https://pixi.prefix.dev/)也能定义具有不同功能的环境。其他工具大概也支持。

    从英语翻译查看原文
  2. 固定链接

    啊,你的意思是调整我的项目设置,让它接受兼容的 kivy 配置,而不是尝试同时使用两种不同的配置。这个思路不错,我会仔细看看 uv 在这里能做什么,毕竟目前我用的就是它,不过 tox 看起来也确实有些实用功能。谢谢!

    从英语翻译查看原文

同一个问题的其他角度

  1. 减少 docker-compose 的控制台输出

    在开发环境里用 docker-compose up 启动所有服务时,我的几个容器会输出几百行又几百行内容。有没有方便的办法过滤这些输出,或者更好一些,让这些服务在 docker-compose up 运行时不要写到标准输出?

    回复 3最近活动 bash
  2. 能否用 D 代替 C 编写 Python 扩展模块?

    看来 D 能与 C 链接。我想用 D 编写 Python 扩展模块。我是不是漏掉了什么原因,导致这种方法根本无法运行?

    回复 2最近活动 d
  3. 通过 Nix 声明 Micro 插件?🤔

    python 可以这样写。 Python.withPackages (q: with q; [ fastapi ]) Micro 编辑器有类似的机制吗? 能不能把 micro 编辑器的软件包和插件一起指定?:thinking: 那样会方便很多。

    回复 3最近活动 nix