news 2026/5/7 7:38:37

Miniconda-Python3.9如何导出requirements.txt文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Miniconda-Python3.9如何导出requirements.txt文件

Miniconda-Python3.9如何导出requirements.txt文件

在数据科学和AI开发中,一个常见的尴尬场景是:你在本地训练好的模型,在同事的机器上跑不起来——报错信息五花八门,从“模块未找到”到“版本冲突”,归根结底都是环境不一致惹的祸。尤其当你使用的是像Miniconda-Python3.9这类混合管理(conda + pip)的环境时,问题更加复杂:明明安装了所有依赖,pip freeze却“看不见”某些关键包。

这背后的核心矛盾在于:Conda 能装一切,但部署链偏爱requirements.txt。许多CI/CD流程、Docker镜像构建甚至云函数平台只认pip install -r requirements.txt,而不会去解析environment.yml。因此,如何从 Conda 管理的环境中精准提取出一份可用的requirements.txt,就成了每个开发者必须掌握的实战技能。


我们先来理清一个基本事实:pip freeze > requirements.txt并非万能。它只能看到通过 pip 安装并注册到 Python site-packages 中的包。如果你用conda install pytorch,那么pip freeze很可能完全忽略这个包,因为它是由 Conda 直接管理的二进制分发版本,并未写入 pip 的元数据。

这就导致了一个常见陷阱——你以为导出了全部依赖,实际上最关键的几个 AI 框架根本没被记录下来。等到别人用你的requirements.txt重建环境时,自然会失败。

那怎么办?难道每次都要手动检查并补全吗?

其实有更聪明的办法。

最推荐的做法之一是使用conda env export --from-history。与普通的conda env export不同,--from-history只输出你显式安装过的包,而不是 Conda 自动解析出的数百个依赖项。这意味着结果更干净、更贴近真实需求。

conda env export --from-history > environment.yml

生成的environment.yml内容类似这样:

name: myenv dependencies: - python=3.9 - pip - numpy - scikit-learn - pip: - torch==1.12.0+cu113 - transformers

注意看,pip 安装的包被单独列在pip:下。你可以直接从中提取这些条目,形成标准的requirements.txt。或者更进一步,写个小脚本自动完成转换:

import yaml with open('environment.yml', 'r') as f: env = yaml.safe_load(f) requirements = [] # 提取 conda 显式安装的纯 Python 包(可选) for pkg in env.get('dependencies', []): if isinstance(pkg, str): name = pkg.split('=')[0] # 可根据需要过滤基础包 if name not in ['python', 'pip', 'setuptools']: requirements.append(pkg) elif isinstance(pkg, dict) and 'pip' in pkg: requirements.extend(pkg['pip']) with open('requirements.txt', 'w') as f: for line in requirements: f.write(f"{line}\n")

这段代码不仅能处理 pip 部分,还能选择性地将 conda 安装的包也纳入requirements.txt,前提是它们在 PyPI 上存在对应版本。比如scikit-learn在 PyPI 和 conda-forge 都有,就可以放心加入。

当然,如果你坚持只用 pip 来统一管理所有 Python 包,那策略就更简单了:从一开始就避免使用conda install安装纯 Python 库。把 conda 仅用于安装 Python 解释器本身、CUDA 工具包、编译器等系统级依赖,其余一律走pip install。这样一来,pip freeze就能完整捕获整个依赖图。

# 推荐做法:保留 conda 做它擅长的事 conda install python=3.9 cudatoolkit=11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 此时 pip freeze 可以正确识别 torch 相关包 pip freeze > requirements.txt

这样导出的requirements.txt既准确又兼容性强,适合用于生产部署。

不过还有一种情况值得警惕:Jupyter 平台自带的大量预装库。比如你在 CSDN 或天池实验室的 Miniconda-Python3.9 环境里做实验,系统已经预装了 pandas、matplotlib、seaborn 等常用包。如果你直接运行pip freeze,会得到一个包含七八十行的庞杂列表,其中大部分都不是你项目真正需要的。

这时候就需要做“减法”。

一个实用技巧是结合pkg_resources动态识别当前环境中已加载的包,并排除那些公共基础组件:

