Robustly generate exact git hashes for python packages
Project description
Robustly generate exact git hashes for python packages
Installation
pip install pygitversion
Usage
The point of pygitversion is to enable you to robustly create your package with exact git version information, rather than just a simple version specifier.
It does not replace the semantic version specifier of your package, but rather complements it. pygitversion provides the tools necessary to always have git information available in a Python package (whether the actual repo is available or not).
To use in your package, follow these steps:
If pyproject.toml does not exist in your package, create it.
Add the key [build-system] to pyproject.toml, and add requires = ['pygitversion>=0.1.6','setuptools>40.8.0','wheel'] to the key.
Ensure that __init__.py contains the correct semantic __version__ specifier (eg. __version__ = 0.1.0).
In setup.py, add the following:
import pygitversion pygitversion.write_git_info_file(__file__, <rel_path_to_package>)
Ensure the package has a MANIFEST.in, and that it includes at least:
include <package>/GIT_INFO
The git version of the module may then be accessed inside your package by doing:
import pygitversion pygitversion.construct_version_info(my_package_name)
It is recommended (but not necessary) that __init__.py contain:
import pygitversion GIT_VERSION = pygitversion.construct_version_info(__name__)
It is also recommended to add GIT_INFO to your .gitignore.
Cases Addressed
There are various ways a package can be installed, and pygitversion attempts to ensure that in each case, the git version is available. The following assumes the above steps have been followed in your package.
Package cloned and installed via pip install .: a GIT_INFO file is created and installed due to MANIFEST.in. That GIT_INFO file is found whenever the package is loaded. This will break iff the installed files on your PYTHONPATH are directly modified, which should never be the case.
Package cloned and installed via pip install -e .: the module that is imported refers to the actual git repo (via symlink), and the git info is created at import time directly from the repo. This still works if the code is updated in place.
Package installed directly from hosted source control via pip install git+git:...: When pip installs the package, it first fully clones the repo, which means the GIT_INFO file is built and added to the install, just as in point 1.
Package installed from PyPI (pip install <package>): the process of building the sdist and bdist to upload to PyPI inherently re-builds and bundles the GIT_INFO file as part of the build, and this is installed with the package. Developers should be careful to build/upload only clean repositories.
Development
To run the all tests run:
tox
Changelog
0.1.0 (2019-09-04)
First release on PyPI.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file pygitversion-0.1.7-py2.py3-none-any.whl
.
File metadata
- Download URL: pygitversion-0.1.7-py2.py3-none-any.whl
- Upload date:
- Size: 6.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d6f6107805a015670d5182b2f210c28dd625994fd44de77a9ebdf791217a488 |
|
MD5 | e23cfe896372a5fdd34592fc3dbbbf3f |
|
BLAKE2b-256 | 03855bce061256fc0b17756d0e0638d78fe5d6e5cb17a33abf7e27d69b3a6edc |