{ "info": { "author": "Peter Odding", "author_email": "peter@peterodding.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "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 :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: Terminals", "Topic :: Utilities" ], "description": "npm-accel: Accelerator for npm, the Node.js package manager\n===========================================================\n\n.. image:: https://travis-ci.org/xolox/python-npm-accel.svg?branch=master\n :target: https://travis-ci.org/xolox/python-npm-accel\n\n.. image:: https://coveralls.io/repos/xolox/python-npm-accel/badge.svg?branch=master\n :target: https://coveralls.io/r/xolox/python-npm-accel?branch=master\n\nThe npm-accel program is a wrapper for npm_ (the Node.js_ package manager) that\nwas created to optimize **one specific use case**: Creating a node_modules_\ndirectory from a package.json_ file as quickly as possible.\n\nIt works on the assumption that you build node_modules directories more\nfrequently then you change the contents of package.json files, because it\ncomputes a fingerprint of the dependencies and uses that fingerprint as a cache\nkey, to cache the complete node_modules directory in a tar archive.\n\nThe program is intended to be used in environments that always or frequently\nstart with an empty node_modules directory and need to populate the complete\ndirectory from scratch (e.g. continuous integration builds and deployments).\nI'm specifically not claiming that you will see any speed improvements if\nyou're updating existing node_modules directories.\n\nThe npm-accel program is currently tested on Python 2.7, 3.4, 3.5, 3.6 and PyPy\n(yes, it's written in Python, deal with it :-P). It's intended to work on UNIX\nsystems like Linux and Mac OS X and specifically won't work on Windows (see\n`supported operating systems`_ for details).\n\n.. contents::\n :local:\n\nInstallation\n------------\n\nThe `npm-accel` package is available on PyPI_ which means installation\nshould be as simple as:\n\n.. code-block:: sh\n\n $ pip install npm-accel\n\nThere's actually a multitude of ways to install Python packages (e.g. the `per\nuser site-packages directory`_, `virtual environments`_ or just installing\nsystem wide) and I have no intention of getting into that discussion here, so\nif this intimidates you then read up on your options before returning to these\ninstructions ;-).\n\nAlternatively if you are running Arch Linux, npm-accel is `available in AUR`_.\n\nUsage\n-----\n\nThere are two ways to use the `npm-accel` package: As the command line program\n``npm-accel`` and as a Python API. For details about the Python API please\nrefer to the API documentation available on `Read the Docs`_. The command line\ninterface is described below.\n\n.. contents::\n :local:\n\n.. A DRY solution to avoid duplication of the `npm-accel --help' text:\n..\n.. [[[cog\n.. from humanfriendly.usage import inject_usage\n.. inject_usage('npm_accel.cli')\n.. ]]]\n\n**Usage:** `npm-accel [OPTIONS] [DIRECTORY]`\n\nThe npm-accel program is a wrapper for npm (the Node.js package manager) that\noptimizes one specific use case: Building a \"node_modules\" directory from a\n\"package.json\" file as quickly as possible.\n\nIt works on the assumption that you build \"node_modules\" directories more\nfrequently then you change the contents of \"package.json\" files, because it\ncomputes a fingerprint of the dependencies and uses that fingerprint as a\ncache key, to cache the complete \"node_modules\" directory in a tar archive.\n\n**Supported options:**\n\n.. csv-table::\n :header: Option, Description\n :widths: 30, 70\n\n\n \"``-p``, ``--production``\",\"Don't install modules listed in \"\"devDependencies\"\".\"\n \"``-i``, ``--installer=NAME``\",\"Set the installer to use. Supported values for ``NAME`` are \"\"npm\"\", \"\"yarn\"\",\n \"\"npm-cache\"\" and \"\"npm-fast-install\"\". When yarn is available it will be\n selected as the default installer, otherwise the default is npm.\"\n \"``-u``, ``--update``\",\"Don't read from the cache but do write to the cache. If you suspect a cache\n entry to be corrupt you can use ``--update`` to 'refresh' the cache entry.\"\n \"``-n``, ``--no-cache``\",\"Disallow writing to the cache managed by npm-accel (reading is still\n allowed though). This option does not disable internal caching\n performed by npm, yarn, npm-cache and npm-fast-install.\"\n \"``-c``, ``--cache-directory=DIR``\",Set the pathname of the directory where the npm-accel cache is stored.\n \"``-l``, ``--cache-limit=COUNT``\",\"Set the maximum number of tar archives to preserve. When the cache\n directory contains more than ``COUNT`` archives the least recently used\n archives are removed. Defaults to 20.\"\n \"``-b``, ``--benchmark``\",\"Benchmark and compare the following installation methods:\n\n 1. npm install\n 2. yarn\n 3. npm-accel\n 4. npm-cache\n 5. npm-fast-install\n\n The first method performs no caching (except for the HTTP caching that's\n native to npm) while the other four methods each manage their own cache\n (that is to say, the caching logic of npm-accel will only be used in the\n second method).\n\n Warning: Benchmarking wipes the caches managed by npm, yarn, npm-accel,\n npm-cache and npm-fast-install in order to provide a fair comparison\n (you can override this in the Python API but not on the command line).\"\n \"``-r``, ``--remote-host=SSH_ALIAS``\",\"Operate on a remote system instead of the local system. The\n ``SSH_ALIAS`` argument gives the SSH alias of the remote host.\"\n \"``-v``, ``--verbose``\",Increase logging verbosity (can be repeated).\n \"``-q``, ``--quiet``\",Decrease logging verbosity (can be repeated).\n ``--version``,Report the version of npm-accel.\n \"``-h``, ``--help``\",Show this message and exit.\n\n.. [[[end]]]\n\nStatus\n------\n\nThe npm-accel project was developed and published in September '16 because I\ngot fed up waiting for ``npm install`` to finish, specifically in the context\nof continuous integration builds and deployments (where you frequently start\nwith an empty ``node_modules`` directory). It was developed in about a week\nwithout much prior knowledge about Node.js_ or npm_, which explains why it's\nwritten in Python :-P.\n\nThe project was initially published with 95% test coverage and I was careful\nnot to repeat the bugs I encountered in npm-cache_ and npm-fast-install_ while\nevaluating those tools :-).\n\nAt the time of writing (June '17) npm-accel has been in active use at my\nemployer for about nine months. During that time our builds have become bigger\nand slower and so I wanted npm-accel to be even faster :-). To this end I've\nremoved the use of ``npm prune`` and integrated support for yarn_ (it will be\nused automatically in preference over npm_ when it is installed).\n\nTo summarize: Give it a try, see if it actually speeds up your ``npm install``\nuse case and then decide whether you want to use it or not. The current release\nof npm-accel is labeled as a `beta release`_ because of the recent refactoring\nthat removed ``npm prune``, integrated yarn and cleaned up the code base.\n\nPerformance\n-----------\n\nThe following table lists the output of ``npm-accel --benchmark`` against a\nprivate code base with 58 dependencies listed in the package.json file\n(resulting in a 357 MB node_modules directory):\n\n========================= ========= =========================== ==========\nApproach Iteration Elapsed time Percentage\n========================= ========= =========================== ==========\nnpm install 1 of 2 42.47 seconds 100.00%\nnpm install 2 of 2 27.92 seconds 65.73%\nyarn 1 of 2 33.32 seconds 78.45%\nyarn 2 of 2 17.66 seconds 41.59%\nnpm-accel 1 of 2 28.22 seconds 66.45%\nnpm-accel 2 of 2 1.79 second 4.22%\nnpm-cache install npm 1 of 2 1 minute and 2.88 seconds 148.06%\nnpm-cache install npm 2 of 2 15.87 seconds 37.35%\nnpm-fast-install 1 of 2 9 minutes and 35.35 seconds 1354.62%\nnpm-fast-install (failed) 2 of 2 \\- \\-\n========================= ========= =========================== ==========\n\nSome notes about this benchmark:\n\n- Each of the five installation methods (npm, yarn, npm-accel, npm-cache and\n npm-fast-install) is run twice. The first run starts with empty cache\n directories and is intended to \"prime the cache\". The second run is intended\n to actually use the cache and should be able to do so quite effectively,\n given that the package.json file does not change between the two runs.\n\n- During the benchmark, the caching performed by npm-accel is only used in the\n sixth row of the table above. This is because the original point of the\n benchmark (for me) was to find out whether it was even worth it to develop\n and publish npm-accel. That is to say, if it wouldn't have given a speed\n improvement it wasn't worth my time, nor yours :-P.\n\n.. _supported operating systems:\n\nSupported operating systems\n---------------------------\n\nThe npm-accel program was developed to work on UNIX systems like Linux and Mac\nOS X. It requires several external commands to be installed (e.g. ``mkdir``,\n``mv``, ``rm``, ``tar`` and ``which``).\n\nI've tried to keep all of the external command invocations compatible with the\nLinux and BSD variants of commands like tar_, that is to say npm-accel uses\nonly short options and skips the more esoteric features even if they would be\nuseful. If you find that I failed in this respect, please feel free to report\nthis as a bug.\n\nFor posterity: It was a conscious decision (for several reasons) to use the\ntar_ program instead of manipulating tar archives via Python's `tarfile\nmodule`_.\n\nFuture improvements\n-------------------\n\n**Dealing with optionalDependencies**\n I've never seen ``optionalDependencies`` in the wild but encountered them\n while browsing through the package.json_ documentation. Maybe these should be\n part of the computed cache keys aswell?\n\nContact\n-------\n\nThe latest version of `npm-accel` is available on PyPI_ and GitHub_. The\ndocumentation is hosted on `Read the Docs`_. For bug reports please create an\nissue on GitHub_. If you have questions, suggestions, etc. feel free to send me\nan e-mail at `peter@peterodding.com`_.\n\nLicense\n-------\n\nThis software is licensed under the `MIT license`_.\n\n\u00a9 2017 Peter Odding.\n\n\n.. External references:\n.. _available in AUR: https://aur.archlinux.org/packages/npm-accel/\n.. _beta release: https://en.wikipedia.org/wiki/Software_release_life_cycle#Beta\n.. _GitHub: https://github.com/xolox/python-npm-accel\n.. _MIT license: http://en.wikipedia.org/wiki/MIT_License\n.. _Node.js: https://nodejs.org/en/\n.. _node_modules: https://docs.npmjs.com/getting-started/installing-npm-packages-locally#installing\n.. _npm-cache: https://www.npmjs.com/package/npm-cache\n.. _npm-fast-install: https://www.npmjs.com/package/npm-fast-install\n.. _npm: https://www.npmjs.com/\n.. _package.json: https://docs.npmjs.com/files/package.json\n.. _per user site-packages directory: https://www.python.org/dev/peps/pep-0370/\n.. _peter@peterodding.com: peter@peterodding.com\n.. _PyPI: https://pypi.python.org/pypi/npm-accel\n.. _Read the Docs: https://npm-accel.readthedocs.io/en/latest/\n.. _tar: https://en.wikipedia.org/wiki/Tar_(computing)\n.. _tarfile module: https://docs.python.org/2/library/tarfile.html\n.. _virtual environments: http://docs.python-guide.org/en/latest/dev/virtualenvs/\n.. _yarn: https://www.npmjs.com/package/yarn\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/xolox/python-npm-accel", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "npm-accel", "package_url": "https://pypi.org/project/npm-accel/", "platform": "", "project_url": "https://pypi.org/project/npm-accel/", "project_urls": { "Homepage": "https://github.com/xolox/python-npm-accel" }, "release_url": "https://pypi.org/project/npm-accel/1.0/", "requires_dist": [ "chardet (>=2.3.0)", "executor (>=18.0)", "humanfriendly (>=3.4.1)", "property-manager (>=2.1)", "verboselogs (>=1.5)" ], "requires_python": "", "summary": "Accelerator for npm, the Node.js package manager", "version": "1.0" }, "last_serial": 2986166, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "2906b7dd8f39819810c6a3a1e9639cdb", "sha256": "79e1b8f2d335ce5ca70fa97871221aaf063f855316bb3b2c01bfaa28aa9eb12b" }, "downloads": -1, "filename": "npm_accel-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2906b7dd8f39819810c6a3a1e9639cdb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19606, "upload_time": "2016-09-15T21:27:55", "url": "https://files.pythonhosted.org/packages/8d/2d/287f910585582618d91e893efdc446c84ab71a041584c5d32c8903f3e75f/npm_accel-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "799c25953cfd34f71f3352d8a17c7d41", "sha256": "68fa117b817f750e6c94d5c955491ac30fc3138e61006c67f010383da8a7bafc" }, "downloads": -1, "filename": "npm-accel-0.1.tar.gz", "has_sig": false, "md5_digest": "799c25953cfd34f71f3352d8a17c7d41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15381, "upload_time": "2016-09-15T21:27:58", "url": "https://files.pythonhosted.org/packages/48/ef/cb882598f23cea3efc7ac5097498ec4f54c6319bbb9af3fcd857a85e442d/npm-accel-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "79e57b7aef264668d3a5257066a247f3", "sha256": "f149a771575f29827bee79fadc3e5a7c99fc2edb0bf59c8a4d63d87d1948f52d" }, "downloads": -1, "filename": "npm_accel-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "79e57b7aef264668d3a5257066a247f3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20839, "upload_time": "2016-09-16T08:37:16", "url": "https://files.pythonhosted.org/packages/2d/74/66330cc2cb855bac276ee2a54ef3d7929463f0c4499a969c3b1cd0519863/npm_accel-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eefecb0ef27817fcc4f7dccbf6033c68", "sha256": "a62afff6d1d86d62aad8c8799597595167229feb774db406836f7e30cbab2103" }, "downloads": -1, "filename": "npm-accel-0.2.tar.gz", "has_sig": false, "md5_digest": "eefecb0ef27817fcc4f7dccbf6033c68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16164, "upload_time": "2016-09-16T08:37:19", "url": "https://files.pythonhosted.org/packages/49/2f/dd896edb09d833a2c62be5c5559b1f53a8477ad0e006c16dced624864f55/npm-accel-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "b34b10c857fa9769df55cd9d0729406b", "sha256": "942607a0b7d37f9acddc4480c39de0bf51c129388e5688f195f10ad8596400ba" }, "downloads": -1, "filename": "npm_accel-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b34b10c857fa9769df55cd9d0729406b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22001, "upload_time": "2016-09-17T14:57:16", "url": "https://files.pythonhosted.org/packages/18/d7/768ca285ba4071cb7294b2fc995df42b15bc8f963250d55593a3a5dae53c/npm_accel-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d268384881b50bccc683182f8d9bbf26", "sha256": "26dc2d935a46cbbb871bdc05e1837d5c792d0ffe8830c3ac0790d3e7a9450b26" }, "downloads": -1, "filename": "npm-accel-0.3.tar.gz", "has_sig": false, "md5_digest": "d268384881b50bccc683182f8d9bbf26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16937, "upload_time": "2016-09-17T14:57:19", "url": "https://files.pythonhosted.org/packages/c6/5e/2a8e64dd8d06da2cae36a16aa18c4caae153b0188c277ae1d5414d6b619c/npm-accel-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "83cd386788a2de048c3ea93a7fb8ce63", "sha256": "49def61a44d8bd6dc2ff511b8ff9be0947b3fb55e8bd82cda017b202c75fc12d" }, "downloads": -1, "filename": "npm_accel-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83cd386788a2de048c3ea93a7fb8ce63", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23008, "upload_time": "2016-09-17T16:38:44", "url": "https://files.pythonhosted.org/packages/fe/7f/0f14dedd05d69dbc4b59363f8f36837a72ba31e74b6e8dd484d970426455/npm_accel-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4a418feef76dd66627f7a4cb78f346e", "sha256": "db4e80f77884fd88da87129757c16d67714ec31b96e70be73f1acac7818965fb" }, "downloads": -1, "filename": "npm-accel-0.3.1.tar.gz", "has_sig": false, "md5_digest": "c4a418feef76dd66627f7a4cb78f346e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17632, "upload_time": "2016-09-17T16:38:46", "url": "https://files.pythonhosted.org/packages/be/fb/eaafbb6ed92d200656807bd87bd6ae620465e75db6d1333729b3d77e313a/npm-accel-0.3.1.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "fde7e2856da82bc651ae838d36fc39d4", "sha256": "3dc54964e014437d5f2ac24f6ede4bc5a2930011c596ec82384cab88fef12a51" }, "downloads": -1, "filename": "npm_accel-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fde7e2856da82bc651ae838d36fc39d4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23886, "upload_time": "2016-10-12T11:22:43", "url": "https://files.pythonhosted.org/packages/b3/3a/b364a0352589b5fc5ca4e67323f8c1c87e01df277c14c2e977a6f25ea7fd/npm_accel-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc4f569e1125e1d5b91973335a8865f7", "sha256": "2627b20b6c61064bf7775f0de16293cc18803c8ab731fa2cea59b8934ff93126" }, "downloads": -1, "filename": "npm-accel-0.4.tar.gz", "has_sig": false, "md5_digest": "fc4f569e1125e1d5b91973335a8865f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18412, "upload_time": "2016-10-12T11:22:46", "url": "https://files.pythonhosted.org/packages/18/63/dbf0ffa8a8bc56a3690ec67e51efeb370112798e1f0b9ac4cc8b1b27c1e8/npm-accel-0.4.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "44e14245a80389028483223557c8944e", "sha256": "ddb0206d27d7a7f121aa7abd8c411da0f9aa1fe2ad362a6c01d2fab39d47ce02" }, "downloads": -1, "filename": "npm_accel-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "44e14245a80389028483223557c8944e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24990, "upload_time": "2017-06-28T22:46:13", "url": "https://files.pythonhosted.org/packages/5f/51/1f186d8c717fea267591bc57c8b9d0de7c96810a7876913e0e31fe946eba/npm_accel-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f34694d217d5375d99e0159ea92b1e2", "sha256": "8874e23e9b9f42cdca019e41d84d413b076c8b640e7908f3babcc6d483c23956" }, "downloads": -1, "filename": "npm-accel-1.0.tar.gz", "has_sig": false, "md5_digest": "2f34694d217d5375d99e0159ea92b1e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23286, "upload_time": "2017-06-28T22:46:15", "url": "https://files.pythonhosted.org/packages/7d/0a/9b2166b33517a7d7deb1ef8b0e69982c03e5f67345fc51e2033d4941ed53/npm-accel-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "44e14245a80389028483223557c8944e", "sha256": "ddb0206d27d7a7f121aa7abd8c411da0f9aa1fe2ad362a6c01d2fab39d47ce02" }, "downloads": -1, "filename": "npm_accel-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "44e14245a80389028483223557c8944e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24990, "upload_time": "2017-06-28T22:46:13", "url": "https://files.pythonhosted.org/packages/5f/51/1f186d8c717fea267591bc57c8b9d0de7c96810a7876913e0e31fe946eba/npm_accel-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f34694d217d5375d99e0159ea92b1e2", "sha256": "8874e23e9b9f42cdca019e41d84d413b076c8b640e7908f3babcc6d483c23956" }, "downloads": -1, "filename": "npm-accel-1.0.tar.gz", "has_sig": false, "md5_digest": "2f34694d217d5375d99e0159ea92b1e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23286, "upload_time": "2017-06-28T22:46:15", "url": "https://files.pythonhosted.org/packages/7d/0a/9b2166b33517a7d7deb1ef8b0e69982c03e5f67345fc51e2033d4941ed53/npm-accel-1.0.tar.gz" } ] }