Как найти нужный пакет в Python: от командной строки до кода
Основные способы поиска пакетов Python
Наиболее эффективным решением для поиска уже установленных пакетов Python является использование встроенного менеджера пакетов pip с командой list, а для получения детальной информации о конкретном пакете - команда show. Этот способ работает в любой операционной системе и не требует дополнительных библиотек.
Как вывести список всех установленных пакетов в текущем окружении?
pip listPip upgrade package python (обновление пакета через pip)
Команда отобразит таблицу с именами пакетов и их версиями. Для более структурированного вывода в формате JSON или в виде столбцов с дополнительными данными используйте флаги:
pip list --format=json
pip list --format=columns
pip list --format=freeze # в формате requirements.txtPython pip update package (обновление пакета через pip update)
Как получить подробную информацию о конкретном пакете (версия, зависимости, расположение)?
pip show requests
Python build package (сборка пакета python)
В результате отобразятся метаданные пакета: версия, автор, лицензия, путь установки, список зависимостей и т.д.
Типичная проблема: команда pip list показывает пакеты только для окружения, где установлен сам pip. Если пакеты установлены глобально, а вы находитесь в виртуальном окружении, список будет пустым.
Решение: перед вызовом pip list убедитесь, что активировано нужное виртуальное окружение (source venv/bin/activate на Linux/macOS или venv\Scripts\activate на Windows).
Как найти пакет в репозитории PyPI (Python Package Index)?
Ранее для этого использовалась команда pip search, но она устарела и больше не поддерживается. Взамен можно воспользоваться веб-интерфейсом PyPI по адресу https://pypi.org/search/ или утилитой pip_search (требует установки pip install pip-search).
pip install pip-search
pip_search requestsPython download package (скачивание пакета python)
Как программно узнать, установлен ли пакет, и получить его версию?
Для проверки наличия пакета внутри скрипта Python рекомендуется использовать модуль importlib.metadata (доступен с Python 3.8) или pkg_resources из setuptools.
from importlib.metadata import distribution, PackageNotFoundError
try:
dist = distribution('requests')
print(f"Версия: {dist.version}")
print(f"Автор: {dist.metadata['Author']}")
except PackageNotFoundError:
print("Пакет не установлен")Python pip install local package (установка локального пакета через pip)
Старый способ с pkg_resources:
import pkg_resources
try:
dist = pkg_resources.get_distribution('requests')
print(f"Версия: {dist.version}")
except pkg_resources.DistributionNotFound:
print("Пакет не установлен")Python install package version (установка пакета определенной версии в python)
Распространённая ошибка: ModuleNotFoundError: No module named 'importlib.metadata' - модуль появился только в Python 3.8. На более старых версиях используют importlib_metadata как стороннюю библиотеку.
Решение: установите pip install importlib-metadata и импортируйте как import importlib_metadata.
Как найти все пакеты, содержащие в имени определённую подстроку?
С помощью pip list в комбинации с grep (Linux/macOS) или findstr (Windows):
pip list | grep -i django
pip list | findstr /i djangoмодули python linux (модули python в linux)
В коде Python можно отфильтровать список установленных пакетов:
from importlib.metadata import distributions
packages = [dist.metadata['Name'] for dist in distributions()]
filtered = [pkg for pkg in packages if 'django' in pkg.lower()]
print(filtered)Update lib python (обновление библиотек python)
Как найти зависимости определённого пакета и построить дерево зависимостей?
Утилита pipdeptree отображает зависимости в виде дерева:
pip install pipdeptree
pipdeptree -p requestsPython packages list (список установленных пакетов)
Как найти все пакеты, установленные в определённой директории (например, в проекте без активации окружения)?
Если виртуальное окружение не активировано, но известно его расположение, можно указать интерпретатор из этого окружения:
/path/to/venv/bin/pip list # Linux/macOS
/path/to/venv/Scripts/pip list # WindowsRemove python package (удаление пакета python)
Как найти в системе файлы, связанные с установленным пакетом?
Команда pip show --files requests выводит список всех файлов, которые были установлены вместе с пакетом (работает не для всех пакетов, только для тех, где указаны файлы).
pip show --files requests
Расширенные примеры поиска пакетов
Ниже приведены более сложные и неочевидные сценарии использования поиска пакетов Python с полным кодом и выводом.
Пример 1. Получение списка всех установленных пакетов в формате JSON с фильтрацией по версиям
import subprocess
import json
result = subprocess.run(['pip', 'list', '--format=json'], capture_output=True, text=True)
packages = json.loads(result.stdout)
# Вывести только пакеты с версией новее 2.0
recent = [p for p in packages if p['version'] > '2.0']
for p in recent:
print(f"{p['name']}: {p['version']}")
# Пример вывода: certifi: 2024.8.30 charset-normalizer: 3.3.2 idna: 3.7 requests: 2.32.3 urllib3: 2.2.2
Пример 2. Программный поиск пакета по имени в репозитории PyPI через JSON API
import requests
import json
package_name = 'numpy'
url = f'https://pypi.org/pypi/{package_name}/json'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
info = data['info']
print(f"Название: {info['name']}")
print(f"Последняя версия: {info['version']}")
print(f"Описание: {info['summary']}")
print(f"Автор: {info['author']}")
elif response.status_code == 404:
print("Пакет не найден на PyPI")
# Вывод: Название: numpy Последняя версия: 1.26.4 Описание: Fundamental package for array computing in Python Автор: Travis E. Oliphant et al.
Пример 3. Поиск пакетов, у которых в название входит слово 'test', с помощью importlib.metadata
from importlib.metadata import distributions
packages_info = []
for dist in distributions():
name = dist.metadata['Name']
if 'test' in name.lower():
packages_info.append({
'name': name,
'version': dist.version,
'license': dist.metadata.get('License', 'unknown')
})
print(json.dumps(packages_info, indent=2, ensure_ascii=False))
[
{
"name": "pytest",
"version": "8.3.2",
"license": "MIT"
},
{
"name": "pytest-cov",
"version": "5.0.0",
"license": "MIT"
}
]
Пример 4. Использование pipdeptree для экспорта дерева зависимостей в JSON
pip install pipdeptree
pipdeptree --json-tree 2> /dev/null | python -m json.tool | head -30
Вывод (сокращён): показывает вложенную структуру зависимостей.
[
{
"package": {
"key": "requests",
"package_name": "requests",
"installed_version": "2.32.3"
},
"dependencies": [
{
"package": {
"key": "certifi",
"package_name": "certifi",
"installed_version": "2024.08.30"
},
"dependencies": []
},
{
"package": {
"key": "charset-normalizer",
"package_name": "charset-normalizer",
"installed_version": "3.3.2"
},
"dependencies": []
},
...
]
},
...
]
Пример 5. Поиск пакета с указанием версии и проверка совместимости
from importlib.metadata import distributions, version
from packaging.specifiers import SpecifierSet
required_spec = SpecifierSet(">=2.0,<3.0")
package_name = 'requests'
try:
installed_version = version(package_name)
if installed_version in required_spec:
print(f"Версия {installed_version} подходит под требования {required_spec}")
else:
print(f"Версия {installed_version} не подходит")
except Exception:
print(f"Пакет {package_name} не установлен")
Версия 2.32.3 подходит под требования >=2.0,<3.0
Пример 6. Создание собственного скрипта для поиска пакетов по категориям (топикам) из PyPI
import requests
def search_pypi(query, max_results=10):
url = f"https://pypi.org/search/?q={query}"
# PyPI search page is HTML, so we use the JSON API alternative:
api_url = f"https://pypi.org/simple/"
# Actually pypi.org/simple returns HTML, but we can use the XML-RPC API
import xmlrpc.client
client = xmlrpc.client.ServerProxy('https://pypi.org/pypi')
results = client.search({'name': query, 'summary': query}, 'and')
for r in results[:max_results]:
print(f"{r['name']:30} {r['version']:10} {r['summary'][:50]}")
search_pypi('machine learning', 5)
scikit-learn 1.5.1 A set of python modules for machine learning and data mining tensorflow 2.17.0 TensorFlow is an open source machine learning framework. keras 3.4.1 Deep learning for humans. lightgbm 4.5.0 LightGBM is a gradient boosting framework. xgboost 2.1.1 XGBoost is an optimized distributed gradient boosting library.
Пример 7. Вывод информации о всех пакетах, у которых версия является предрелизной (alpha, beta, rc)
from importlib.metadata import distributions
from packaging.version import Version, InvalidVersion
pre_releases = []
for dist in distributions():
try:
v = Version(dist.version)
if v.is_prerelease:
pre_releases.append((dist.metadata['Name'], dist.version))
except InvalidVersion:
pass
for name, ver in pre_releases:
print(f"{name}: {ver}")
# Если нет предрелизных версий, вывод будет пустым. Пример: # some-dev-package: 0.1.0a1
Для работы с версиями и диапазонами рекомендуется устанавливать библиотеку packaging (pip install packaging).