我创建了一个包含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的情况下实现您执行此操作的目标。