2016-07-29 10 views
1

In ihrer setup.py Python-Pakete bietet einige Informationen. Diese Information kann dann in der PKG_INFO-Datei des Eies gefunden werden.Wie erhalte ich eine Python-Verteilungs-URL?

Wie kann ich auf sie zugreifen, nachdem ich das Paket installiert habe?

Zum Beispiel, wenn ich habe folgendes Modul:

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

Wie kann ich Python verwenden, um die Informationen in der setup.py zur Verfügung gestellt, um wieder?

Ich dachte an etwas ähnlich wie:

import pkg_resource 
url = pkg_resource.get_distribution(__package__).url 

Jede Idee?

+0

scheint ein Duplikat http://stackoverflow.com/questions/20683118/how-to-access-python-package-metadata zu sein -von-innerhalb der Python-Konsole – Natim

Antwort

1

Es gibt anscheinend eine private API, die Sie lassen Sie sich, dass mit 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() 

Ich wünschte, wir besser machen könnten.

0

Ich wünschte, wir könnten es besser machen.

Eigentlich können wir. Es gibt keine Notwendigkeit, die private Methode zu verwenden ist, können wir nur tun:

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