pip freeze 之后文件里有一行 -e git+ssh://git@gitlab.corp/mypkg.git@1a2b3c#egg=mypkg。同事在没有 ssh key 的机器上装,直接报 Host key verification failed。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
pip list --not-required --format=freeze > requirements.txt pip freeze --exclude-editable > requirements.lock
freeze 会把当前环境里的安装来源原样写出来,editable 安装和从 git 装的包都会带上路径或 URL。这些信息只对这台机器有意义,换个环境就断。这一点先确认清楚,后面就不用反复试。
「pip freeze 本地路径」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
具体做法是,导出前把本地开发用的包卸掉 或者只用 pip list --not-required 看顶层;运行时依赖和开发依赖分开两个文件;要用 git 依赖就写成固定 commit 的 https 形式 不要用 ssh;导出后人工过一遍每行 确认没有 file 协议和本地绝对路径。
改完照着核一遍,requirements 里没有任何 -e 和 file 协议 新机器上 pip install -r 一次装完。
