• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn
V2EX  ›  程序员

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

  •  
  •   yodhcn ·
    yodhcn · Nov 30, 2021 · 3629 views
    This topic created in 1632 days ago, the information mentioned may be changed or developed.

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