如何通过编程方式访问Python包的依赖项?

4

我试图获取一个PyPI包的依赖项(即其install_requires元数据)。无论是JSON还是XMLRPC API都似乎没有提供此信息。XMLRPC API的文档中指出,release_data方法应返回一个具有requires键的字典,但当我使用API时并没有看到这个。

>>> import xmlrpclib
>>> client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi')
>>> info = client.release_data('Flask', '0.10.1')
>>> 'requires' in info
False
>>> info
{'_pypi_hidden': False,
 '_pypi_ordering': 17,
 'author': 'Armin Ronacher',
 'author_email': 'armin.ronacher@active-4.com',
 'bugtrack_url': None,
 'cheesecake_code_kwalitee_id': None,
 'cheesecake_documentation_id': None,
 'cheesecake_installability_id': None,
 'classifiers': ['Development Status :: 4 - Beta',
  'Environment :: Web Environment',
  'Intended Audience :: Developers',
  'License :: OSI Approved :: BSD License',
  'Operating System :: OS Independent',
  'Programming Language :: Python',
  'Programming Language :: Python :: 3',
  'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
  'Topic :: Software Development :: Libraries :: Python Modules'],
 'description': 'Flask\n-----\n\nFlask is a microframework for Python based on Werkzeug, Jinja 2 and good\nintentions. And before you ask: It\'s BSD licensed!\n\nFlask is Fun\n````````````\n\n.. code:: python\n\n    from flask import Flask\n    app = Flask(__name__)\n\n    @app.route("/")\n    def hello():\n        return "Hello World!"\n\n    if __name__ == "__main__":\n        app.run()\n\nAnd Easy to Setup\n`````````````````\n\n.. code:: bash\n\n    $ pip install Flask\n    $ python hello.py\n     * Running on http://localhost:5000/\n\nLinks\n`````\n\n* `website <http://flask.pocoo.org/>`_\n* `documentation <http://flask.pocoo.org/docs/>`_\n* `development version\n  <http://github.com/mitsuhiko/flask/zipball/master#egg=Flask-dev>`_',
 'docs_url': '',
 'download_url': 'UNKNOWN',
 'downloads': {'last_day': 4723, 'last_month': 267891, 'last_week': 64752},
 'home_page': 'http://github.com/mitsuhiko/flask/',
 'keywords': None,
 'license': 'BSD',
 'maintainer': None,
 'maintainer_email': None,
 'name': 'Flask',
 'package_url': 'http://pypi.python.org/pypi/Flask',
 'platform': 'any',
 'release_url': 'http://pypi.python.org/pypi/Flask/0.10.1',
 'requires_python': None,
 'stable_version': None,
 'summary': 'A microframework based on Werkzeug, Jinja2 and good intentions',
 'version': '0.10.1'}

有没有另一种方法可以获取软件包的依赖关系而不需要安装该软件包?

info 包含任何内容吗?文档中说:“如果该版本不存在,则返回一个空字典。”... - Bakuriu
是的。我已经更新了帖子,包括信息字典。 - Steve L
可能这个包没有要求吗? - hellerve
Flask 有一些要求:https://github.com/mitsuhiko/flask/blob/master/setup.py#L99-L104 - Steve L
XmlRpc已被弃用。 - RufusVS
1个回答

2

我所知道的从pypi提取依赖项的唯一方法是:

  1. 下载软件包并将其解压到某个目录
  2. 运行 setup.py egg_info
  3. 解析生成的 requires.txt

例如,对于flask 0.10.1:

Werkzeug>=0.7
Jinja2>=2.4
itsdangerous>=0.21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接