如何在 Python 3 中列出使用 pip 安装的第 3 方项目(库等)
How to list the 3rd party projects (libraries, etc.) installed using pip in Python 3
是否有任何 Python 脚本或 Python 代码可以给我 Python 项目 的列表(分发包:库,等)安装(例如 pip)以便我可以循环迭代它们?
它应该在 python3.x
中工作。
pip list
命令将为您提供所有软件包及其安装版本的列表:
Package Version
----------------------------- ------------
ailment 9.0.4663
alabaster 0.7.12
angr 9.0.4663
appdirs 1.4.4
apsw 3.33.0.post1
... more lines that I cut off
如果您想在 python 中循环执行此操作,则可以使用 subprocess.check_output
捕获输出然后进行一些字符串处理:
import subprocess
packages = subprocess.check_output(["python3", "-m", "pip", "list"]).decode("utf8")
package_lines = map(str.split, packages.splitlines()[2:])
for package_name, version in package_lines:
print(f"Package {package_name} has version {version}")
您可以使用
pip freeze
在您的终端上列出所有已安装的 python 模块。
如果您希望这些模块作为您的 python 程序中的列表,您可以使用 pkg_resources 模块
# Credit: https://www.activestate.com/resources/quick-reads/how-to-list-installed-python-packages/
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
您可以使用 python 中的 pip 库轻松做到这一点:
try:
from pip._internal.operations import freeze
except ImportError: # in case pip version < 10.0
from pip.operations import freeze
modules = list(freeze.freeze())
现在 modules 变量是一个包含所有安装的 pip 的列表 modules/packages。
这就是我 运行 时为我存储在模块中的内容:
['altgraph==0.17', 'appdirs==1.4.4', 'argon2-cffi==20.1.0', 'async-generator==1.10', 'attrs==20.2.0', 'auto-py-to-exe==2.7.8', 'autopep8==1.5.4', 'backcall==0.2.0', 'beautifulsoup4==4.9.1', 'bleach==3.2.1', 'bottle==0.12.18', 'bottle-websocket==0.2.9', 'cachetools==4.1.1', 'certifi==2020.6.20', 'cffi==1.14.3', 'chardet==3.0.4', 'click==7.1.2', 'colorama==0.4.3', 'cryptography==3.2.1', 'cycler==0.10.0', 'decorator==4.4.2', 'defusedxml==0.6.0', 'distlib==0.3.1', 'docopt==0.6.2', 'Eel==0.12.4', 'entrypoints==0.3', 'et-xmlfile==1.0.1', and so on.....]
我把它剪短了,因为对我来说有很多。
Python 的标准库中有一种非常简单直接的方法可以直接执行此操作。使用 importlib.metadata
.
例如:
#!/usr/bin/env python3
import importlib.metadata
for distribution in importlib.metadata.distributions():
print(distribution.metadata['Name'], distribution.metadata['Version'])
这适用于 Python 3.8+。对于早于 3.8 的版本,我建议使用 importlib-metadata
以获得完全相同的功能。
是否有任何 Python 脚本或 Python 代码可以给我 Python 项目 的列表(分发包:库,等)安装(例如 pip)以便我可以循环迭代它们?
它应该在 python3.x
中工作。
pip list
命令将为您提供所有软件包及其安装版本的列表:
Package Version
----------------------------- ------------
ailment 9.0.4663
alabaster 0.7.12
angr 9.0.4663
appdirs 1.4.4
apsw 3.33.0.post1
... more lines that I cut off
如果您想在 python 中循环执行此操作,则可以使用 subprocess.check_output
捕获输出然后进行一些字符串处理:
import subprocess
packages = subprocess.check_output(["python3", "-m", "pip", "list"]).decode("utf8")
package_lines = map(str.split, packages.splitlines()[2:])
for package_name, version in package_lines:
print(f"Package {package_name} has version {version}")
您可以使用
pip freeze
在您的终端上列出所有已安装的 python 模块。
如果您希望这些模块作为您的 python 程序中的列表,您可以使用 pkg_resources 模块
# Credit: https://www.activestate.com/resources/quick-reads/how-to-list-installed-python-packages/
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
您可以使用 python 中的 pip 库轻松做到这一点:
try:
from pip._internal.operations import freeze
except ImportError: # in case pip version < 10.0
from pip.operations import freeze
modules = list(freeze.freeze())
现在 modules 变量是一个包含所有安装的 pip 的列表 modules/packages。
这就是我 运行 时为我存储在模块中的内容:
['altgraph==0.17', 'appdirs==1.4.4', 'argon2-cffi==20.1.0', 'async-generator==1.10', 'attrs==20.2.0', 'auto-py-to-exe==2.7.8', 'autopep8==1.5.4', 'backcall==0.2.0', 'beautifulsoup4==4.9.1', 'bleach==3.2.1', 'bottle==0.12.18', 'bottle-websocket==0.2.9', 'cachetools==4.1.1', 'certifi==2020.6.20', 'cffi==1.14.3', 'chardet==3.0.4', 'click==7.1.2', 'colorama==0.4.3', 'cryptography==3.2.1', 'cycler==0.10.0', 'decorator==4.4.2', 'defusedxml==0.6.0', 'distlib==0.3.1', 'docopt==0.6.2', 'Eel==0.12.4', 'entrypoints==0.3', 'et-xmlfile==1.0.1', and so on.....]
我把它剪短了,因为对我来说有很多。
Python 的标准库中有一种非常简单直接的方法可以直接执行此操作。使用 importlib.metadata
.
例如:
#!/usr/bin/env python3
import importlib.metadata
for distribution in importlib.metadata.distributions():
print(distribution.metadata['Name'], distribution.metadata['Version'])
这适用于 Python 3.8+。对于早于 3.8 的版本,我建议使用 importlib-metadata
以获得完全相同的功能。