首页 > 解决方案 > 如何在不创建 virtualenv 的情况下 pip 安装用 Pipfile 编写的包?

问题描述

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

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

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

怎么做?

标签: pythondockerpippipfile

解决方案


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


推荐阅读