用 poetry 和 pyproject.toml,如何保证开发/测试环境和生产环境 dependency 同步?

发布于 2021-05-12 18:23:03

当前 workflow:

  1. 开发 /测试的 dependency 在 poetry.lock 里,poetry install 安装
  2. 测试通过后用 poetry build & poetry publish 发布
  3. 生产环境 docker image 里 pip install 上一步的 package

问题:开发环境的 dependency 在 poetry.lock 里,发布 package 的 dependency 在 pyproject.toml 的 tool.poetry.dependencies 里。有可能不同步。

我能想到的解决方法:

  1. 手动同步 pyproject.toml 和 poetry.lock 。不过这样一来似乎也没什么必要用 poetry.lock 了。根据 poetry 的文档如果没有 poetry.lock 的话 poetry install 会读取 pyproject.toml 里的 dependency,那干脆开发和生产都用 pyproject.toml 。
  2. docker 里 git checkout 出 poetry.lock,安装 dependency 然后再安装发布包。不过这样一来需要在 image 里装没什么用的 git,并且如果是 private repo 的话可能要添加一些设置。

python 半小白,感觉应该是比较常见的问题但是搜了一圈没看到人怎么说。请不吝赐教。

查看更多

关注者
0
被浏览
139
2 个回答
GoLand
GoLand 2021-05-12

正常很难把整个项目打包到一个 pip 包里,更多的是直接构建 docker image,再去分发 image 即可。

然后就解决了你这个问题。

0bit
0bit 2021-05-12

楼上正解,还是建议用容器级别的封装和分发。
Python 的包,如果都是纯 Python 还好,如果有二进制依赖就很难受,充满不确定性。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览