如何在不创建virtualenv的情况下pip安装Pipfile编写的包?

问题描述 投票:0回答:2

我创建了一个包,包含Pipfile,我想用 Docker 来测试它。

我想使用 pip 安装 Pipfile 中列出的软件包,而不创建 virutalenv。

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

我该怎么做?

python docker pip pipfile
2个回答
7
投票

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

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

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

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

pipenv install --system


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,则无法实现您既定的目标。

© www.soinside.com 2019 - 2024. All rights reserved.