使用加密散列和布隆过滤器进行匿名链接
项目描述
A Python (and optimised C++) implementation of anonymous linkage using cryptographic linkage keys as described by Rainer Schnell, Tobias Bachteler, and Jörg Reiher in A Novel Error-Tolerant Anonymous Linking Code.
anonlink computes similarity scores, and/or best guess matches between sets of cryptographic linkage keys (hashed entity records).
Use clkhash to create cryptographic linkage keys from personally identifiable data.
安装
从 PyPi 安装预编译的 wheel 文件
pip install anonlink
或者(如果您的系统有 C++ 编译器),您可以从源代码本地安装
pip install -r requirements.txt pip install -e .
基准测试
您可以使用以下命令运行基准测试
$ python -m anonlink.benchmark
Anonlink benchmark -- see README for explanation
------------------------------------------------
Threshold: 0.5, All results returned
Size 1 | Size 2 | Comparisons      | Total Time (s)          | Throughput
       |        |        (match %) | (comparisons / matching)|  (1e6 cmp/s)
-------+--------+------------------+-------------------------+-------------
  1000 |   1000 |    1e6  (50.73%) |  0.762  (49.2% / 50.8%) |     2.669
  2000 |   2000 |    4e6  (51.04%) |  3.696  (42.6% / 57.4%) |     2.540
  3000 |   3000 |    9e6  (50.25%) |  8.121  (43.5% / 56.5%) |     2.548
  4000 |   4000 |   16e6  (50.71%) | 15.560  (41.1% / 58.9%) |     2.504
Threshold: 0.5, Top 100 matches per record returned
Size 1 | Size 2 | Comparisons      | Total Time (s)          | Throughput
       |        |        (match %) | (comparisons / matching)|  (1e6 cmp/s)
-------+--------+------------------+-------------------------+-------------
  1000 |   1000 |    1e6  ( 6.86%) |  0.170  (85.9% / 14.1%) |     6.846
  2000 |   2000 |    4e6  ( 3.22%) |  0.384  (82.9% / 17.1%) |    12.561
  3000 |   3000 |    9e6  ( 2.09%) |  0.612  (81.6% / 18.4%) |    18.016
  4000 |   4000 |   16e6  ( 1.52%) |  0.919  (78.7% / 21.3%) |    22.135
  5000 |   5000 |   25e6  ( 1.18%) |  1.163  (80.8% / 19.2%) |    26.592
  6000 |   6000 |   36e6  ( 0.97%) |  1.535  (75.4% / 24.6%) |    31.113
  7000 |   7000 |   49e6  ( 0.82%) |  1.791  (80.6% / 19.4%) |    33.951
  8000 |   8000 |   64e6  ( 0.71%) |  2.095  (81.5% / 18.5%) |    37.466
  9000 |   9000 |   81e6  ( 0.63%) |  2.766  (72.5% / 27.5%) |    40.389
 10000 |  10000 |  100e6  ( 0.56%) |  2.765  (81.7% / 18.3%) |    44.277
 20000 |  20000 |  400e6  ( 0.27%) |  7.062  (86.2% / 13.8%) |    65.711
Threshold: 0.7, All results returned
Size 1 | Size 2 | Comparisons      | Total Time (s)          | Throughput
       |        |        (match %) | (comparisons / matching)|  (1e6 cmp/s)
-------+--------+------------------+-------------------------+-------------
  1000 |   1000 |    1e6  ( 0.01%) |  0.009  (99.0% /  1.0%) |   113.109
  2000 |   2000 |    4e6  ( 0.01%) |  0.033  (98.7% /  1.3%) |   124.076
  3000 |   3000 |    9e6  ( 0.01%) |  0.071  (99.1% /  0.9%) |   128.515
  4000 |   4000 |   16e6  ( 0.01%) |  0.123  (99.0% /  1.0%) |   131.654
  5000 |   5000 |   25e6  ( 0.01%) |  0.202  (99.1% /  0.9%) |   124.999
  6000 |   6000 |   36e6  ( 0.01%) |  0.277  (99.0% /  1.0%) |   131.403
  7000 |   7000 |   49e6  ( 0.01%) |  0.368  (98.9% /  1.1%) |   134.428
  8000 |   8000 |   64e6  ( 0.01%) |  0.490  (99.0% /  1.0%) |   131.891
  9000 |   9000 |   81e6  ( 0.01%) |  0.608  (99.0% /  1.0%) |   134.564
 10000 |  10000 |  100e6  ( 0.01%) |  0.753  (99.0% /  1.0%) |   134.105
 20000 |  20000 |  400e6  ( 0.01%) |  2.905  (98.8% /  1.2%) |   139.294
