devpi-server: reliable private and pypi.org caching server
You can point pip or easy_install
to the root/pypi/+simple/
index, serving as a transparent cache for pypi-hosted packages.
Each user (which can represent a person, project or team) can have
multiple indexes and upload packages and docs via standard twine
or
setup.py
invocations. Users and indexes can be manipulated through
devpi-client
_ and 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.
Get started easily and create a permanent devpi-server deployment
including pre-configured templates for nginx
and process managers.
The complementary devpi-client
_ tool
helps to manage users, indexes, logins and typical setup.py-based upload and
installation workflows.
See https://doc.devpi.net on how to get started and further documentation.
.. _devpi-client: https://pypi.org/project/devpi-client/
If you find a bug, use the issue tracker at Github
_.
For general questions use GitHub Discussions
_ or the devpi-dev@python.org mailing list
_.
For support contracts and paid help contact mail at pyfidelity.com
.
.. _issue tracker at Github: https://github.com/devpi/devpi/issues/ .. _devpi-dev@python.org mailing list: https://mail.python.org/mailman3/lists/devpi-dev.python.org/ .. _GitHub Discussions: https://github.com/devpi/devpi/discussions
.. towncrier release notes start
Use Authorization
header instead of adding username/password to URL when fetching from mirror.
Fix #993: Use the pure Python httpx library instead of aiohttp to prevent delays in supporting newest Python releases.
Fix #996: support hashes other than sha256 in application/vnd.pypi.simple.v1+json responses.
Only compare hostname instead of full URL prefix when parsing mirror packages to fix mirrors with basic authentication and absolute URLs. See #1006
+=
operator.Prevent error in find_pre_existing_file in case of incomplete metadata.
Fix #980: Remove long deprecated backward compatibility for old pluggy versions to fix error with pluggy 1.1.0.
Support export directory layout for --replica-file-search-path
option.
Fix #931: Add mirror_no_project_list
setting for mirror indexes that have no full project list like google cloud artifacts or if you want to prevent downloading the full list for huge indexes like PyPI.
Keep a reference to async tasks to avoid their removal mid execution.
Support changed default of enforce_content_length
in urllib3 >= 2.
Fix #934: Properly set PATH_INFO when outside URL is used with sub-path.
Fix #945: Adapt FatalError to be usable as an async HTTP response when updating a project on a mirror.
Fix wrong hash metadata introduced in 6.5.0 for toxresults which prevents replication. The metadata can be fixed by an export/import cycle.
Fix #914: add locking to list_projects_perstage of mirror indexes to prevent multiple slow concurrent updates of the full project name list.
Catch exceptions in async_httpget analog to httpget.
Add locking to mirror name cache to prevent race condition on updates.