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

2021-11-30 18:56:03 +08:00
 yodhcn

我一直没怎么搞明白 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 命令导出依赖吗?

2845 次点击
所在节点    程序员
23 条回复
Kilerd
2021-11-30 19:00:21 +08:00
考虑用一用 poetry 或者 pdm 做依赖管理?
arischow
2021-11-30 19:08:01 +08:00
其实官方文档也有推荐用 pipenv 吧,我在公司和个人项目用 poetry
lizytalk
2021-11-30 19:08:10 +08:00
pip freeze 导出的是所有安装的包.. 和你的项目实际用到了什么没有关系
lizytalk
2021-11-30 19:09:30 +08:00
@arischow pipenv 慢,真的慢, 以前试图用这个, 后来实在是受不了了
nightwitch
2021-11-30 19:10:40 +08:00
pip freeze 是导出当前你的 python 环境所有的包,不是你项目引入了哪些包。
wryyyyyyyyyyyy
2021-11-30 19:10:49 +08:00
为每个项目建一个虚拟环境就行了
lizytalk
2021-11-30 19:12:03 +08:00
我现在就是借助 pycharm 去维护 requirements 文件, 运行环境用的是一个远程的 docker (用 pycharm 的 remote interpreter). 用 pip-compile 可以得到锁定版本的 requirements.txt, 不过一般不太用得到
lizytalk
2021-11-30 19:13:20 +08:00
@lizytalk 如果是本地环境, 我觉得 virtualenv 就足够了. 每个项目一个 requirements.txt 加一个 virtualenv.
Latin
2021-11-30 19:15:09 +08:00
pigar
Latin
2021-11-30 19:16:34 +08:00
针对懒得不想弄多个环境的人
https://github.com/damnever/pigar
还是推荐 pyenv+poetry 开发 省心
inhzus
2021-11-30 19:55:54 +08:00
freeze 并不会分析你的代码有哪些依赖,而是看你安装了哪些包。当然确实不符合使用场景就是
momomirage
2021-11-30 20:41:45 +08:00
再裝個 pipdeptree
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
2021-11-30 21:04:59 +08:00
好奇有什么办法不依赖第三方库直接冻结个版本的么, 以前折腾先开 venv 然后 pip 然后 freeze 有点啰嗦了, 想一句 pip 命令然后不安装只索引一下当前符合 requirements 版本的 lock 出来
freshgoose
2021-11-30 21:06:10 +08:00
震惊了,原来这么多人还在用最原始的 pip freeze ……
corningsun
2021-11-30 21:23:25 +08:00
zxCoder
2021-11-30 21:26:00 +08:00
这玩意很不好用
jaredyam
2021-11-30 21:52:19 +08:00
我和#13 差不多,有个专门写入移出 requirements 的 shell function ,主要是用 venv 这种项目内虚拟环境用惯了
renmu123
2021-11-30 22:56:19 +08:00
用 poetry 吧
yodhcn
2021-11-30 23:23:56 +08:00
@Latin
pyenv 管理版本
poetry 管理依赖
👍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819109

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX