177 lines
5 KiB
Text
177 lines
5 KiB
Text
|
Metadata-Version: 2.1
|
||
|
Name: google-crc32c
|
||
|
Version: 1.0.0
|
||
|
Summary: A python wrapper of the C library 'Google CRC32C'
|
||
|
Home-page: https://github.com/googleapis/python-crc32c
|
||
|
Author: Google LLC
|
||
|
Author-email: googleapis-packages@google.com
|
||
|
License: Apache 2.0
|
||
|
Platform: Posix
|
||
|
Platform: MacOS X
|
||
|
Platform: Windows
|
||
|
Classifier: Development Status :: 4 - Beta
|
||
|
Classifier: Intended Audience :: Developers
|
||
|
Classifier: License :: OSI Approved :: Apache Software License
|
||
|
Classifier: Operating System :: OS Independent
|
||
|
Classifier: Programming Language :: Python :: 3
|
||
|
Classifier: Programming Language :: Python :: 3.5
|
||
|
Classifier: Programming Language :: Python :: 3.6
|
||
|
Classifier: Programming Language :: Python :: 3.7
|
||
|
Classifier: Programming Language :: Python :: 3.8
|
||
|
Requires-Python: >=3.5
|
||
|
Description-Content-Type: text/markdown
|
||
|
Requires-Dist: cffi (>=1.0.0)
|
||
|
Provides-Extra: testing
|
||
|
Requires-Dist: pytest ; extra == 'testing'
|
||
|
|
||
|
# `google-crc32c`
|
||
|
|
||
|
This package wraps the [`google/crc32c`](https://github.com/google/crc32c)
|
||
|
hardware-based implementation of the CRC32C hashing algorithm. Multiple wheels
|
||
|
are distributed as well as source. If a wheel is not published for the python
|
||
|
version and platform you are using, you will need to compile crc32c using a
|
||
|
C toolchain.
|
||
|
|
||
|
|
||
|
# Building
|
||
|
|
||
|
## Be sure to check out all submodules:
|
||
|
|
||
|
```
|
||
|
$ git clone --recursive https://github.com/googleapis/python-crc32c
|
||
|
```
|
||
|
|
||
|
## Prerequisites
|
||
|
|
||
|
On Linux:
|
||
|
|
||
|
- `docker`
|
||
|
- `python3.7`
|
||
|
|
||
|
On OS X:
|
||
|
|
||
|
- `make`
|
||
|
- [Official][1] `python.org` Python 2.7, 3.5, 3.6 and 3.7
|
||
|
|
||
|
On Windows:
|
||
|
|
||
|
- `cmake`
|
||
|
- [Official][1] `python.org` Python 3.5, 3.6 and 3.7
|
||
|
- Visual Studio 15 2017 (just the compiler toolchain)
|
||
|
|
||
|
Unfortunately, `libcrc32c` relies on many C++11 features, so
|
||
|
building a Python 2.7 extension with the
|
||
|
[Visual C++ Compiler for Python 2.7][2] is infeasible.
|
||
|
|
||
|
|
||
|
## Building Wheels
|
||
|
|
||
|
On Linux:
|
||
|
|
||
|
```
|
||
|
./scripts/manylinux/build.sh
|
||
|
```
|
||
|
|
||
|
On OS X:
|
||
|
|
||
|
```
|
||
|
./scripts/osx/build.sh
|
||
|
```
|
||
|
|
||
|
On Windows: see `.appveyor.yml`.
|
||
|
|
||
|
## Testing/Verify Wheels
|
||
|
|
||
|
On Linux (i.e. a host OS, not a `docker` container):
|
||
|
|
||
|
```
|
||
|
$ ./scripts/manylinux/check-37.sh
|
||
|
...
|
||
|
+ venv/bin/python check_cffi_crc32c.py
|
||
|
_crc32c_cffi: <module 'crc32c._crc32c_cffi' from '.../python-crc32c/venv/lib/python3.7/site-packages/crc32c/_crc32c_cffi.abi3.so'>
|
||
|
_crc32c_cffi.lib: <Lib object for 'crc32c._crc32c_cffi'>
|
||
|
dir(_crc32c_cffi.lib): ['crc32c_extend', 'crc32c_value']
|
||
|
+ unzip -l wheels/google_crc32c-0.0.1-cp37-cp37m-manylinux1_x86_64.whl
|
||
|
Archive: wheels/google_crc32c-0.0.1-cp37-cp37m-manylinux1_x86_64.whl
|
||
|
Length Date Time Name
|
||
|
--------- ---------- ----- ----
|
||
|
26120 2018-10-25 00:09 crc32c/_crc32c_cffi.abi3.so
|
||
|
765 2018-10-24 23:57 crc32c/__init__.py
|
||
|
29552 2018-10-25 00:09 crc32c/.libs/libcrc32c-f865a225.so
|
||
|
109 2018-10-25 00:09 google_crc32c-0.0.1.dist-info/WHEEL
|
||
|
766 2018-10-25 00:09 google_crc32c-0.0.1.dist-info/METADATA
|
||
|
652 2018-10-25 00:09 google_crc32c-0.0.1.dist-info/RECORD
|
||
|
1 2018-10-25 00:09 google_crc32c-0.0.1.dist-info/zip-safe
|
||
|
7 2018-10-25 00:09 google_crc32c-0.0.1.dist-info/top_level.txt
|
||
|
--------- -------
|
||
|
57972 8 files
|
||
|
...
|
||
|
```
|
||
|
|
||
|
On OS X:
|
||
|
|
||
|
```
|
||
|
$ ./scripts/osx/check.sh
|
||
|
...
|
||
|
+ venv37/bin/python .../python-crc32c/check_cffi_crc32c.py
|
||
|
_crc32c_cffi: <module 'google_crc32c._crc32c_cffi' from '.../python-crc32c/venv37/lib/python3.7/site-packages/google_crc32c/_crc32c_cffi.abi3.so'>
|
||
|
_crc32c_cffi.lib: <Lib object for 'google_crc32c._crc32c_cffi'>
|
||
|
dir(_crc32c_cffi.lib): ['crc32c_extend', 'crc32c_value']
|
||
|
+ /Library/Frameworks/Python.framework/Versions/3.7/bin/delocate-listdeps --all --depending .../python-crc32c/wheels/google_crc32c-0.0.1-cp37-cp37m-macosx_10_6_intel.whl
|
||
|
/usr/lib/libSystem.B.dylib:
|
||
|
google_crc32c/_crc32c_cffi.abi3.so
|
||
|
google_crc32c/.dylibs/libcrc32c.dylib
|
||
|
/usr/lib/libc++.1.dylib:
|
||
|
google_crc32c/.dylibs/libcrc32c.dylib
|
||
|
@loader_path/.dylibs/libcrc32c.dylib:
|
||
|
google_crc32c/_crc32c_cffi.abi3.so
|
||
|
...
|
||
|
```
|
||
|
|
||
|
On Windows: TBD.
|
||
|
|
||
|
[1]: https://www.python.org/downloads/
|
||
|
[2]: https://aka.ms/vcpython27
|
||
|
|
||
|
## Installing locally for testing
|
||
|
|
||
|
Initialize the submodules and build the main `libcrc32c.so` shared
|
||
|
library using `cmake` / `make`:
|
||
|
|
||
|
```bash
|
||
|
$ cd python-crc32c
|
||
|
$ git submodule update --init --recursive
|
||
|
$ python -m venv venv
|
||
|
$ venv/bin/pip install --upgrade setuptools pip wheel
|
||
|
$ venv/bin/pip install cmake
|
||
|
$ mkdir usr
|
||
|
$ export CRC32C_INSTALL_PREFIX=$(pwd)/usr
|
||
|
$ mkdir google_crc32c/build
|
||
|
$ cd google_crc32c/build
|
||
|
$ ../../venv/bin/cmake \
|
||
|
> -DCRC32C_BUILD_TESTS=no \
|
||
|
> -DCRC32C_BUILD_BENCHMARKS=no \
|
||
|
> -DBUILD_SHARED_LIBS=yes \
|
||
|
> -DCMAKE_INSTALL_PREFIX:PATH=${CRC32C_INSTALL_PREFIX} \
|
||
|
> ..
|
||
|
$ make all install
|
||
|
$ cd ../..
|
||
|
```
|
||
|
|
||
|
Now, run the tests:
|
||
|
|
||
|
```bash
|
||
|
$ venv/bin/pip install -e .[testing]
|
||
|
$ venv/bin/py.test tests/
|
||
|
============================= test session starts ==============================
|
||
|
platform linux -- Python 3.6.7, pytest-3.10.0, py-1.7.0, pluggy-0.8.0
|
||
|
rootdir: ..., inifile:
|
||
|
collected 9 items
|
||
|
|
||
|
tests/test___init__.py ......... [100%]
|
||
|
|
||
|
=========================== 9 passed in 0.03 seconds ===========================
|
||
|
```
|
||
|
|
||
|
|