自动创建文件“requirements.txt”

2025-01-06 08:31:00
admin
原创
209
摘要:问题描述:有时我从GitHub下载 Python 源代码,但不知道如何安装所有依赖项。如果没有任何requirements.txt文件,我必须手动创建它。给定 Python 源代码目录,是否可以从导入部分自动创建requirements.txt ?解决方案 1:您可以使用以下代码来生成requirements...

问题描述:

有时我从GitHub下载 Python 源代码,但不知道如何安装所有依赖项。如果没有任何requirements.txt文件,我必须手动创建它。

给定 Python 源代码目录,是否可以从导入部分自动创建requirements.txt ?


解决方案 1:

您可以使用以下代码来生成requirements.txt文件:

pip install pipreqs
pipreqs /path/to/project

pipreqs使用其GitHub的好处。

为什么不使用 pip freeze?

  • pip freeze`pip install`仅保存在您的环境中安装的软件包。

  • pip freeze保存环境中的所有包,包括您在当前项目中未使用的包(如果您没有virtualenv)。

  • 有时您只需要创建requirements.txt一个新项目而不需要安装模块。

解决方案 2:

建议使用Pipenv 或其他工具来改善您的开发流程。

pip3 freeze > requirements.txt  # Python3
pip freeze > requirements.txt  # Python2

如果你不使用虚拟环境,pigar将是一个不错的选择。

解决方案 3:

对于 python3: (我的机器上有 python 2 和 python 3,其中 python2 是默认的)

# install
pip3 install pipreqs

# Run in current directory
python3 -m  pipreqs.pipreqs .

python2:

pip install pipreqs
python -m  pipreqs.pipreqs .

要检查你的 Python 版本:

python --version

解决方案 4:

令人吃惊的是,这个简单的任务在 Python 中竟然如此复杂。以下是我认为自动完成此任务的最佳方法。

你需要两个工具:

  1. pipreqs

pip3 install pipreqs

pipreqs 将检查你的项目,并仅安装项目使用的软件包。而不是像你pip freeze所做的那样安装 Python 环境中的所有软件包。

但这种方法有一个问题,它不会安装子包。

例如,你的项目使用了pandas==1.3.2。它本身在其他包中pandas使用。但它本身并没有在中写子包(即numpy)numpy==1.21.2`pipreqs`requirments.txt

这是需要pipreqs与第二个工具结合的地方。

  1. pip 工具

pip3 install pip-tools

pip-tools将获取 中的包requirements.in并生成requirements.txt及其所有子包。例如,如果您
pandas==1.3.2在 中有requirements.inpip-tools将生成

numpy==1.21.2 # via pandasrequirements.txt

但是您需要手动添加包requirements.in。这很容易出错,您可能会偶尔忘记这样做。

这是您可以使用第一个工具的地方。

但这两种工具都会写入requirements.txt。那么如何修复它呢?

使用 --savepathforpipreqs写入,requirements.in而不是默认的requirements.txt

要用一个命令完成此操作;只需执行

pipreqs --savepath=requirements.in && pip-compile

就这样。现在您无需担心手动维护软件包,您requirements.txt将拥有所有子软件包,这样您的构建就是确定的。

总结

  1. pip3 install pipreqs

  2. pip3 install pip-tools

使用以下内容构建确定性requirements.txt

pipreqs --savepath=requirements.in && pip-compile

解决方案 5:

就我而言,我使用Anaconda ,因此从我的环境中的Conda终端运行以下命令可以解决问题,并自动为我创建这个requirements.txt文件:

conda list -e > requirements.txt

这是从 Github 链接pratos/condaenv.txt中获取的。

如果出现错误,并且您正在使用 Anaconda,请尝试使用以下.yml选项:

conda env export > <environment-name>.yml

对于其他人使用该环境或者您在另一台机器上创建新环境:

conda env create -f <environment-name>.yml

.yml 选项在这里找到

解决方案 6:

我盲目地遵循了使用 pip3 freeze > requirements.txt 的公认答案

它生成了一个巨大的文件,列出了整个解决方案的所有依赖项,这不是我想要的。

因此您需要弄清楚您想要生成什么类型​​的 requirements.txt。

