V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yodhcn
V2EX  ›  程序员

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

  •  
  •   yodhcn ·
    yodhcn · 55 天前 · 1506 次点击
    这是一个创建于 55 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我一直没怎么搞明白 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  
       55 天前 via iPhone
    考虑用一用 poetry 或者 pdm 做依赖管理?
    arischow
        2
    arischow  
       55 天前 via iPhone
    其实官方文档也有推荐用 pipenv 吧,我在公司和个人项目用 poetry
    lizytalk
        3
    lizytalk  
       55 天前
    pip freeze 导出的是所有安装的包.. 和你的项目实际用到了什么没有关系
    lizytalk
        4
    lizytalk  
       55 天前
    @arischow pipenv 慢,真的慢, 以前试图用这个, 后来实在是受不了了
    nightwitch
        5
    nightwitch  
       55 天前
    pip freeze 是导出当前你的 python 环境所有的包,不是你项目引入了哪些包。
    wryyyyyyyyyyyy
        6
    wryyyyyyyyyyyy  
       55 天前
    为每个项目建一个虚拟环境就行了
    lizytalk
        7
    lizytalk  
       55 天前
    我现在就是借助 pycharm 去维护 requirements 文件, 运行环境用的是一个远程的 docker (用 pycharm 的 remote interpreter). 用 pip-compile 可以得到锁定版本的 requirements.txt, 不过一般不太用得到
    lizytalk
        8
    lizytalk  
       55 天前
    @lizytalk 如果是本地环境, 我觉得 virtualenv 就足够了. 每个项目一个 requirements.txt 加一个 virtualenv.
    Latin
        9
    Latin  
       55 天前
    pigar
    Latin
        10
    Latin  
       55 天前   ❤️ 1
    针对懒得不想弄多个环境的人
    https://github.com/damnever/pigar
    还是推荐 pyenv+poetry 开发 省心
    inhzus
        11
    inhzus  
       55 天前 via iPhone
    freeze 并不会分析你的代码有哪些依赖,而是看你安装了哪些包。当然确实不符合使用场景就是
    momomirage
        12
    momomirage  
       55 天前
    再裝個 pipdeptree
    jakehu
        13
    jakehu  
       55 天前
    安装包的时候直接导出
    ```
    function pip-install {
    pip install $1 && pip freeze | grep -w "${1}=" >> requirements.txt
    }
    ```
    使用 `pip-install sanic`
    ClericPy
        14
    ClericPy  
       55 天前
    好奇有什么办法不依赖第三方库直接冻结个版本的么, 以前折腾先开 venv 然后 pip 然后 freeze 有点啰嗦了, 想一句 pip 命令然后不安装只索引一下当前符合 requirements 版本的 lock 出来
    freshgoose
        15
    freshgoose  
       55 天前
    震惊了,原来这么多人还在用最原始的 pip freeze ……
    corningsun
        16
    corningsun  
       55 天前 via iPhone   ❤️ 1
    zxCoder
        17
    zxCoder  
       55 天前
    这玩意很不好用
    jaredyam
        18
    jaredyam  
       55 天前
    我和#13 差不多,有个专门写入移出 requirements 的 shell function ,主要是用 venv 这种项目内虚拟环境用惯了
    renmu123
        19
    renmu123  
       55 天前 via Android
    用 poetry 吧
    yodhcn
        20
    yodhcn  
    OP
       55 天前
    @Latin
    pyenv 管理版本
    poetry 管理依赖
    👍
    dayeye2006199
        21
    dayeye2006199  
       55 天前
    还在手写的飘过
    SmiteChow
        22
    SmiteChow  
       55 天前
    提前准备 requirements.txt ,加包使用-r 方式安装
    pepesii
        23
    pepesii  
       55 天前
    作为一个土鳖,我还是在用 pip freeze ,每个项目一个 venv
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4149 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:40 · PVG 15:40 · LAX 23:40 · JFK 02:40
    ♥ Do have faith in what you're doing.