# filter_requirements.py import pkg_resources # 常见平台预装包,可根据实际环境调整 EXCLUDED = { 'pip', 'setuptools', 'wheel', 'ipykernel', 'jedi', 'prompt-toolkit', 'notebook', 'jupyter-core', 'traitlets', 'pandas', 'numpy', 'scipy' # 若确定非项目必需 } with open('requirements.txt', 'w') as f: for dist in pkg_resources.working_set: if dist.project_name.lower() not in EXCLUDED: f.write(f"{dist.project_name}=={dist.version}\n")

运行后生成的requirements.txt只包含你后期显式安装的内容,干净利落,便于版本控制和协作共享。

再进一步思考,为什么我们非要执着于requirements.txt?毕竟 Conda 自己有一套更强大的environment.yml,连非 Python 依赖都能描述清楚。

答案很现实:生态割裂。

很多自动化流程、轻量级服务容器、开源项目模板仍然默认采用pip + requirements.txt作为依赖声明方式。尤其是在微服务架构或 Serverless 场景下,团队希望最小化构建复杂度,不愿意引入 Conda 作为构建依赖。这时候你就得“向下兼容”。

所以最佳实践其实是双管齐下:

  • 使用conda env export > full_environment.yml完整备份当前环境状态,用于本地复现或调试;
  • 同时维护一份精简的requirements.txt,专供 CI/CD 和 Docker 构建使用。

两者互补,兼顾灵活性与通用性。

最后提醒一点:Python 版本的兼容性不容忽视。虽然你现在用的是 Python 3.9,但某些旧项目或特定库可能对解释器版本敏感。建议在requirements.txt开头添加注释说明基础环境:

# Base: Miniconda with Python 3.9 # Generated on 2025-04-05 # Intended for CUDA 11.8 environments torch==1.12.0+cu118 transformers>=4.30.0 numpy==1.21.6

这样的小细节,能在未来极大提升项目的可维护性。


这种高度集成又需灵活拆解的依赖管理思路,正是现代 Python 工程化的缩影。工具本身没有绝对优劣,关键在于理解其边界并合理组合。当你能在 conda 与 pip 之间游刃有余地切换,既能享受 Conda 强大的依赖解析能力,又能产出符合主流规范的部署资产时,才算真正掌握了环境管理的艺术。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:47:42

Miniconda配置PyTorch环境的最佳实践方法

Miniconda 配置 PyTorch 环境的最佳实践方法 在深度学习项目中,一个常见却令人头疼的问题是:“代码在我机器上能跑,为什么换台设备就不行?” 更有甚者,明明昨天还能训练的模型,今天因为某个库更新后直接报错…

作者头像 李华
网站建设 2026/5/6 21:33:33

视频推拉流EasyDSS平台助力实现无人机推流直播新生态

无人机直播凭借“空中视角、全域覆盖”的核心优势,已广泛应用于自然保护区监测、应急救援、赛事直播、国土测绘等多个领域。但传统无人机推流存在协议适配单一、弱网环境易卡顿、多终端协同不足等问题,制约了无人机直播的规模化落地与体验升级。视频推拉…

作者头像 李华
网站建设 2026/5/3 20:05:11

msvcr100.dll文件损坏丢失找不到 打不开软件 下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/1 13:19:45

Miniconda-Python3.9环境下生成Markdown报告

Miniconda-Python3.9环境下生成Markdown报告 在数据科学和AI研发日益普及的今天,一个常见的痛点浮出水面:为什么同样的代码,在同事的机器上运行完美,到了自己环境却频频报错?更令人困扰的是,撰写技术报告时…

作者头像 李华
网站建设 2026/5/1 5:51:01

从零开始:用Miniconda-Python3.9搭建AI训练环境

从零开始:用 Miniconda-Python3.9 搭建 AI 训练环境 在深度学习项目中,最让人头疼的往往不是模型调参,而是“环境配不起来”——明明本地跑得好好的代码,换台机器就报错:ModuleNotFoundError、CUDA 版本不兼容、PyTor…

作者头像 李华
网站建设 2026/5/3 4:44:16

python基于Vue 的七匹狼皮带皮具商城系统_o8tf6_django Flask pycharm项目

目录已开发项目效果实现截图关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 ,本人源头供货商 python基于Vue 的七匹狼皮带皮具商城…

作者头像 李华