如果你需要一个包含所有依赖项的 requirements.txt 文件,那么使用 pip3

pip3 freeze > requirements.txt

但是,如果您想生成一个仅列出所需依赖项的最小 requirements.txt请使用 pipreqs 包如果您在项目的每个组件级别都有大量 requirements.txt 文件,而在解决方案范围级别上没有单个文件,则特别有用。

pip install pipreqs
pipreqs [path to folder]
e.g. pipreqs .
     pipreqs . --force --ignore=tests (Overwrites exisiting requirements.txt, ignores the tests directory)

解决方案 7:

因为大多数答案pipreqs对我来说都不起作用。这是我的答案。

要生成 requirements.txt 文件:

pip install pipreqs

python -m  pipreqs.pipreqs --encoding utf-8  /path/to/project

pipreqs我更喜欢使用pip freeze,因为它pip freeze会保存环境中的所有包,包括当前项目中未使用的包。但是,pipreqs只保存项目中使用的包。

要安装要求,请使用:

pip3 install -r requirements.txt

解决方案 8:

首先你的项目文件必须是一个py文件,也就是直接的python文件,如果你的文件是ipynb格式,那么你可以使用下面这行代码将其转换为py类型:

jupyter nbconvert --to=python

然后,您需要从 cmd(mac 的终端)安装 pipreqs 库。

pip install pipreqs

现在我们可以使用下面的代码创建 txt 文件。如果你的文件位于同一路径,则只需写入 ./ 。否则,你需要提供文件的路径。

pipreqs ./

或者

pipreqs /home/project/location

这将为您的项目创建一个 requirements.txt 文件。

解决方案 9:

您可以使用以下命令执行此操作。它将创建文件requirement.txt并自动添加相关模块。

对于 Unix:

pip3 freeze > requirements.txt

对于 Windows:

pip freeze > requirements.txt

解决方案 10:

自动更新 requirements.txt 方法

在使用requirements.txt开发 Python 应用程序时,我们有几个选择:

  1. 开发完成后,当我们想要部署它时,生成requirements.txtpip freeze > requirements.txt 。它由或执行,pipreqs以获得更少的混乱结果。

  2. 每次安装后,手动将每个模块添加到文件requirements.txt中。

  3. 安装管理器将为我们处理requirements.txt更新。

第一种选择有很多答案,第二种选择是不言自明的,所以我想描述第三种方法。有一个名为to-requirements.txt的库。要安装它,请输入以下内容:

pip install to-requirements.txt  # Pip install to requirements.txt

如果您一次性阅读整个命令,您就会明白它的作用。安装后您应该进行设置。运行:

requirements-txt init

它会覆盖 pip 脚本,以便每个脚本pip install或使用所需版本的软件包自动pip uninstall更新项目的requirements.txt文件。覆盖是安全的,因此卸载此软件包后,pip 将正常运行。

您还可以自定义其工作方式。例如,全局禁用它并仅为所需目录激活它,仅为 git 存储库激活它,或者允许/禁止创建 requirements.txt 文件(如果不存在)。

参考:

  1. 文档

  2. GitHub

  3. 吡啶甲酸

解决方案 11:

许多发帖者建议使用 pip freeze。我使用的是 pip 24.0,输出如下:

$ pip freeze > requirements.txt

aiohttp @ file:///croot/aiohttp_1707342283163/work
jinja2-cli==0.8.2

请注意,在第一行中,没有列出 aiohttp 的版本(可能是由 conda/mamba 安装的)

如果您需要 requirements.txt 采用第二行的形式,以供 pip 用作输入 requirements.txt,请使用:

$ pip list  --format=freeze > requirements.txt
aiohttp==3.9.3
jinja2-cli==0.8.2

现在在这两种情况下,它都没有在需求列表中列出包的依赖关系。为此,您可以使用 conda/mamba list -e 或其他人提到的其他与 pip 相关的包。

解决方案 12:

创建文件requirement.txt

对于 Python 3 版本,命令为:

pip3 freeze > requirements.txt

对于 Python 2 版本,命令是:

pip freeze > requirements.txt

安装要求.txt

对于 Python 3 版本,命令为:

pip3 install -r requirements.txt

