5

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

到目前为止我已经尝试过

    import pip

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

    from subprocess import call

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

但是,如果我尝试在终端中手动运行相同的命令,则文件会毫无问题地生成。有什么建议么?

4

3 回答 3

8

要求 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文件中获得预期的内容。

于 2014-06-20T07:51:45.663 回答
3
subprocess.Popen(['pip', 'freeze'], stdout=open('/tmp/pip.log', 'w'))
于 2014-06-20T07:44:29.883 回答
0

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
于 2021-10-21T07:36:15.697 回答