Threshold: 0.7, Top 100 matches per record returned
Size 1 | Size 2 | Comparisons      | Total Time (s)          | Throughput
       |        |        (match %) | (comparisons / matching)|  (1e6 cmp/s)
-------+--------+------------------+-------------------------+-------------
  1000 |   1000 |    1e6  ( 0.01%) |  0.009  (99.0% /  1.0%) |   111.640
  2000 |   2000 |    4e6  ( 0.01%) |  0.033  (98.6% /  1.4%) |   122.060
  3000 |   3000 |    9e6  ( 0.01%) |  0.074  (99.1% /  0.9%) |   123.237
  4000 |   4000 |   16e6  ( 0.01%) |  0.124  (99.0% /  1.0%) |   130.204
  5000 |   5000 |   25e6  ( 0.01%) |  0.208  (99.1% /  0.9%) |   121.351
  6000 |   6000 |   36e6  ( 0.01%) |  0.275  (99.0% /  1.0%) |   132.186
  7000 |   7000 |   49e6  ( 0.01%) |  0.373  (99.0% /  1.0%) |   132.650
  8000 |   8000 |   64e6  ( 0.01%) |  0.496  (99.1% /  0.9%) |   130.125
  9000 |   9000 |   81e6  ( 0.01%) |  0.614  (99.0% /  1.0%) |   133.216
 10000 |  10000 |  100e6  ( 0.01%) |  0.775  (99.1% /  0.9%) |   130.230
 20000 |  20000 |  400e6  ( 0.01%) |  2.939  (98.9% /  1.1%) |   137.574
