2016-07-29 64 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