devpi-server-winfix: reliable private and pypi.python.org caching server
devpi-server: consistent pypi.python.org cache, github-style internal indexes
consistent robust pypi-cache
You can point pip or easy_install to the root/pypi/+simple/ index, serving as a self-updating transparent cache for pypi-hosted and external packages. Cache-invalidation uses the latest and greatest PyPI protocols. The cache index continues to serve when offline and will resume cache-updates once network is available.
Each user can have multiple indexes and upload packages and docs via standard setup.py invocations. Users, indexes (and soon projects and releases) are manipulaed through a RESTful HTTP API.
Each index can be configured to merge in other indexes so that it serves both its uploads and all releases from other index(es). For example, an index using root/pypi as a parent is a good place to test out a release candidate before you push it to PyPI.
good defaults and easy deployment
Get started easily and create a permanent devpi-server deployment including pre-configured templates for nginx and cron.
- fix a bug that resulted from accessing a non-existing project on root/pypi where upstream does not contain the X-PYPI-LAST-SERIAL header usually. Thanks Matthias Bach.
- recognize “pex” for redirections of user/index/NAME to user/index/+simple/NAME just like we do with pip/setuptools.
- fix py2 incompatibility introduced with 2.5.1 where we used a unicode header and pyramid only likes str-headers.
- fix issue289: fix simple page serving on replicas
- fix a regression of 2.3.0 which would cause many write-transactions for mirrored simple-page entries that didn’t change. Previous to the fix, accesses to mirrored simple pages will result in a new write-transaction every 30 minutes if the page is accessed which is likely on a somewhat busy site. If you running with replicas it is recommended to do an an export/import cycle to remove all the unneccessary writes that were produced since devpi-server-2.3.0. They delay the setup of new replicas considerably.
- add info about pypi_whitelist on simple page when root/pypi is blocked for a project.
- replica simple-page serving will not unneccessarily wait for new simple-page entries to arrive at the replication side if the master does not return any changes in the initial simple-page request. Previously a replica would wait for the replication-thread to catch up even if no links changed.
- fix setup.py to work on py34 and with LANG=”C” environments. Thanks Jason R. Coombs.
- fix issue284: allow users who are listed in acl_upload to delete packages
- NOTE: devpi-server-2.4 is compatible to data from devpi-server-2.3 but not the other way round. Once you run devpi-server-2.4 you can not go back. It’s always a good idea to make a backup before trying a new version :)
- NOTE: if you use --logger-cfg with .yaml files you will need to install pyyaml yourself as devpi-server-2.4 dropped it as a direct dependency as it does not install for win32/python3.5 and is not needed for devpi-server operations except for logging configuration. Specifying a *.json file always works.
- add timeout to replica requests
- fix issue275: improve error message when a serverdir exists but has no version
- improve testing mechanics and name normalization related to storing doczips
- refine keyfs to provide lazy deep readonly-views for dict/set/list/tuple types by default. This introduces safety because users (including plugins) of keyfs-values can only write/modify a value by explicitly getting it with readonly=False (thereby deep copying it) and setting it with the transaction. It also allows to avoid unnecessary copy-operations when just reading values.
- fix issue283: pypi cache didn’t work for replicas.
- performance improvements for simple pages with lots of releases. this also changed the db layout of the caching from pypi.python.org mirrors but will seamlessly work on older data, see NOTE at top.
- add “–profile-requests=NUM” option which turns on per-request profiling and will print out after NUM requests are executed and then restart profiling.
- fix tests for pypy. We officially support pypy now.