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

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

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

    我一直没怎么搞明白 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   ·   实用小工具   ·   3055 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:53 · PVG 21:53 · LAX 05:53 · JFK 08:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.