Список фактических имен импорта в python

С "pip freeze" я получу список имен пакетов. например:

Django==1.9.7 psycopg2==2.6.1 djangorestframework==3.3.3 djangorestframework-jwt==1.8.0 django-rest-swagger==0.3.7 django-environ==0.4.0 python-dateutil==2.5.3 django-sendfile==0.3.10 

Есть ли способ получить список фактических имен для import ? например, вместо djangorestframework => rest_framework

3 Solutions collect form web for “Список фактических имен импорта в python”

Да, top_level.txt будет правильным именем модуля. Вы можете использовать модуль pkg_resources для извлечения метаданных из пакетов.

Код Python для этого:

 import pkg_resources def read_requirements(requirements_file): with open(requirements_file, 'r') as f: return f.read().splitlines() def get_package_name(package): return list(pkg_resources.get_distribution(package)._get_metadata('top_level.txt'))[0] requirements = read_requirements('/path/to/requirements.txt') packages = [get_package_name(p) for p in requirements] 

Вы можете использовать стандартный модуль pkgutil чтобы получить список импорта верхнего уровня, например:

 import pkgutil list(pkgutil.iter_modules()) 

Это будет только найти модули, которые живут в обычных файлах, zip-файлах или другом загрузчике, поддерживающих перечисление модулей. Должно быть большинство из них на стандартной системе.

Результатом является список 3-кортежей с загрузчиком, именем модуля и является ли он одним модулем или пакетом. Если вас интересует только имя модуля, просто выполните:

 list(item[1] for item in pkgutil.iter_modules()) 

Другой способ – посмотреть на первую строку этого файла:

 # If output of pip freeze is djangorestframework==3.3.3 # Then your dir prefix becomes "djangorestframework-3.3.3" ../lib/python2.7/site-packages/<dir-prefix>.dist-info/top_level.txt # eg ../lib/python2.7/site-packages/djangorestframework-3.3.3.dist-info/top_level.txt 
  • Компиляция Python 3.4 не копирует пип
  • доступ на доступ к папке запрещен в Windows
  • Почему у меня нет разрешений на удаление шести при установке пакета pip?
  • Pip: ImportError: точка входа ('console_scripts', 'pip') не найдена
  • pip установить Django на python3.6
  • Python - pip install pyublas: не удалось собрать яйцо
  • Простое управление зависимостями для проекта Python
  • clang error: неизвестный аргумент: '-mno-fused-madd' (ошибка установки пакета python)
  • Python - лучший язык программирования в мире.