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

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

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