如何在不创建VirtualEnv的情况下安装用Pipfile编写的软件包



我创建了一个包含pipfile的软件包,我想和docker进行测试。

我想安装用pip编写的pipfile的软件包,而不创建verutalenv。

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

如何做?

另一个答案之一会给我带来我的影响,但想明确呼唤它,以及为什么它是一个有用的解决方案。

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

在CICD中,您将使用通常仅旋转几分钟的容器来完成CICD管道的一部分。由于每次运行管道时,您都会旋转一个新的容器,因此无需在容器中创建虚拟环境即可保持井井有条。您可以直接将所有依赖项直接安装到Python的主要OS版本中。

要这样做,请在CICD管道中运行以下命令:

pipenv install --system

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

目前,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的情况下实现您执行此操作的目标。

最新更新