No project description provided
Project description
git-pypi
Table of Contents
Overview
git-pypi provides a pip-compatible package index server that serves
packages based on the contents of a git repository. The server implements a
subset of Simple Repository API.
It is meant to be used in a monorepo scenario, where some packages housed in
the repository depend on others. When using git-pypi as the package index,
one can avoid specifying git package URIs explicitly.
The packages are indexed based on git tags. The service makes the following assumptions about the git repository:
- tags adhere to the following format:
<package-name>/v<package-version>, - tags are accurate w.r.t. the actual package versions they represent,
- the repository layout is flat, e.g:
.
├── package-a
│ ├── pyproject.toml
│ └── [...]
├── package-b
│ ├── pyproject.toml
│ └── [...]
└── [...]
Only serving source distributions is supported at this time.
When a specific package (e.g. package_a-1.2.3.tar.gz) is requested by pip,
and the artifact is not already cached, the server will perform the following
operations:
- Check out the package directory tree (and, optionally, additional trees as
dictated by the server config) at the given tag (e.g.
package-a/v1.2.3) to a temporary build directory. - Run the build command in the temporary build directory.
- Copy the package artifact to the cache.
- Remove the temporary build directory.
- Return a HTTP 200 response containing the package contents.
Subsequent requests for the same package will use the cached version. Cached items are keyed by the SHA1 of the commit, so re-tagging a commit will cause the package to be built again (NB: your package manager of choice is probably doing its own caching - something to watch out when re-tagging releases). Cache is persistent between server runs.
Installation
pipx install git-pypi
Usage
After installation, git-pypi provides the following CLI scripts.
git-pypi-configure
Generates a default git-pypi configuration file.
$ git-pypi-configure -h
usage: git-pypi-configure [-h] [--config CONFIG] [--force]
Generate a default git-pypi configuration file.
options:
-h, --help show this help message and exit
--config CONFIG, -c CONFIG
Config file path.
--force, -f Overwrite existing file.
git-pypi-run
Runs the git-pypi server.
$ git-pypi-run -h
usage: git-pypi-run [-h] [--git-repo GIT_REPO] [--host HOST] [--port PORT] [--config CONFIG] [--clear-cache] [--debug]
Run the git-pypi server.
options:
-h, --help show this help message and exit
--git-repo GIT_REPO, -r GIT_REPO
Git repository path.
--host HOST, -H HOST Server host
--port PORT, -p PORT Server port
--config CONFIG, -c CONFIG
Config file path.
--clear-cache Clear the package cache prior to starting.
--debug Enable debug logging.
Configuration
By default, git-pypi-run will attempt to read a configuration file from
~/.git-pypi/config.toml. Should the file be missing, a default configuration
shall be used. The config file location can be overridden by using -c flag.
Sample configuration file:
# Directory where package artifacts can be found.
package-artifacts-dir-path = "dist"
# Cache directory localtion.
cached-artifacts-dir-path = "~/.git-pypi/cache/artifacts"
# The sdist package build command.
build-command = ["make", "build"]
# Extra trees to check out for building (besides the requested package).
# extra_checkout_paths = [".makefiles"]
# Fallback index URL if a package cannot be found. Leave empty to disable the
# additional lookup.
fallback-index-url = "https://pypi.python.org/simple"
[server]
host = "127.0.0.1"
port = 60100
threads = 4
timeout = 300
Development
A makefile codifying several common tasks is available for developer's conevenience.
make fmt # format the code
make check # run static checks
make test # run tests
make test-update-snapshots # run tests and update snapshots
make build # build a package
License
git-pypi is distributed under the terms of the MIT license.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file git_pypi-0.3.0.tar.gz.
File metadata
- Download URL: git_pypi-0.3.0.tar.gz
- Upload date:
- Size: 27.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2eb35e2c3d62340b16f63bfede1fdaac1ff95cee2e2e6f12ac73038f71dc1e20
|
|
| MD5 |
8bcde676490a4fa9353e792ae61375dc
|
|
| BLAKE2b-256 |
7f3cf79c4314dc15fe7ef8009a3069885b330931b60182bcd3b488e49385cfaa
|
File details
Details for the file git_pypi-0.3.0-py3-none-any.whl.
File metadata
- Download URL: git_pypi-0.3.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d378217ae6af47d5af696fc9a6dba364a34650f2491c51d17c535db1eaed2dc0
|
|
| MD5 |
7502c4c8d342ee4dfb10d6d3566ec7ce
|
|
| BLAKE2b-256 |
eab6aadc653e6b27d882abbfc463e9c907e8056c2ea396368724bb4bddd03df4
|