1
julyclyde 2020-08-19 12:54:19 +08:00
|
2
chinvo 2020-08-19 13:04:28 +08:00 via iPhone
pip 也是个包,可以 import 进来用
|
3
18870715400 2020-08-19 17:24:11 +08:00
import subprocess
pip_path = "~/miniconda3/bin/pip" res = subprocess.run("{} list".format(pip_path), shell=True, stdout=subprocess.PIPE) infos = res.stdout 然后对 info 分割取包的版本信息 |
4
dwzhao OP @18870715400 这样只是调用系 pip 查看包的版本,并不代表进程内用的就是这个版本的包呀。除非让进程重启,这个显然是不可能的。
|
5
dwzhao OP @chinvo 看 pip 的 doc 里说:Even though pip is available from your Python installation as an importable module, via import pip, it is not supported to use pip in this way. For more details, see Fixing conflicting dependencies.
|
6
chinvo 2020-08-20 15:53:18 +08:00
@dwzhao #5 只是 pip 官方不提供支持. 而且他说的这个用法主要是运行时安装新包. 只是用下 列出包 之类的功能, 不会有太大问题的.
|
7
dwzhao OP @chinvo,实际上这样难点倒不是如何找到包的版本,而是确认进程中引用到的包的版本,同时不能因为检查这个包而引入这个包,同时也不愿意去主动 reload_model
|
8
dwzhao OP 用 pkg_resources 来查
>>>import pkg_resources >>> pkg_resources.get_distribution("construct").version '2.5.2' print([p.project_name,p.version for p in pkg_resources.working_set]) |
9
18870715400 2020-08-21 11:02:26 +08:00
@dwzhao 你的进程使用了哪个 python 环境就用对应环境的 pip 啊, 什么叫做"不代表进程内用的就是这个版本的包",难道你的一个环境同一个包还有多个版本么?
|
10
JohnDHH 2020-08-22 23:32:17 +08:00
或许可以同 gdb 挂载进程可以帮你去实现。
例如这样的文章有简单介绍: https://mozillazg.com/2017/07/debug-running-python-process-with-gdb.html |