python如何快速生成一个requirements.txt

本文详细介绍了如何使用Python脚本requirementsGet生成requirements.txt文件,包括文件夹遍历获取导入名、获取安装名(处理特殊情况)、以及获取版本的方法。通过安装requirementsGet库并运行脚本来自动化这个过程。
部署运行你感兴趣的模型镜像

一、使用方法

先安装

pip install requirementsGet -i https://pypi.tuna.tsinghua.edu.cn/simple/

然后在你要生成requirements.txt的项目根目录下新建一个文件

[make_requirements.py]
import requirementsGet
requirementsGet.get()

然后运行这个python文件即可

二、实现原理

一、文件夹遍历

首先通过以下代码拿到项目下所有python文件

def traverse_files(directory):
    for file_name in os.listdir(directory):
        file_path = os.path.join(directory, file_name)
        if os.path.isdir(file_path):
            for i in traverse_files(file_path):
                yield i
        else:
            # 在这里可以对文件进行操作
            if file_path.endswith(".py"):
                yield file_path

二、获取导入名

进行迭代,通过文件中的import,frome等字段,提取出导入名

def get_import(f):
    imports = []
    for line in f.split("\n"):
        if "".join(list(line)[0:5]) == "from " and "import " in line:
            line = (
                line.replace("from", "")
                .split("import")[0]
                .replace(" ", "")
                .split(".")[0]
            )
            imports.append(line)
        elif "".join(list(line)[0:7]) == "import ":
            line = line.replace("import", "")
            for item in line.split(","):
                item = item.split(" as ")[0].replace(" ", "").split(".")[0]
                imports.append(item)
    return list(set(imports))

三、获取安装名

许多库的导入名和安装名不同,如PIL的安装名是pillow,可以通过遍历site-packages下的top_level.txt文件,实现获取安装名,但是也有一些是无法获取到的,比如bs4->beautifulsoup4,可以通过在LEVE_TOP_FORMAT 中添加内容来实现,代码里内置了几个,可以自行添加更多或按如下方式临时添加

[make_requirements.py]
import requirementsGet
requirementsGet.LEVE_TOP_FORMAT ["bs4"] = "beautifulsoup4"

获取top_level.txt代码如下

def init_top_leves():
    directory = sysconfig.get_paths()["purelib"]
    for file_name in os.listdir(directory):
        file_path = os.path.join(directory, file_name)
        if (
            os.path.isdir(file_path)
            and "dist-info" in file_path
            and os.path.exists(file_path + "/top_level.txt")
        ):
            top_levels = (
                open(file_path + "/top_level.txt", "r", encoding="utf-8")
                .read()
                .split("\n")
            )
            package_name = file_path.replace("\\", "/").split("/")
            package_name = package_name[package_name.__len__() - 1].split("-")[0]
            for top_level in top_levels:
                if not top_level:
                    continue
                LEVE_TOP_FORMAT[top_level] = package_name

四、获取版本

大部分版本可以通过以下代码获取,没有获取到的问题也不大

item = "bs4"
version = inspect.getmodule(import_module(item)).__version__

结束

最后运行结果如下

requests==2.31.0
PyExecJS
colorlog
PyYAML==6.0
beautifulsoup4==4.12.2
urllib3==1.26.16

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

生成 Python 项目的 `requirements.txt` 文件是项目管理和部署中的关键步骤。以下是几种常用的方法,可用于不同场景下的依赖管理。 ### 使用 `pip freeze` 此方法适用于项目使用了虚拟环境(如 `venv` 或 `virtualenv`)并且所有依赖已正确安装的情况。 ```bash pip freeze > requirements.txt ``` 该命令会将当前环境中所有已安装的包及其版本号写入 `requirements.txt` 文件中[^1]。 ### 使用 `pipreqs` 如果项目没有使用虚拟环境,或者你希望只提取项目实际用到的依赖,而不是列出整个环境中所有安装的包,可以使用 `pipreqs` 工具。 首先,安装 `pipreqs`: ```bash pip install pipreqs ``` 然后,在项目根目录下运行以下命令: ```bash pipreqs . ``` 这将扫描项目中的 `.py` 文件,分析导入语句,并生成一个仅包含项目实际依赖的 `requirements.txt` 文件[^1]。 ### 使用 `pip` 和 `requirements.in` 如果你希望更精确地控制依赖版本,可以使用 `pip-compile` 工具(属于 `pip-tools` 包的一部分)。它允许你通过 `requirements.in` 定义所需的基础依赖,然后生成锁定版本的 `requirements.txt`。 安装 `pip-tools`: ```bash pip install pip-tools ``` 创建 `requirements.in` 文件并添加依赖项,例如: ``` requests flask ``` 然后运行: ```bash pip-compile requirements.in ``` 这将生成一个包含所有依赖及其精确版本的 `requirements.txt` 文件,确保在不同环境中的一致性。 ### 使用 `poetry` 如果你使用 `poetry` 进行依赖管理,可以通过以下命令生成 `requirements.txt`: ```bash poetry export -f requirements.txt --output requirements.txt ``` 该命令会将 `pyproject.toml` 中定义的依赖导出为标准的 `requirements.txt` 格式。 ### 使用 `pipenv` 对于使用 `Pipenv` 管理依赖的项目,可以通过以下命令生成 `requirements.txt`: ```bash pipenv lock -r > requirements.txt ``` 这将导出当前环境的依赖及其版本要求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值