对于 Python 2 版本,命令是:

pip install -r requirements.txt

解决方案 13:

确保为 python3.7 运行 pip3。

pip3 freeze >> yourfile.txt

在执行上述命令之前,请确保您已经创建了虚拟环境。

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2

pip install virtualenv
virtualenv <myenvname>

之后将源代码放入目录中。如果您现在运行 python 文件,如果您使用非本机模块,它可能无法启动。您可以通过运行pip3 install <module>或来安装这些模块pip install <module>

这不会影响您所在环境之外的整个模块列表。

现在您可以执行顶部的命令,现在您有一个仅包含您在虚拟环境中安装的模块的需求文件。现在您可以运行顶部的命令。

我建议每个人都使用环境,因为当遇到这样的事情时,它会让事情变得更容易。

解决方案 14:

简单的 Python 方式

要获取标准文件中所有要求的列表requirements.txt,可以使用以下命令。

pip freeze > requirements.txt

现在,这应该会自动创建一个标准需求文件,其中包含所有安装的软件包及其相应的版本。

终端上的漂亮打印

如果您只是想在终端上获得漂亮的打印,您可以使用以下方法。

pip list

这以漂亮的打印格式列出了所有已安装的软件包。

自定义依赖

如果您有一个项目文件夹(例如 Github Repo),并且想要获取项目的自定义 requirements.txt,则可以使用以下包。https
://pypi.org/project/pipreqs/ pipreqs

用法

$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt

requirements.txt 的内容

wheel==0.23.0
Yarg==0.1.9
docopt==0.6.2

解决方案 15:

如果你的系统中安装了许多依赖项,并且需要特定项目的 requirements.txt,则可以先安装 pipreqs:

$ pip install pipreqs

并在项目文件夹下执行以下命令。

$ pipreqs

此命令将为特定项目生成 requirements.txt 文件。

解决方案 16:

如果遇到与我同样的问题,即不在虚拟环境中,并且想要特定项目选定文件夹(包括子文件夹)的 requirements.txt ,而 pipreqs 不支持。

您可以使用:

import os
import sys
from fuzzywuzzy import fuzz
import subprocess

path = "C:/Users/Username/Desktop/DjangoProjects/restAPItest"


files = os.listdir(path)
pyfiles = []
for root, dirs, files in os.walk(path):
      for file in files:
        if file.endswith('.py'):
              pyfiles.append(os.path.join(root, file))

stopWords = ['from', 'import',',','.']

importables = []

for file in pyfiles:
    with open(file) as f:
        content = f.readlines()

        for line in content:
            if "import" in line:
                for sw in stopWords:
                    line = ' '.join(line.split(sw))

                importables.append(line.strip().split(' ')[0])

importables = set(importables)

subprocess.call(f"pip freeze > {path}/requirements.txt", shell=True)

with open(path+'/requirements.txt') as req:
    modules = req.readlines()
    modules = {m.split('=')[0].lower() : m for m in modules}


notList = [''.join(i.split('_')) for i in sys.builtin_module_names]+['os']

new_requirements = []
for req_module in importables:
    try :
        new_requirements.append(modules[req_module])

    except KeyError:
        for k,v in modules.items():
            if len(req_module)>1 and req_module not in notList:
                if fuzz.partial_ratio(req_module,k) > 90:
                    new_requirements.append(modules[k])

new_requirements = [i for i in set(new_requirements)]

new_requirements

with open(path+'/requirements.txt','w') as req:
    req.write(''.join(new_requirements))

PS:它可能有一些额外的库,因为它检查模糊逻辑。

解决方案 17:

如果您只想列出虚拟环境内使用的包,请使用:

pip freeze -l > requirements.txt 

解决方案 18:

@Francis 说得对 - https://stackoverflow.com/a/65728461/1021819

但需要补充的是:

通过对 Jupyter 笔记本(即.ipynb文件)的额外支持,您现在可以使用https://pypi.org/project/pipreqsnb(与 pipreqs 相同的语法):

pip install pipreqsnb
pipreqsnb .

[我不是作家]

解决方案 19:

为了使用pip freeze > requirements.txt,请创建一个虚拟环境freeze以避免添加不必要的依赖项,并在运行命令之前在虚拟环境中安装所有依赖项。

