Вы можете получить версию дистрибутива Python, используя
import pkg_resources
pkg_resources.get_distribution("distro").version
Это здорово, если вы знаете имя дистрибутива, однако мне нужно динамически определять имя моего дистрибутива во время выполнения.
# Common framework base app class, extended by each app
class App(object):
def get_app_version(self) -> str:
package_name = self.__class__.__module__.split('.')[0]
try:
return pkg_resources.get_distribution(package_name).version
except Exception:
return "development"
Это работает в случаях, когда имя пакета приложения совпадает с именем дистрибутива (например, requests
). Однако это не удается, если они не совпадают (например, my-app
, содержащий пакет my_app
).
Итак, мне нужно сопоставление между дистрибутивами и их пакетами, которое, я уверен, должно где-то существовать, поскольку pip, похоже, знает, что удалять при вызове удаления:
$ pip uninstall requests
Uninstalling requests-2.21.0:
Would remove:
/home/user/.virtualenvs/app/lib/python3.6/site-packages/requests-2.21.0.dist-info/*
/home/user/.virtualenvs/app/lib/python3.6/site-packages/requests/*
Как программно получить доступ к этому отображению?