Вы можете получить версию дистрибутива 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, кажется, знает, что удалять, когда вы вызываете uninstall:
$ 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/*
Как получить программный доступ к этому сопоставлению?