Как найти нужный пакет в Python: от командной строки до кода

Раздел: Установка и настройка -> Пакеты

Основные способы поиска пакетов Python

Наиболее эффективным решением для поиска уже установленных пакетов Python является использование встроенного менеджера пакетов pip с командой list, а для получения детальной информации о конкретном пакете - команда show. Этот способ работает в любой операционной системе и не требует дополнительных библиотек.

Как вывести список всех установленных пакетов в текущем окружении?

pip list

Pip upgrade package python (обновление пакета через pip)

Команда отобразит таблицу с именами пакетов и их версиями. Для более структурированного вывода в формате JSON или в виде столбцов с дополнительными данными используйте флаги:

pip list --format=json
pip list --format=columns
pip list --format=freeze  # в формате requirements.txt

Python 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 requests

Python 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 requests

Python packages list (список установленных пакетов)

Как найти все пакеты, установленные в определённой директории (например, в проекте без активации окружения)?

Если виртуальное окружение не активировано, но известно его расположение, можно указать интерпретатор из этого окружения:

/path/to/venv/bin/pip list  # Linux/macOS
/path/to/venv/Scripts/pip list  # Windows

Remove python package (удаление пакета python)

Как найти в системе файлы, связанные с установленным пакетом?

Команда pip show --files requests выводит список всех файлов, которые были установлены вместе с пакетом (работает не для всех пакетов, только для тех, где указаны файлы).

pip show --files requests
- Apt get python (установка python через apt-get)
- Windows package python (установка пакетов python на windows)
- установка pandas python (установка библиотеки pandas в python)

Расширенные примеры поиска пакетов

Ниже приведены более сложные и неочевидные сценарии использования поиска пакетов 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).

Поиск пакета Python - comments

En
Python find package (python)