表格的解释如下。每个表格衡量 Dice 系数比较函数的吞吐量。四个表格对应两种不同的“匹配阈值”和“结果限制”选择。
这些参数被选择来表征两种不同的性能场景。由于用于比较的数据是随机生成的,第一个阈值值(0.5)将导致约 50% 的候选者“匹配”,而第二个阈值值(0.7)将导致 ~0.01% 的候选者匹配(这些值在“匹配 %”列中报告)。如果表头包括“返回所有结果”,则所有高于阈值的匹配都将返回并传递给求解器。在 0.5 的阈值下,大量的匹配意味着大部分时间都花在保持候选者顺序上。接下来我们限制每条记录的匹配数最多为 100 - 这也必须高于阈值。
在最后两个表格中,我们使用阈值值 0.7,这非常有效地过滤了候选匹配的数量。在这里,吞吐量主要取决于比较代码本身,添加前 100 个过滤器没有产生重大影响。
最后,总时间列包括关于计算(稀疏)相似性矩阵 比较 所花费时间比例以及花费在贪婪求解器中的 匹配 时间的指示。后者的确定由相似性矩阵的大小决定,这大约是 comparisons * match% / 100。
测试
使用 pytest 运行单元测试
$ pytest ====================================== test session starts ====================================== platform linux -- Python 3.6.4, pytest-3.2.5, py-1.4.34, pluggy-0.4.0 rootdir: /home/hlaw/src/n1-anonlink, inifile: collected 71 items tests/test_benchmark.py ... tests/test_bloommatcher.py .............. tests/test_e2e.py .............ss.... tests/test_matcher.py ..x.....x......x....x.. tests/test_similarity.py ......... tests/test_util.py ... ======================== 65 passed, 2 skipped, 4 xfailed in 4.01 seconds ========================
要启用稍大的测试,请添加以下环境变量
- INCLUDE_10K 
- INCLUDE_100K 
局限性
- 链接过程具有 n^2 时间复杂度 - 尽管存在算法可以显著加快这个过程。一些可能的加速方法在 Privacy Preserving Record Linkage with PPJoin 中进行了描述。 
讨论
如果您遇到错误,可以在我们的 GitHub 问题跟踪器 中报告。
还有一个 anonlink 邮件列表 用于开发讨论和发布公告。
无论我们在哪里互动,我们都努力遵循 Python 社区行为准则。
引用
Anonlink 是由 CSIRO 的 Data61 设计、开发和支持的。如果您在研究中使用了这个库的任何部分,请使用以下 BibTex 条目进行引用
@misc{Anonlink,
  author = {CSIRO's Data61},
  title = {Anonlink Private Record Linkage System},
  year = {2017},
  publisher = {GitHub},
  journal = {GitHub Repository},
  howpublished = {\url{https://github.com/data61/anonlink}},
}
许可证
版权 2017 CSIRO (Data61)
根据 Apache License 2.0(“许可”)许可;除非遵守许可,否则您不得使用此文件。您可以在以下位置获得许可副本
除非适用法律要求或书面同意,否则在许可证下分发的软件按照“现状”原则分发,不提供任何形式的明示或暗示保证。有关许可证的权限和限制的特定语言,请参阅许可证。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
哈希值 for anonlink-0.15.3-pp39-pypy39_pp73-win_amd64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 37b45e48dd5c4c0b80cfe03d432c0b1110d40cda408300986abd5bf88d28f437 | |
| MD5 | a5d55d3fe0b87ee923ae142cb7c411d2 | |
| BLAKE2b-256 | 562ebe5634a4971a822999aa48784da7f6c963f942decf5d71c148f400e728ce | 
哈希值 for anonlink-0.15.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 6e0a8c64e116d9eab72b08ff963fadf280ed340239b130aa654dfa16f10a2351 | |
| MD5 | a9e915fb188bc477750ce38fa99fbd9b | |
| BLAKE2b-256 | 11fad0494adbe365b0768bd047b1d3218f117dbac9603f550af4218fd9bc0e2a | 
哈希值 for anonlink-0.15.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 51a7f09186189d2b85bd3058bb75a35f2ec6b78ca9735a93771be94ffe560ab0 | |
| MD5 | a74f67554bdf2ee6baa56f6537e9eba6 | |
| BLAKE2b-256 | d2772a8f20700e7f2c6b98c542fbd14ee62c211f8f3ce4d6237d729096231ce1 | 
哈希值 for anonlink-0.15.3-pp38-pypy38_pp73-win_amd64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 085dc8d55beabeea5c70bbd5a21636c423cc8c59fbadde13a5709f562749e712 | |
| MD5 | fb84b281f2be7022e8fbdc6eaf56adb1 | |
| BLAKE2b-256 | 36e97e5cfd2b59cedfd21745f6f3f00c4a3ceb4c1bea71481f950ca02621e7ad | 
哈希值 for anonlink-0.15.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | fb96c3e97e11eda3cac32dc22ffc0ee3b843386b2a02316886c6b2d443805581 | |
| MD5 | 252a8c23d8c39b1f5317a0a0f7eb289d | |
| BLAKE2b-256 | bb431d11c277f3e3f2dd8033bbc1f7a490addae16637c3dacad72f9da25479b5 | 
哈希值 for anonlink-0.15.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | f3b2ba3345f2b3882d60a77ad101bcca218a1493a016e94a9cf79c68ce704437 | |
| MD5 | e0268682256dbdf07c751a5bfe1ad854 | |
| BLAKE2b-256 | 87041a77788ca2799045d7ef6a5d5081d8e6767f257730c4c8005d7ea021b808 | 
哈希值 for anonlink-0.15.3-pp37-pypy37_pp73-win_amd64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4537d46e125e22893d6d60535fbe8d3809b403c46e4b8d64cf7130077f46d336 | |
| MD5 | 708c9c87559559367221ba4a28e1769f | |
| BLAKE2b-256 | 0d8dde8e8d0e44305f287ae9e94a9dc2d4f4290fd2c7c1077abdebc944c6e7d7 | 
哈希值 for anonlink-0.15.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b03c21f684c0b8ef71811e4eba1b7d339ed7519484932a8b1879d94b245b9e98 | |
| MD5 | 9ee320c2b0a804379eca873066a0ed81 | |
| BLAKE2b-256 | a79b8e520debf794540974787d752c9142e8fe0a7bc2a397e67aad8e9f0fac42 | 
哈希值 for anonlink-0.15.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 397f26533572bb41b5423c0ff8a3a53a6ca2a5cffdfb7b1e72f9cb49a6150bc4 | |
| MD5 | 2133f9daaeb59acce1f3dd33986cab7f | |
| BLAKE2b-256 | d29f528bb4927c6534609a5dda399617d6b89d7b73524c80e4c8c86234a6131e | 
哈希值 for anonlink-0.15.3-cp311-cp311-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 61702b485002f2d62ee9293f97a90fd673bc32ff1a7d9b9d80ae44cf20436fff | |
| MD5 | 8c050ec1a4c30a42e21b6bcceff39940 | |
| BLAKE2b-256 | d7f18eeca06d1646b9fdee870ce734103f01f366498b80ce2b4cf83ddffbd8bd | 
哈希值 for anonlink-0.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5a94bb7a407767e05f9988aa7356410b80e4086fba77b7a48c43d88393cab34d | |
| MD5 | d417646a5f1a58f99ce540a3a8f34483 | |
| BLAKE2b-256 | 2b5446b5f1caae52880645707eea8a4982586d0512f4e2e9334e77501ff31ec6 | 
哈希值 for anonlink-0.15.3-cp311-cp311-macosx_11_0_arm64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 01053a9ceef51de4c8044e3ed29a7fa3f151adec1717389877717a272d5480c7 | |
| MD5 | 182ec37f091aba49cff1727bee2a9fb1 | |
| BLAKE2b-256 | 6ea8bab173513549a02e064c6c981f4d4748c031c2a1fdcd00ca55e1b0143ef2 | 
哈希值 for anonlink-0.15.3-cp311-cp311-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | f828bd1888ed4c69e4b5cf984abd499004a9544cc0b941da9a9246a9a9ce9a76 | |
| MD5 | 4b3173529291063718dcbee53230df6c | |
| BLAKE2b-256 | fdc98306f5bfb50765c4f3ac4846a110d43bc2cd67c1822a4a366fa9636450d1 | 
哈希值 for anonlink-0.15.3-cp310-cp310-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 795190796aa727c4e33e166fa09583a5694b53e1cee8d1c9009c42e062c4b577 | |
| MD5 | 0bac5f8d9d70bcfa0e7d52031928d05d | |
| BLAKE2b-256 | 7c4095c3dc50ec2dfdf3bc25206606e33b85d67b1608cf893b0e6f7a19b5f9b8 | 
哈希值 for anonlink-0.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | cb939c3e7f10bef3287890c0fa5bc0a4fa224d35bd0fe131b3cc0644072e9181 | |
| MD5 | 7a40e1992c9bf2e9f3772aa5f3be7823 | |
| BLAKE2b-256 | 3799f3c471b159b4a0a0807b19572681707671bd9ca365ca5acab1698470c27c | 
哈希值 for anonlink-0.15.3-cp310-cp310-macosx_11_0_arm64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 787a827cdf9dc772a8a624105f66c22d519933b4c134023fe3ff4382b32eafb5 | |
| MD5 | b0d610ae72c931bc37e1e94fe496f67d | |
| BLAKE2b-256 | 599442af5f83492ed54c1aa86145cb9ccbe647807a2c56483e44158ec6e0c5f4 | 
哈希值 for anonlink-0.15.3-cp310-cp310-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7a82cc074db8dab14d7c12b103663653114d01db311ca6be3ed85e9d6508f8fc | |
| MD5 | ee2b1835f944fd6fa8c2e0865cb086c0 | |
| BLAKE2b-256 | e20f21f7ff59e69bd2b496f7f712619fdde2f1169a5ab47168faaf5ecbd5c4de | 
哈希值 for anonlink-0.15.3-cp39-cp39-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b13c98a1833b34181a4294087b45628a17430b3e3da1209483ffc59aa76965fe | |
| MD5 | ac5934aa9a0979a017ae353dc406c49d | |
| BLAKE2b-256 | bb9e015df530550c666c58d2cb9800b826287c64cb3660c973689bfd1b600820 | 
哈希值 for anonlink-0.15.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 1052361ce7bad40a96054dbbc573508cf5693819976ac1227fcc68caebf53899 | |
| MD5 | cb5541548f65e7d387454125ee3980f4 | |
| BLAKE2b-256 | e207d9196495095b46ee18312f801a14d78988347351681589f932f337a694e5 | 
哈希值 用于 anonlink-0.15.3-cp39-cp39-macosx_11_0_arm64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 792129bd674496f38d169eed2ccdea3a0302498882969839309e28ad3cc76b13 | |
| MD5 | 1fe68c3d63bfb2b1c54f6a989e0b3e98 | |
| BLAKE2b-256 | 6a577f189b3be96e2ca86978bf01954ed5d3e3552203ff2cc37f4d78ac9f6afb | 
哈希值 用于 anonlink-0.15.3-cp39-cp39-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e47e9e433f04022e1c925da548e057ca7981788fe772e571036f8ff8c9dee9fd | |
| MD5 | 1c77ee9b192114950d378614c2203c29 | |
| BLAKE2b-256 | c6c66a3194793a118dd0f281f5f7d697068a8d8a679ac4b5691883f4614d6587 | 
哈希值 用于 anonlink-0.15.3-cp38-cp38-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b489adc8977ac17ae0fd7260037d6f75d3e82ba3ac28766175c087ddc7d4bb15 | |
| MD5 | 6a646e6a9ae4a583725805e70c121231 | |
| BLAKE2b-256 | d713c6baee8dae5407cb13cec78d523df4179441648efd4acea7f1645525bd3c | 
哈希值 用于 anonlink-0.15.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | c7bbaf02e2da35ffb6824fab7a001d86d098a2a433ac52776e732833b2e570e7 | |
| MD5 | 8595869fd2926678834d967b0697234d | |
| BLAKE2b-256 | ecc38e9814f262e451c8781eab484c0fcd1e1eb45389eef430185aec2e8dd0d8 | 
哈希值 用于 anonlink-0.15.3-cp38-cp38-macosx_11_0_arm64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 83785a380d8adc26afa4388fe5427365bbf49f336d8fe4b48280751a5ed99973 | |
| MD5 | fb52fa300bdfee94133076ec062efd06 | |
| BLAKE2b-256 | 89917fa69d8e7bfd595025dc25439770bd1ff61397e88f1c40de8497eee47d17 | 
哈希值 用于 anonlink-0.15.3-cp38-cp38-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 0e6610810b26eb9955185c7b5f11b1501ee12dc953dc0844904f910b35b826be | |
| MD5 | 43d51c55fd80a6bf83b4f0b3fcbcc548 | |
| BLAKE2b-256 | 20a3414bcc20c688822da0ff9f448e1872dfa88207b27a3ad8c03ad10efd1f15 | 
哈希值 用于 anonlink-0.15.3-cp37-cp37m-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e63330cc290caf13b7c0d65e327dd346301ba5b7964f6d1b347158dfbbe6b4ff | |
| MD5 | 817f31785919a2ac8bf85330d5eb8b95 | |
| BLAKE2b-256 | 7641b444af21c62e801856aea191dc4238fdc5a21ca5113a35a6afa8b7991c8e | 
哈希值 用于 anonlink-0.15.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 09f96ae7bfa48152c1a05e48db63e0780ea99630fa0e8a22f41c6bfe1dcce74d | |
| MD5 | 4f3b3a34b3aa578309065b233b64362a | |
| BLAKE2b-256 | 1aaf6c768586b4b4f07173263ff3f2380a39fb86cd4ed1cd149b10593eb7ffcd | 
哈希值 用于 anonlink-0.15.3-cp37-cp37m-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 670082f0df2ffc65909b8cb18bae95678acd7c60a7ecf7edfe12f5a45073c2a2 | |
| MD5 | 695947f50fb603bea255b5920358e7ad | |
| BLAKE2b-256 | 33188189c06618dcb210d18918c089bc523079c3ccf1bcd2c256040ea8884fa4 | 
哈希值 用于 anonlink-0.15.3-cp36-cp36m-musllinux_1_1_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 54572ccb318a8add98bc1badffd55a037f93e9e40f01b22268a1774e473126e1 | |
| MD5 | 4be8e35b72c679b9ab67b3d083ace9b5 | |
| BLAKE2b-256 | 0d842c6b28090197ecd1eb3479744dec036e0c36545033be9fb90fe29cfb3537 | 
哈希值 for anonlink-0.15.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | e3ab51942edc54356ccd0df93e4bcd914481fe1e96fa1e4659415421de91f1ab | |
| MD5 | bbdaa37cf468731c9943adbb9e02f541 | |
| BLAKE2b-256 | f8fce6dbe6143976b9d95f8071bd7ac5e94e5a2845ef0a23df2cf7ae730ffb3c | 
哈希值 for anonlink-0.15.3-cp36-cp36m-macosx_10_9_x86_64.whl
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 4cfa1ff43e0258738a70c710ce6318f19bae5f479df1f806f44e60536c99908b | |
| MD5 | 4208b2accf7cea50dcbbdccc4b4e968d | |
| BLAKE2b-256 | bdbfdaf84bf9c0662e50372237d86d83eb1d27977f04e1a076e2d3e053812ab5 |