Python中pip安装包时有没有类似于npm一样自动将新依赖写入requirements文件的方法或工具?
pip freeze > requirements 会把所有相互依赖的包一股脑写到 requirements 文件,而一般开发都分 development、production、test 各种环境,每种环境依赖的包是不同的。
Python中pip安装包时有没有类似于npm一样自动将新依赖写入requirements文件的方法或工具?
pipenv
有,可以用 pip freeze 配合管道操作。但更推荐用专门工具,比如 pipreqs 或者 pip-tools。
pip freeze > requirements.txt 这命令会把当前环境里所有包(包括间接依赖)的固定版本都导出来,文件会很大,而且混着开发环境的包,不太干净。
如果你想像 npm 的 package.json 那样只记录项目直接用的依赖,可以用 pipreqs。先装上:
pip install pipreqs
然后在项目根目录跑:
pipreqs . --force
它会扫描项目里的 .py 文件,把 import 的包找出来,生成一个干净的 requirements.txt,只包含你真正用到的直接依赖。
另一个选择是 pip-tools,它更工程化一点。先装:
pip install pip-tools
把你直接依赖的包写在一个 requirements.in 文件里(比如写 requests),然后跑:
pip-compile requirements.in
它会生成一个 requirements.txt,里面锁定了所有依赖(包括间接依赖)的具体版本。
总结:想要干净的直接依赖列表用 pipreqs,想要版本锁定的完整依赖树用 pip-tools。
pipenv 速度很慢
为啥不同环境还要依赖不同的包。即使有也不会多,直接全装了。
pip freeze
难道这就是后端和前端的区别么?
pip-tools
你这么一说确实想起以前 Ruby 的就可以分环境装。但是现在感觉为啥呢。装一样的环境不是更好?
[[source]]
url = "https://pypi.doubanio.com/simple"
verify_ssl = true
name = “douban”
pipenv
不好意思没表述清楚,我说的是在更新 lock file 阶段速度很慢
同感,更新 lock file 太慢了
[github]( https://github.com/bndr/pipreqs) 这个不能满足需求?
pipenv lock 时真的很慢,装某些包时可能卡会几分钟到十几分钟。。
也有不少反馈,目前好像还没解决: https://github.com/pypa/pipenv/issues/1785
所以现在写入 Pipfile 时只好先跳过 lock ( pipenv install --skip-lock )…
比如有些依赖是辅助 debug 的,production 用不上

