PyPI からパッケージの tarball を取ってくる
PyPI からパッケージの tarball を一括して取ってきたいと思ったのでちょっと試してみたことをメモ。
ソース
#-*- coding:utf-8 -*- import os import sys import pprint import pkg_resources as pkg from setuptools import package_index as index def get_source_tarball(pkgnames, targetdir='/tmp/packages'): if not os.path.exists(targetdir): os.makedirs(targetdir) idx = index.PackageIndex() ws = pkg.WorkingSet() env = pkg.Environment(targetdir) reqs = [pkg.Requirement.parse(x) for x in pkgnames] for req in reqs: dist = idx.fetch_distribution(req, targetdir, source=True) ws.add(dist) resolved = ws.resolve(reqs) pprint.pprint(resolved) for dep in resolved: req = dep.as_requirement() print req path = idx.fetch(req, targetdir, source=True) print path get_source_tarball(['pylons'])
これを実行すると pylons とその依存モジュールの tarball が保存される。
結果
[Pylons 1.0 (/usr/local/lib/python2.6/dist-packages/Pylons-1.0-py2.6.egg), Tempita 0.5dev (/usr/local/lib/python2.6/dist-packages/Tempita-0.5dev-py2.6.egg), WebTest 1.2.1 (/usr/local/lib/python2.6/dist-packages/WebTest-1.2.1-py2.6.egg), WebError 0.10.2 (/usr/local/lib/python2.6/dist-packages/WebError-0.10.2-py2.6.egg), WebOb 0.9.8 (/usr/local/lib/python2.6/dist-packages/WebOb-0.9.8-py2.6.egg), Mako 0.2.5 (/usr/lib/pymodules/python2.6), nose 0.11.3 (/usr/local/lib/python2.6/dist-packages/nose-0.11.3-py2.6.egg), decorator 3.2.0 (/usr/local/lib/python2.6/dist-packages/decorator-3.2.0-py2.6.egg), simplejson 2.0.9 (/usr/lib/pymodules/python2.6), FormEncode 1.2.2 (/usr/local/lib/python2.6/dist-packages/FormEncode-1.2.2-py2.6.egg), PasteScript 1.7.3 (/usr/local/lib/python2.6/dist-packages/PasteScript-1.7.3-py2.6.egg), PasteDeploy 1.3.3 (/usr/local/lib/python2.6/dist-packages/PasteDeploy-1.3.3-py2.6.egg), Paste 1.7.3.1 (/usr/local/lib/python2.6/dist-packages/Paste-1.7.3.1-py2.6.egg), Beaker 1.5.4 (/usr/local/lib/python2.6/dist-packages/Beaker-1.5.4-py2.6.egg), WebHelpers 1.0rc1 (/usr/local/lib/python2.6/dist-packages/WebHelpers-1.0rc1-py2.6.egg), Routes 1.12.3 (/usr/local/lib/python2.6/dist-packages/Routes-1.12.3-py2.6.egg), WebOb 0.9.8 (/usr/local/lib/python2.6/dist-packages/WebOb-0.9.8-py2.6.egg), Paste 1.7.3.1 (/usr/local/lib/python2.6/dist-packages/Paste-1.7.3.1-py2.6.egg), simplejson 2.0.9 (/usr/lib/pymodules/python2.6), Pygments 1.3.1 (/usr/local/lib/python2.6/dist-packages/Pygments-1.3.1-py2.6.egg), Tempita 0.5dev (/usr/local/lib/python2.6/dist-packages/Tempita-0.5dev-py2.6.egg), PasteDeploy 1.3.3 (/usr/local/lib/python2.6/dist-packages/PasteDeploy-1.3.3-py2.6.egg), Paste 1.7.3.1 (/usr/local/lib/python2.6/dist-packages/Paste-1.7.3.1-py2.6.egg)] Pylons==1.0 /tmp/packages/Pylons-1.0.tar.gz Tempita==0.5dev /tmp/packages/Tempita-0.5dev.tar.gz WebTest==1.2.1 /tmp/packages/WebTest-1.2.1.tar.gz WebError==0.10.2 /tmp/packages/WebError-0.10.2.tar.gz WebOb==0.9.8 /tmp/packages/WebOb-0.9.8.tar.gz Mako==0.2.5 Skipping development or system egg: Mako 0.2.5 /tmp/packages/Mako-0.2.5.tar.gz nose==0.11.3 /tmp/packages/nose-0.11.3.tar.gz decorator==3.2.0 /tmp/packages/decorator-3.2.0.tar.gz simplejson==2.0.9 Skipping development or system egg: simplejson 2.0.9 /tmp/packages/simplejson-2.0.9.tar.gz FormEncode==1.2.2 /tmp/packages/FormEncode-1.2.2.tar.gz PasteScript==1.7.3 /tmp/packages/PasteScript-1.7.3.tar.gz PasteDeploy==1.3.3 /tmp/packages/PasteDeploy-1.3.3.tar.gz Paste==1.7.3.1 /tmp/packages/Paste-1.7.3.1.tar.gz Beaker==1.5.4 /tmp/packages/Beaker-1.5.4.tar.gz WebHelpers==1.0rc1 /tmp/packages/WebHelpers-1.0rc1.tar.gz Routes==1.12.3 /tmp/packages/Routes-1.12.3.tar.gz WebOb==0.9.8 /tmp/packages/WebOb-0.9.8.tar.gz Paste==1.7.3.1 /tmp/packages/Paste-1.7.3.1.tar.gz simplejson==2.0.9 /tmp/packages/simplejson-2.0.9.tar.gz Pygments==1.3.1 /tmp/packages/Pygments-1.3.1.tar.gz Tempita==0.5dev /tmp/packages/Tempita-0.5dev.tar.gz PasteDeploy==1.3.3 /tmp/packages/PasteDeploy-1.3.3.tar.gz Paste==1.7.3.1 /tmp/packages/Paste-1.7.3.1.tar.gz