我目前有一个以Poetry作为主要软件包管理器的Python3项目。除此之外,我还通过Github工作流建立了一个构建并进行了一些自动化测试。我的软件包依赖Tensorflow,尽管自动化测试可以在没有它的情况下运行。不幸的是,每次Github工作流程运行这些测试时,都会安装Tensorflow(相当大)。由于这些测试不需要Tensorflow,并且我想加快构建速度,因此从构建管道调用poetry install
时,我想忽略Tensorflow依赖项。
有人在使用诗歌时知道一种排除依赖的方法吗?
答案 0 :(得分:4)
想到的另一种方法是将tensorflow
依赖项移至an extra category,在诗歌中看起来像这样:
$ poetry add --extras tensorflow
这意味着它将在您运行poetry install
时安装,除非它是您明确安装的命名组的一部分。可以通过将其添加到您的pyproject.toml
中来实现:
[tool.poetry.extras]
runtime = ["tensorflow"] # any name goes, I chose "runtime" because it sounded like it'd make sense
可以使用仅在运行时而不是测试期间需要的任何其他软件包扩展该列表。如果要安装代码以实际运行它,则必须先执行以下操作:
$ poetry install --extras runtime
这将彻底分离您的依赖关系,您必须评估在您的情况下是否有意义。根据经验,通常最好运行黑客程序来使测试有效,而不要恶化客户端体验,因此您当前的工作流程很有可能比我刚刚写的要好。
答案 1 :(得分:0)
我目前通过在每个构建版本中自动从pyproject.toml
移除Tensorflow行来解决此问题。之后,在安装依赖项之前,我还要再次锁定诗歌。这是一种解决方法,因此我仍在寻找更清洁的解决方案。
sed '/tensorflow/d' pyproject.toml > pyproject2.toml
mv pyproject2.toml pyproject.toml
cat pyproject.toml
pip install poetry
poetry run pip install --upgrade pip
poetry lock
poetry install