Glyco is a tool to help working with Python wheel files locally. It is a small wrapper on top of pip that is optimized to deal with Chrome-Infrastructure use cases:
Glyco handles wheel files only, because the format and the corresponding installation process are straightforward.
Glyco strives to be as compatible as possible with what the Python community is doing. One exception to this is the naming convention for wheel files. Glyco generates file names with the SHA1 of the file content appended after the version number, and expects that format when installing a package because it checks that the content matches the hash.
Example: my_package-0.0.1-0_0b7c99e75dffea206eb281cdc29f8bfb51ee7dcd-py2-none-any.whl
Installing a bare package from one repository into another is done using this series of commands:
$ cd <path/to/repo1> # Create mypackage/setup.cfg (if needed): $ cat << EOF > mypackage/setup.cfg [metadata] version = 0.0.1 description = my nice package EOF # Create ~/wheelhouse/mypackage_0.0.1_<sha1>.whl: $ glyco pack -o ~/wheelhouse mypackage # Install in destination directory: $ cd <path/to/repo2> $ glyco install -i <third_party> ~/wheelhouse/mypackage_0.0.1_<sha1>.whl
And you have an installed package in <third_party>
.
The example commands given in this section can be run from the Glyco source tree directly.
A standard Python package contains a setup.py.
mkdir example ./glyco pack tests/data/source_package --output-dir example/wheels
This command creates a wheel in example_wheels/, called source_package-0.0.1-0_cc23f640f327c011096ce6958e33a304d71e1463-py2-none-any.whl
. The SHA1 can vary, the compilation process is not (yet?) deterministic.
A bare Python package essentially means a package that can be placed on sys.path as-is. The targeted use case is distributing code that is part of a larger program.
Glyco is able to create a wheel file just for a bare package provided a setup.cfg
file exists inside the package. This file contains very little information: version number and a description (see tests/data/installed_package/setup.cfg
for the format). This solution is restricted to pure Python packages.
Example: tests/data/installed_package/
./glyco pack tests/data/installed_package --output-dir example/wheels
With the file from the step above:
./glyco install --install-dir example/local example/wheels/source_package-0.0.1-0_*-py2-none-any.whl
This creates source_package
and source_package-0.0.1.dist-info/
in example/local
. To be able to import the package you just need to add example/local
to the Python path.
Several packages can be installed at once by passing several files on the command-line.
./glyco install --install-dir example/local example/wheels/*.whl