V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

有什么方法可以清理 venv 中,当前项目依赖的库文件?

  •  
  •   miniyao · 2020-05-21 00:41:54 +08:00 via Android · 3237 次点击
    这是一个创建于 1437 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个项目的虚拟环境 venv,小组成员不断往里面 pip install 了很多依赖库,等到要在生产机上发布的时候,pip freeze > requirements.txt 里面就有很多有用的没用的全装进去了。

    有什么方法可以清理吗?怎么分离 requirements.txt 里面哪些是必须依赖的库,哪些是没用的冗余?
    8 条回复    2020-05-22 19:22:21 +08:00
    fgwmlhdkkkw
        1
    fgwmlhdkkkw  
       2020-05-21 00:49:19 +08:00
    能有多大?差那点磁盘吗……
    fgwmlhdkkkw
        2
    fgwmlhdkkkw  
       2020-05-21 00:53:15 +08:00
    @fgwmlhdkkkw pip list 可以列出所有已安装的包,然后你运行程序,在程序中得到所有需要加载的包(具体 api 我不记得了,但是你甚至可以 hook import 模块来得到),然后对比一下。
    wangyzj
        3
    wangyzj  
       2020-05-21 00:53:27 +08:00
    pipreqs
    ClericPy
        4
    ClericPy  
       2020-05-21 00:54:25 +08:00
    以前一直用的 pipenv 或 poetry 管理依赖, 所以会自动清理不用的

    你如果想找个类似 `go mod tidy` 的东西... 为什么一开始不就写好 requirements 然后一直用它安装呢, 很少用 freeze 功能, requirements 里也只写最顶层依赖, 所以锁的估计不够严格, 才使我不得不转到 pipenv 上去的...
    jin7
        5
    jin7  
       2020-05-21 02:11:42 +08:00   ❤️ 1
    pipdeptree pippurge
    ericls
        6
    ericls  
       2020-05-21 04:28:52 +08:00 via iPhone   ❤️ 1
    反了 requirements 应该是 source of truth 而不是某个人的本地环境

    简单办法就是看看哪些有 import 咯
    xpresslink
        7
    xpresslink  
       2020-05-21 09:37:59 +08:00
    楼主要明白一点很重要的东东,requirements.txt 只是开发者所需要的最顶层的依赖清单。
    在执行 pip install -r requirements.txt 的时候安装的东西远不是这个清单中的包,因为这些包本身还要依赖其它的包,在安装过程中如果没有就会自动安装其它包。
    但是要想要清楚的知道 requirements.txt 里面这些包依赖了哪些是比较困难的。
    最省事的办法就是直接把 venv 整改删除了,重建再执行 pip install -r requirements.txt
    frostming
        8
    frostming  
       2020-05-22 19:22:21 +08:00   ❤️ 1
    最轻量的方法就是 5L @jin7 的,用 pipdeptree 查看依赖树,这样可以看到哪些包不需要再安全地卸载掉

    重一点就引入依赖管理 Pipenv, Poetry, PDM,把要的依赖定义下来,然后 clean 一遍,就把多余的去掉了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1142 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:30 · PVG 02:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.