{ "info": { "author": "Mike Steder", "author_email": "steder@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development", "Topic :: Utilities" ], "description": "Pundler_\n----------------------\n\nAbout\n======================\n\nPundler is an attempt to better manage python requirements files.\n\nPundler is inspired by Ruby's Gem Bundler_.\n\nSpecifically the goal is to process ``requirements.in`` or\n``requirements.txt`` into a frozen lock file similar to ``Gemfile``\nand ``Gemfile.lock`` in the ruby world.\n\nThe advantage of doing something like this is that your requirements\nfile specifies only versions of things that you specifically depend on\nand dependencies brought in by those dependencies can be easily identified\nand separated out.\n\nFor example, if I install the requirement ``jinja2==2.7`` I don't actually\ncare about also installing jinja2's dependency ``markupsafe`` but it will\nbe installed. By running Pundler I end up with a nicely pinned ``requirements.txt``\nthat I can just regenerate from my \"real\" ``requirements.in`` whenever requirements\nI actually care about change.\n\nFor example, say I have in ``requirements.in``::\n\n a==1.0\n b==2.0\n c==3.0\n\nAnd if we include the dependencies of those packages we have::\n\n a==1.0\n adep1==1.0\n adep2==1.0\n b==2.0\n bdep1==2.0\n c==3.0\n\nSay we eventually upgrade ``a`` to version 2.0::\n\n a==2.0\n adep1==1.0\n adep2==1.0\n b==2.0\n bdep1==2.0\n c==3.0\n\nIn ``a==2.0`` the dependency ``adep1==1.0`` is no longer needed. If we have one\nrequirements file with all versions pinned it isn't clear that that dependency can\nnow be removed.\n\nIf instead we simply updated the original ``requirements.in`` we could regenerate\nthe full requirements (as a ``requirements.txt``) and it would be clear that\n``adep1==1.0`` was no longer required.\n\n\nUsage\n=======================\n\nSimply run pundler in a directory with your ``requirements.in``::\n\n python setup.py develop\n pundler\n\nPundler will process the file and create a ``requirements.txt``\nthat has all packages pinned to specific versions and\nidentifies clearly what depends on what packages depend on what.\n\nExample\n========================\n\nGiven the following ``requirements.example.in``::\n\n pyramid==1.4.2\n jinja2\n txtemplate\n\nPundler will generate the this ``requirements.example.txt``::\n\n # requirement 'pyramid==1.4.2' depends on:\n WebOb==1.2.3\n pyramid==1.4.2\n translationstring==1.1\n repoze.lru==0.6\n Mako==0.8.1\n MarkupSafe==0.18\n PasteDeploy==1.5.0\n Chameleon==2.11\n venusian==1.0a8\n zope.deprecation==4.0.2\n zope.interface==4.0.5\n setuptools==0.6c11\n\n # requirement 'jinja2' depends on:\n jinja2==2.7\n markupsafe==0.18\n\n # requirement 'txtemplate' depends on:\n genshi==0.7\n #jinja2==2.7\n twisted==13.0.0\n #markupsafe==0.18\n txtemplate==1.0.2\n #zope.interface==4.0.5\n #setuptools==0.6c11\n\n\n.. _pundler: http://github.com/steder/pundler\n.. _bundler: https://github.com/bundler/bundler\n.. _Michael Steder: http://penzilla.net", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/steder/pundler", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "Pundler", "package_url": "https://pypi.org/project/Pundler/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Pundler/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/steder/pundler" }, "release_url": "https://pypi.org/project/Pundler/0.0.2/", "requires_dist": null, "requires_python": null, "summary": "An attempt to better manage dependencies in requirements files inspired by Ruby's Gem Bundler", "version": "0.0.2" }, "last_serial": 772135, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c37dc5cea8e7a363ebfbc4225903d449", "sha256": "283f90cfba480403b70027f6661c3dcafd2c20d457cd63e99b11523031f96b27" }, "downloads": -1, "filename": "Pundler-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c37dc5cea8e7a363ebfbc4225903d449", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4356, "upload_time": "2013-06-16T05:24:42", "url": "https://files.pythonhosted.org/packages/df/a3/3f7c799093145548b168a483d5c0575c917f061736f0e16939e4c79bac05/Pundler-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "5442d1acd6c960c02904ee8c7b5d697e", "sha256": "bb2cf4cc2938b46f672a096c7efcb2e02eaefad4804a4a9c0f2308b88a6a57af" }, "downloads": -1, "filename": "Pundler-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5442d1acd6c960c02904ee8c7b5d697e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4387, "upload_time": "2013-06-16T05:37:51", "url": "https://files.pythonhosted.org/packages/c0/a1/ead67eba477beb1b78bd6f6d41b1f8efe14a31cf33c483c0c092c99bc6ca/Pundler-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5442d1acd6c960c02904ee8c7b5d697e", "sha256": "bb2cf4cc2938b46f672a096c7efcb2e02eaefad4804a4a9c0f2308b88a6a57af" }, "downloads": -1, "filename": "Pundler-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5442d1acd6c960c02904ee8c7b5d697e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4387, "upload_time": "2013-06-16T05:37:51", "url": "https://files.pythonhosted.org/packages/c0/a1/ead67eba477beb1b78bd6f6d41b1f8efe14a31cf33c483c0c092c99bc6ca/Pundler-0.0.2.tar.gz" } ] }