如何获得 Python 分布 URL?
How do I get a Python distribution URL?
在他们的setup.pyPython包中提供了一些信息。
然后可以在 egg 的 PKG_INFO 文件中找到此信息。
安装包后如何访问它们?
例如,如果我有以下模块:
setup(name='myproject',
version='1.2.0.dev0',
description='Demo of a setup.py file.',
long_description=README + "\n\n" + CHANGELOG + "\n\n" + CONTRIBUTORS,
license='Apache License (2.0)',
classifiers=[
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
"License :: OSI Approved :: Apache Software License"
],
keywords="web sync json storage services",
url='https://github.com/Kinto/kinto')
如何使用 Python 取回 setup.py 中提供的信息?
我在想类似的东西:
import pkg_resource
url = pkg_resource.get_distribution(__package__).url
有什么想法吗?
显然有一个私人 API 可以让你用 pkg_resources
:
import pkg_resources
d = pkg_resources.get_distribution(__package__)
metadata = d._get_metadata(d.PKG_INFO)
home_page = [m for m in metadata if m.startswith('Home-page:')]
url = home_page[0].split(':', 1)[1].strip()
我希望我们能做得更好。
I wish we could do better.
事实上,我们可以。不需要使用私有方法,我们可以这样做:
import pkg_resources
import distutils
import io
distribution = pkg_resources.get_distribution(__package__)
metadata_str = distribution.get_metadata(distribution.PKG_INFO)
metadata_obj = distutils.dist.DistributionMetadata()
metadata_obj.read_pkg_file(io.StringIO(metadata_str))
url = metadata_obj.url
从python 3.8开始,您可以使用importlib.metadata
提取包的元数据。
例如,要提取 urllib3
的元数据:
>>> from importlib import metadata
>>> import urllib3
>>> list(metadata.metadata('urllib3'))
['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'License', 'Project-URL', 'Project-URL', 'Project-URL', 'Description', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python', 'Provides-Extra', 'Provides-Extra', 'Provides-Extra']
>>> metadata.metadata('urllib3')['Version']
'1.25.8'
>>> metadata.metadata('urllib3')['Project-URL']
'Documentation, https://urllib3.readthedocs.io/'
在他们的setup.pyPython包中提供了一些信息。 然后可以在 egg 的 PKG_INFO 文件中找到此信息。
安装包后如何访问它们?
例如,如果我有以下模块:
setup(name='myproject',
version='1.2.0.dev0',
description='Demo of a setup.py file.',
long_description=README + "\n\n" + CHANGELOG + "\n\n" + CONTRIBUTORS,
license='Apache License (2.0)',
classifiers=[
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
"License :: OSI Approved :: Apache Software License"
],
keywords="web sync json storage services",
url='https://github.com/Kinto/kinto')
如何使用 Python 取回 setup.py 中提供的信息?
我在想类似的东西:
import pkg_resource
url = pkg_resource.get_distribution(__package__).url
有什么想法吗?
显然有一个私人 API 可以让你用 pkg_resources
:
import pkg_resources
d = pkg_resources.get_distribution(__package__)
metadata = d._get_metadata(d.PKG_INFO)
home_page = [m for m in metadata if m.startswith('Home-page:')]
url = home_page[0].split(':', 1)[1].strip()
我希望我们能做得更好。
I wish we could do better.
事实上,我们可以。不需要使用私有方法,我们可以这样做:
import pkg_resources
import distutils
import io
distribution = pkg_resources.get_distribution(__package__)
metadata_str = distribution.get_metadata(distribution.PKG_INFO)
metadata_obj = distutils.dist.DistributionMetadata()
metadata_obj.read_pkg_file(io.StringIO(metadata_str))
url = metadata_obj.url
从python 3.8开始,您可以使用importlib.metadata
提取包的元数据。
例如,要提取 urllib3
的元数据:
>>> from importlib import metadata
>>> import urllib3
>>> list(metadata.metadata('urllib3'))
['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'License', 'Project-URL', 'Project-URL', 'Project-URL', 'Description', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python', 'Provides-Extra', 'Provides-Extra', 'Provides-Extra']
>>> metadata.metadata('urllib3')['Version']
'1.25.8'
>>> metadata.metadata('urllib3')['Project-URL']
'Documentation, https://urllib3.readthedocs.io/'