我一直没怎么搞明白 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 命令导出依赖吗?
![]() | 1 Kilerd 2021-11-30 19:00:21 +08:00 via iPhone 考虑用一用 poetry 或者 pdm 做依赖管理? |
2 arischow 2021-11-30 19:08:01 +08:00 via iPhone 其实官方文档也有推荐用 pipenv 吧,我在公司和个人项目用 poetry |
![]() | 3 lizytalk 2021-11-30 19:08:10 +08:00 pip freeze 导出的是所有安装的包.. 和你的项目实际用到了什么没有关系 |
5 nightwitch 2021-11-30 19:10:40 +08:00 pip freeze 是导出当前你的 python 环境所有的包,不是你项目引入了哪些包。 |
6 wryyyyyyyyyyyy 2021-11-30 19:10:49 +08:00 为每个项目建一个虚拟环境就行了 |
![]() | 7 lizytalk 2021-11-30 19:12:03 +08:00 我现在就是借助 pycharm 去维护 requirements 文件, 运行环境用的是一个远程的 docker (用 pycharm 的 remote interpreter). 用 pip-compile 可以得到锁定版本的 requirements.txt, 不过一般不太用得到 |
![]() | 8 lizytalk 2021-11-30 19:13:20 +08:00 @lizytalk 如果是本地环境, 我觉得 virtualenv 就足够了. 每个项目一个 requirements.txt 加一个 virtualenv. |
![]() | 9 Latin 2021-11-30 19:15:09 +08:00 pigar |
![]() | 10 Latin 2021-11-30 19:16:34 +08:00 ![]() |
![]() | 11 inhzus 2021-11-30 19:55:54 +08:00 via iPhone freeze 并不会分析你的代码有哪些依赖,而是看你安装了哪些包。当然确实不符合使用场景就是 |
12 momomirage 2021-11-30 20:41:45 +08:00 再 pipdeptree |
![]() | 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` |
![]() | 14 ClericPy 2021-11-30 21:04:59 +08:00 好奇有什么办法不依赖第三方库直接冻结个版本的么, 以前折腾先开 venv 然后 pip 然后 freeze 有点嗦了, 想一句 pip 命令然后不安装只索引一下当前符合 requirements 版本的 lock 出来 |
15 freshgoose 2021-11-30 21:06:10 +08:00 震惊了,原来这么多人还在用最原始的 pip freeze …… |
![]() | 16 corningsun 2021-11-30 21:23:25 +08:00 via iPhone ![]() |
17 zxCoder 2021-11-30 21:26:00 +08:00 这玩意很不好用 |
![]() | 18 jaredyam 2021-11-30 21:52:19 +08:00 我和#13 差不多,有个专门写入移出 requirements 的 shell function ,主要是用 venv 这种项目内虚拟环境用惯了 |
19 renmu123 2021-11-30 22:56:19 +08:00 via Android 用 poetry 吧 |
21 dayeye2006199 2021-12-01 03:12:14 +08:00 还在手写的飘过 |
![]() | 22 SmiteChow 2021-12-01 09:43:32 +08:00 提前准备 requirements.txt ,加包使用-r 方式安装 |
![]() | 23 pepesii 2021-12-01 13:06:41 +08:00 作为一个土鳖,我还是在用 pip freeze ,每个项目一个 venv |