步骤 1:创建虚拟环境

python3 -m venv .venv

第 2 步:激活虚拟环境

source .venv/bin/activate

步骤 3:安装所有必需的依赖项

pip install <dependencies name>

步骤 4:运行freeze命令

pip freeze > requirements.txt

解决方案 20:

对于 Python 3 来说最好的方法是:

pip3 freeze > requirements.txt

它对我有用......

解决方案 21:

这不是一个完整的解决方案,但可能有助于在 Linux 上编制一份候选名单。

grep --include='*.py' -rhPo '^s*(from|import)s+w+' . | sed -r 's/s*(import|from)s+//' | sort -u > requirements.txt

解决方案 22:

或者如果你正在使用类似virtualenv 的东西,你可以运行这个命令来生成requirements.txt文件:

./.venv/bin/pip freeze > requirements.txt

解决方案 23:

我创建了这个 bash 命令。

for l in $(pip freeze); do p=$(echo "$l" | cut -d'=' -f1); f=$(find . -type f -exec grep "$p" {} ; | grep 'import'); [[ ! -z "$f" ]] && echo "$l" ; done;

解决方案 24:

使用pip freeze > requirements.txt创建需求文件是一种糟糕的方法!它可以作为问题的临时解决方案,但在管理 Python 项目的需求时,最好手动进行。

简单搜索“import”或“from x import”就会给你提供需要安装的所有依赖项的列表(没有多余的)。

它的问题pip freeze是它只是转储所有已安装的软件包,并带有严格的版本,每个依赖项都有自己的依赖项,它们都包含在转储中。例如,您安装了 lib==1.0,需要 sub-lib==0.5,如果您使用,pip freeze您将同时获得这两个,但是稍后当您希望将 lib 版本更新为 2.0 时,您很可能会遇到冲突,因为 lib v2.0 现在使用 sublib v1.0,而不是您需要的 v0.5...对于多个依赖项,这很快就会变得复杂。

我们在几个项目中遇到了这些问题,从那时起,我创建了一个自动脚本来清理pip freeze的转储。它很安全(注释掉不需要的依赖项)并且效果很好。

解决方案 25:

为了帮助解决此问题,请始终仅在本地包上运行 requirements.txt。本地包是指仅在项目文件夹中的包。为此,请执行以下操作:Pip freeze —local > requirements.txt

不是 pip freeze > requirements.txt。请注意,local 前面有双下划线。

但是安装 pipreqs 也有帮助。Pip install pipreqs。

不过,完美的解决方案是使用 pipfile。每当您安装新的本地包时,pipfile 都会自行更新。它还有一个类似于 JavaScript 中的 package.json 的 pipfile.lock。为此,请始终使用 pipenv 而不是 pip 安装您的包。所以我们使用 pipenv

解决方案 26:

Pipenv 用户可以requirement.txt使用以下命令从项目的 Pipfile 生成文件:

pipenv lock --requirements

解决方案 27:

对于与原始问题不同的用例,您确实有环境但没有固定依赖项,我发现pipreqs不一致,因为它有时会重复具有不同版本的依赖项,例如两个带有版本的枕头条目9.0.09.5.0并且无法捕获一些需要的依赖项。

我意识到pipreqs这对我个人来说有点过头了。

我看到几个人提到pip freeze存储所有环境包的警告。

不过,有一个简单的解决方案对我来说很有效:

将未固定的顶级需求整理到开发和核心文件中,如下所示:

requirements
├── core.txt
└── dev.txt

由于你可能只希望满足生产的核心要求,

pip freeze | grep -F -f requirements/core.txt > requirements.txt

假设您想要省略+cpu需求名称末尾的多余内容(对于 Hugging Face 部署我需要这样做),您可以事先链接一个管道过滤器。

pip freeze | grep -F -f requirements/core.txt | sed 's/+cpu//g' > requirements.txt

我发现这更容易维护。

解决方案 28:

使用:

pipreqs --savepath=requirements.in && pip-compile

如果您使用的是 Windows PowerShell ,它将无法运行。

试试这个;

( pipreqs --savepath=requirements.in ) -and (pip-compile)

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用