我一直没怎么搞明白 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 1
|
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 1
|
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
|