4

我创建了一个包含Pipfile的包,我想用 docker 进行测试。

我想用 pip 安装用 Pipfile 编写的包,而不创建virutalenv。

# (do something to create some-file)
RUN pip install (some-file)

怎么做?

4

2 回答 2

4

最终 pip 应该能够自己做到这一点,至少他们是这么说的。目前,这尚未实施。

目前,Pipfile 是一个 TOML 文件,因此您可以使用 TOML 解析器来提取包约束并以 pip 可识别的格式发出它们。例如,如果您的 Pipfile 仅包含简单的字符串版本说明符,则此小脚本将写出一个requirements.txt文件,然后您可以将其传递给pip install -r

import sys
import toml

with open(sys.argv[1]) as f:
    result = toml.load(f)
for package, constraint in result['packages'].items():
    if constraint == '*':
        print(package)
    else:
        print(f'{package} {constraint}')

如果您的 Pipfile 包含更复杂的构造,则必须编辑此代码以解决它们。


您可能会考虑另一种适用于 Docker 容器的替代方法,即用于pipenv将包安装到系统 Python 安装中,然后删除生成的虚拟环境。

pipenv install --system
pipenv --rm

但是,严格来说,如果不创建 virtualenv,就无法实现您的既定目标。

于 2020-12-06T08:43:13.990 回答
2

其他答案之一使我想到了这一点,但想明确指出它,以及为什么它是一个有用的解决方案。

Pipenv 很有用,因为它可以帮助您创建虚拟环境。这在您的本地开发机器上非常有用,因为您通常会有许多项目,具有不同的依赖项等。

在 CICD 中,您将使用通常只启动几分钟的容器来完成部分 CICD 管道。由于每次运行管道时都会启动一个新容器,因此无需在容器中创建虚拟环境来保持井井有条。您可以简单地将所有依赖项直接安装到 python 的主要操作系统版本。

为此,请在 CICD 管道中运行以下命令:

pipenv install --system

于 2021-09-26T14:45:32.213 回答