有没有办法通过pip获得没有版本信息的已安装模块?

有没有办法通过pip获得没有版本信息的已安装模块?,pip,python-packaging,python-importlib,Pip,Python Packaging,Python Importlib,我尝试了pip freeze。我需要它只输出由换行符分隔的模块,比如pip freeze,除了没有版本号之外,因为我正在尝试创建一个自动升级程序,并且希望执行pip安装--upgrade,其中“”是没有版本号的模块名称,因为据我所知,如果您试图升级模块,则不应提供版本号。例如: colorama Flask pywin32 而不是pip-freeze所能做的: colorama==\<version> Flask==\<version> pywi

我尝试了
pip freeze
。我需要它只输出由换行符分隔的模块,比如
pip freeze
,除了没有版本号之外,因为我正在尝试创建一个自动升级程序,并且希望执行
pip安装--upgrade
,其中“”是没有版本号的模块名称,因为据我所知,如果您试图升级模块,则不应提供版本号。例如:

colorama  
Flask  
pywin32    
而不是
pip-freeze
所能做的:

colorama==\<version>  
Flask==\<version>  
pywin32==\<version>    
colorama==\
烧瓶==\
pywin32==\
其中“”是版本。
我在文档中查找了pip命令或
pip freeze
选项,但没有找到。我使用的是Windows 10。

对于Linux/macOS:

pip freeze | awk-F“=”{print$1}”
这可能适用于Windows:

pip freeze | py-c“用于导入系统中的p。stdin:print(p.split('=')[0])”
对于纯Python(3.7+)版本:

参考资料


    • pip-freeze | awk-F“==”{print$1}'
      在linux上。不知道如何在windows上运行。@wim感谢您的快速响应,您能解释一下它是如何工作的吗?我想为我的Raspberry Pi提供一个Unix版本。
      -F
      是自定义字段分隔符,$1打印第一个字段。
      python -c "import importlib.metadata; print('\n'.join([d.metadata['Name'] for d in importlib.metadata.distributions()]))"