
Conda 与 Docker 教程:论文代码环境可复现怎么配
Conda 管 Python 版本和依赖包,Docker 把整个系统环境打包成镜像。当审稿人说"请提供可复现的运行环境"时,这两个是标准答案。
它解决什么问题
"在我机器上是能跑的"大概是论文代码最常见的评价。Python 小版本差异、NumPy 换版导致数值变化、CUDA 与驱动不匹配——问题不在你的代码里,却出现在审稿人的机器上。Conda 解决第一层:给每个项目独立环境,版本写进 environment.yml,别人一条命令重建。Docker 解决第二层:系统库、驱动、编译工具连同代码封进镜像,换机器结果一致。成本也实在:Conda 依赖解析慢,镜像动辄几个 GB。
5 个核心功能
• 环境隔离:conda create -n paper python=3.10 给每个项目单独环境,依赖冲突互不影响。
• 依赖导出:conda env export --no-builds > environment.yml 生成清单,别人执行 conda env create -f environment.yml 就能重建环境。
• 求解加速:依赖解析慢可用 Mamba 替代,或把求解器切成 libmamba,装环境从十几分钟降到一两分钟。
• Dockerfile 固化:把系统库、CUDA、Python 与代码写进 Dockerfile,docker build 出镜像,任何人拿到都是同一套环境。
• 镜像分发:镜像推到公共仓库或导出文件,审稿人 docker run 就能跑。
上手五步走
第一步,装 Miniconda。 装 Miniconda 而不是完整 Anaconda,体积小很多;装完执行 conda config --set solver libmamba 提速,国内可另配镜像源。
第二步,建环境并装包。 执行 conda create -n paper python=3.10,再 conda activate paper;带编译的包优先用 conda 装,纯 Python 包用 pip install -r requirements.txt。
第三步,导出依赖清单。 跑通后执行 conda env export --no-builds > environment.yml,并删掉与平台相关的字段。
第四步,写 Dockerfile。 从官方基础镜像起,COPY 代码与依赖清单,RUN 安装命令,CMD 指定入口;构建执行 docker build -t paper:v1 .,运行用 docker run -it --rm paper:v1。
第五步,真机验证。 换一台机器,或者干脆把本地环境删掉,严格按清单重建并跑通最小示例,才算真的可复现。
三个常见坑
• 只冻结 Python 包不够:CUDA 版本、显卡驱动、系统库都不在 environment.yml 里。深度学习项目必须把这些写进 README 或直接封进 Dockerfile。
• 导出时带平台字段:不加 --no-builds 会写死具体构建号,换操作系统就装不上;反过来写得太笼统又会版本漂移,关键包建议手动锁版本。
• 镜像体积失控:随便装就几个 GB。用多阶段构建、清理安装缓存,能砍掉一大半体积。
适合谁,多少钱
适合所有要交代码、跑实验、交接课题的硕博生和青椒。三者的开源版本均免费;Anaconda 发行版对大型商业机构收费,Docker Desktop 对大企业有订阅要求,具体以官网为准。轻量场景用 python -m venv 加 requirements.txt 也行,门槛低,但只解决 Python 这一层。
结尾
可复现不是美德,是论文可信度的一部分。把环境清单当作论文的附件来写,而不是附赠品。你现在提交论文代码时,会附带环境说明吗?评论区聊聊。
顺带说一句,本号长期维护四个可以直接用的数据库,在读研究生、博士和青椒可能更常用——
• ① 学术会议日历:按学科查未来 3 个月征稿,只保留未截止、信源可溯的.关注公号,点击菜单「学术日历」、后台回复「学术会议」。
• ② 学术招聘日历:博士、博士后、教职岗位,按截止日期排,每天更新。关注公号,点击菜单「招聘」或后台回复「招聘」。
• ③ 学术工具推荐:文献调研、文献管理、AI 阅读、投稿选刊、绘图查重,逐个实测。关注公号,点击菜单「学术工具」或后台回复「工具」。
• ④ 科研项目库:国家自然科学基金、国家社科基金、教育部及各省项目申报指南与截止节点,按申报时间排序,持续更新。关注公号,点击菜单「科研项目申报」或后台回复「项目申报」。
更多内容,也请关注我的公众号:大学圈内事儿