2016-07-29 88 views
1

在他们的setup.py Python包中提供了一些信息。 这个信息可以在蛋的PKG_INFO文件中找到。如何获得Python分发URL?

一旦我安装了软件包,我怎样才能访问它们?

举例来说,如果我有以下模块:

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 

任何想法?

+0

似乎是http://stackoverflow.com/questions/20683118/how-to-access-python-package-metadata的副本 - 从 - 中 - 中 - 蟒蛇控制台 – Natim

回答

1

有很明显的是让你这样做有pkg_resources私有API:

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() 

我希望我们能做得更好。

0

我希望我们能做得更好。

其实我们可以。有没有必要使用私有方法,我们可能只是做:

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