大家写 Python 项目时,还在用 pip freeze 命令导出依赖吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn
V2EX    程序员

大家写 Python 项目时,还在用 pip freeze 命令导出依赖吗

  •  
  •   yodhcn
    yodhcn 2021-11-30 18:56:03 +08:00 3241 次点击
    这是一个创建于 1418 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我一直没怎么搞明白 python 的依赖,

    pip freeze > requirements.txt 命令,会直接导出项目的所有第三方依赖,例如:

    altgraph==0.17.2 certifi==2021.10.8 charset-normalizer==2.0.8 future==0.18.2 idna==3.3 lxml==4.6.4 pefile==2021.9.3 pyinstaller==4.7 pyinstaller-hooks-cOntrib==2021.4 pywin32-ctypes==0.2.0 requests==2.26.0 urllib3==1.26.7 

    但实际我在 main.py 中引用的包只有

    from lxml import html import requests import PyInstaller.__main__ 

    我希望在依赖文件里能够看出包与包之间的层级关系,哪些包是我主动引入的依赖,哪些包是依赖的依赖,就像 npm 的 package.json 那样

    pip 现在仍然是 python 官方的包管理器,我想知道,大家写 python 项目时,还在用 pip freeze 命令导出依赖吗?

    23 条回复    2021-12-01 13:06:41 +08:00
    Kilerd
        1
    Kilerd  
       2021-11-30 19:00:21 +08:00 via iPhone
    考虑用一用 poetry 或者 pdm 做依赖管理?
    arischow
        2
    arischow  
       2021-11-30 19:08:01 +08:00 via iPhone
    其实官方文档也有推荐用 pipenv 吧,我在公司和个人项目用 poetry
    lizytalk
        3
    lizytalk  
       2021-11-30 19:08:10 +08:00
    pip freeze 导出的是所有安装的包.. 和你的项目实际用到了什么没有关系
    lizytalk
        4
    lizytalk  
       2021-11-30 19:09:30 +08:00
    @arischow pipenv 慢,真的慢, 以前试图用这个, 后来实在是受不了了
    nightwitch
        5
    nightwitch  
       2021-11-30 19:10:40 +08:00
    pip freeze 是导出当前你的 python 环境所有的包,不是你项目引入了哪些包。
    wryyyyyyyyyyyy
        6
    wryyyyyyyyyyyy  
       2021-11-30 19:10:49 +08:00
    为每个项目建一个虚拟环境就行了
    lizytalk
        7
    lizytalk  
       2021-11-30 19:12:03 +08:00
    我现在就是借助 pycharm 去维护 requirements 文件, 运行环境用的是一个远程的 docker (用 pycharm 的 remote interpreter). 用 pip-compile 可以得到锁定版本的 requirements.txt, 不过一般不太用得到
    lizytalk
        8
    lizytalk  
       2021-11-30 19:13:20 +08:00
    @lizytalk 如果是本地环境, 我觉得 virtualenv 就足够了. 每个项目一个 requirements.txt 加一个 virtualenv.
    Latin
        9
    Latin  
       2021-11-30 19:15:09 +08:00
    pigar
    Latin
        10
    Latin  
       2021-11-30 19:16:34 +08:00   1
    针对懒得不想弄多个环境的人
    https://github.com/damnever/pigar
    还是推荐 pyenv+poetry 开发 省心
    inhzus
        11
    inhzus  
       2021-11-30 19:55:54 +08:00 via iPhone
    freeze 并不会分析你的代码有哪些依赖,而是看你安装了哪些包。当然确实不符合使用场景就是
    momomirage
        12
    momomirage  
       2021-11-30 20:41:45 +08:00
    再 pipdeptree
    jakehu
        13
    jakehu  
       2021-11-30 21:02:12 +08:00
    安装包的时候直接导出
    ```
    function pip-install {
    pip install $1 && pip freeze | grep -w "${1}=" >> requirements.txt
    }
    ```
    使用 `pip-install sanic`
    ClericPy
        14
    ClericPy  
       2021-11-30 21:04:59 +08:00
    好奇有什么办法不依赖第三方库直接冻结个版本的么, 以前折腾先开 venv 然后 pip 然后 freeze 有点嗦了, 想一句 pip 命令然后不安装只索引一下当前符合 requirements 版本的 lock 出来
    freshgoose
        15
    freshgoose  
       2021-11-30 21:06:10 +08:00
    震惊了,原来这么多人还在用最原始的 pip freeze ……
    corningsun
        16
    corningsun  
       2021-11-30 21:23:25 +08:00 via iPhone   1
    zxCoder
        17
    zxCoder  
       2021-11-30 21:26:00 +08:00
    这玩意很不好用
    jaredyam
        18
    jaredyam  
       2021-11-30 21:52:19 +08:00
    我和#13 差不多,有个专门写入移出 requirements 的 shell function ,主要是用 venv 这种项目内虚拟环境用惯了
    renmu123
        19
    renmu123  
       2021-11-30 22:56:19 +08:00 via Android
    用 poetry 吧
    yodhcn
        20
    yodhcn  
    OP
       2021-11-30 23:23:56 +08:00
    @Latin
    pyenv 管理版本
    poetry 管理依赖
    dayeye2006199
        21
    dayeye2006199  
       2021-12-01 03:12:14 +08:00
    还在手写的飘过
    SmiteChow
        22
    SmiteChow  
       2021-12-01 09:43:32 +08:00
    提前准备 requirements.txt ,加包使用-r 方式安装
    pepesii
        23
    pepesii  
       2021-12-01 13:06:41 +08:00
    作为一个土鳖,我还是在用 pip freeze ,每个项目一个 venv
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     961 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 19:15 PVG 03:15 LAX 12:15 JFK 15:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86