Список фактических имен импорта в 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
- Python: программный запуск списка «pip»
- PIP install не может найти ffi.h, даже если он распознает libffi
- Virtualenv и Pip висят навсегда
- sys_platform не определен x64 Windows
- Как сделать пакет python, содержащий только шаблоны jinja
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