以编程方式生成requirements.txt文件

5
我正在尝试以编程方式生成requirements.txt文件,这样我就可以将其与第二个txt文件进行比较。到目前为止,我已经尝试了以下方法,但它们只会将要求输出到控制台(没有生成txt文件)。
到目前为止,我已经尝试过:
    import pip

    pip.main(["freeze",">","requirements.txt"])

并且

    from subprocess import call

    call(["pip","freeze", ">","requirements.txt"])

如果我尝试在终端中手动运行相同的命令,文件就可以正常生成。有什么建议吗?
3个回答

7

让pip直接提供发行版列表

脚本myfreeze.py

import pip
with open("requirements.txt", "w") as f:
    for dist in pip.get_installed_distributions():
        req = dist.as_requirement()
        f.write(str(req) + "\n")

然后你会在requirements.txt文件中得到预期的内容。


3
subprocess.Popen(['pip', 'freeze'], stdout=open('/tmp/pip.log', 'w'))

2

使用pip工具进行此操作强烈不建议,pip的开发人员也已经放弃了这种方式。最新的pip版本也已经无法正常使用。以下是在相关GitHub问题页面中提出的一种方案总结,该方案与被接受的解答非常相似,但是使用了pkg_resources模块。

import pkg_resources


def generate_pip_freeze() -> str:
    requirements = ""
    for dist in pkg_resources.working_set:
        req = dist.as_requirement()
        requirements += f"{req}\n"
    return requirements

更简洁地说:
def generate_pip_freeze() -> str:
    return "\n".join(
        str(dist.as_requirement()) for dist in pkg_resources.working_set
    )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接