Skip to main content

Query your data, where it lives

Project description

Opteryx

Query your data, where it lives.

A unified SQL interface to unlock insights across your diverse data sources, from blobs stores to databases - effortless cross-platform data analytics.

Opteryx We're excited to have you join our journey. Let us know how we can help!

PyPI Latest Release Downloads codecov opteryx PyPI Latest Release

InstallExamplesGet Involved

Resource Location
Source Code https://github.com/mabel-dev/opteryx
Documentation https://opteryx.dev/
Download https://pypi.org/project/opteryx/

What is Opteryx?

Opteryx is a Python library enabling SQL queries across diverse data sources like Apache Iceberg, Postgres, Parquet, and MongoDB. Opteryx champions the SQL-on-everything approach, streamlining cross-platform data analytics by federating SQL queries across diverse data sources. The goal is to enhance your data analytics process by offering a unified way to access data from across your organization. Opteryx combines the simplicity of SQLite and DuckDB with federated query capabilities found in Presto and Trino.

Opteryx offers the following features:

  • SQL queries on data files generated by other processes, such as logs
  • A command-line tool for filtering, transforming, and combining files
  • Integration with familiar tools like pandas and Polars
  • Embeddable as a low-cost engine, enabling portability and allowing for hundreds of analysts to leverage ad hoc databases with ease
  • Unified and federated access to data on disk, in the cloud, and in on-premises databases, not only through the same interface but in the same query

How Does it Work?

Opteryx processes queries by first determining the appropriate query language to interact with different downstream data platforms. It translates your query into SQL, CQL, or another suitable query language based on the data source. This enables Opteryx to efficiently retrieve the necessary data from systems such as MySQL or MongoDB to respond to your query.

Opteryx

Why Use Opteryx?

Familiar Interface

Opteryx supports key parts of the Python DBAPI and SQL92 standard standards which many analysts and engineers will already know how to use.

Consistent Syntax

Opteryx creates a common SQL-layer over multiple data platforms, allowing backend systems to be upgraded, migrated or consolidated without changing any Opteryx code.

Where possible, errors and warnings returned by Opteryx help the user to understand how to fix their statement to reduce time-to-success for even novice SQL users.

Consumption-Based Billing Friendly

Opteryx is well-suited for deployments to environments which are pay-as-you-use, like Google Cloud Run. Great for situations where you have low-volume usage, or multiple environments, where the costs of many traditional database deployment can quickly add up.

Python Ecosystem

Opteryx is Open Source Python, it quickly and easily integrates into Python code, including Jupyter Notebooks, so you can start querying your data within a few minutes. Opteryx integrates with many of your favorite Python data tools, you can use Opteryx to run SQL against pandas and Polars DataFrames, and even execute a JOIN on an in-memory DataFrame and a remote SQL dataset.

Time Travel

Designed for data analytics in environments where decisions need to be replayable, Opteryx allows you to query data as at a point in time in the past to replay decision algorithms against facts as they were known in the past. You can even self-join tables historic data, great for finding deltas in datasets over time. (data must be structured to enable temporal queries)

Fast

Benchmarks on M2 Pro Mac running an ad hoc GROUP BY over a 6 million row parquet file via the CLI in ~1/4th of a second from a cold start (no caching and predefined schema). (different systems will have different performance characteristics)

Instant Elasticity

Designed to run in Knative and similar environments like Google Cloud Run, Opteryx can scale down to zero, and scale up to respond to thousands of concurrent queries within seconds.

Bring your own Data

Opteryx

Opteryx supports multiple query engines, dataframe APIs and storage formats. You can mix-and-match sources in a single query. Opteryx can even JOIN datasets stored in different formats and different platforms in the same query, such as Parquet, Apache Iceberg and MySQL.

Opteryx allows you to query your data directly in the systems where they are stored, eliminating the need to duplicate data into a common store for analytics. This saves you the cost and effort of maintaining duplicates.

Opteryx can push parts of your query to the source query engine, allowing queries to run at the speed of the backend, rather than your local computer.

And if there's not a connector in the box for your data platform; feel free to submit a pull request to add one.

Install

Installing from PyPI is recommended.

pip install opteryx

To build Opteryx from source, refer to the contribution guides.

Opteryx installs with a small set of libraries it needs for core functionality, such as Numpy, PyArrow, and orjson. Some features require additional libraries to be installed, you are notified of these libraries as they are required.

Examples

Filter a Dataset on the Command Line

In this example, we are running Opteryx from the command line to filter one of the internal example datasets and display the results on the console.

python -m opteryx "SELECT * FROM \$astronauts WHERE 'Apollo 11' IN UNNEST(missions);"

Opteryx this example is complete and should run as-is

Execute a Simple Query in Python

In this example, we are showing the basic usage of the Python API by executing a simple query that makes no references to any datasets.

# Import the Opteryx SQL query engine library.
import opteryx

# Execute a SQL query to evaluate the expression 4 * 7.
# The result is stored in the 'result' variable.
result = opteryx.query("SELECT 4 * 7;")

# Display the first row(s) of the result to verify the query executed correctly.
result.head()
ID 4 * 7
1 28

this example is complete and should run as-is

Execute SQL on a pandas DataFrame

In this example, we are running a SQL statement on a pandas DataFrame and returning the result as a new pandas DataFrame.

# Required imports
import opteryx
import pandas

# Read data from the exoplanets.csv file hosted on Google Cloud Storage
# The resulting DataFrame is stored in the variable `pandas_df`.
pandas_df = pandas.read_csv("https://storage.googleapis.com/opteryx/exoplanets/exoplanets.csv")

# Register the pandas DataFrame with Opteryx under the alias "exoplanets"
# This makes the DataFrame available for SQL-like queries.
opteryx.register_df("exoplanets", pandas_df)

# Perform an SQL query to group the data by `koi_disposition` and count the number
# of occurrences of each distinct `koi_disposition`.
# The result is stored in `aggregated_df`.
aggregated_df = opteryx.query("SELECT koi_disposition, COUNT(*) FROM exoplanets GROUP BY koi_disposition;").pandas()

# Display the aggregated DataFrame to get a preview of the result.
aggregated_df.head()
  koi_disposition  COUNT(*)
0       CONFIRMED      2293
1  FALSE POSITIVE      5023
2       CANDIDATE      2248 

this example requires network access to download the data file

Query Data on Local Disk

In this example, we are querying and filtering a file directly. This example will not run as written because the file being queried does not exist.

# Import the Opteryx query engine.
import opteryx

# Execute a SQL query to select the first 5 rows from the 'space_missions.parquet' table.
# The result will be stored in the 'result' variable.
result = opteryx.query("SELECT * FROM 'space_missions.parquet' LIMIT 5;")

# Display the result.
# This is useful for quick inspection of the data.
result.head()
ID Company Location Price Launched_at Rocket Rocket_Status Mission Mission_Status
0 RVSN USSR Site 1/5, Baikonur Cosmodrome, null 1957-10-04 19:28:00 Sputnik 8K71PS Retired Sputnik-1 Success
1 RVSN USSR Site 1/5, Baikonur Cosmodrome, null 1957-11-03 02:30:00 Sputnik 8K71PS Retired Sputnik-2 Success
2 US Navy LC-18A, Cape Canaveral AFS, Fl null 1957-12-06 16:44:00 Vanguard Retired Vanguard TV3 Failure
3 AMBA LC-26A, Cape Canaveral AFS, Fl null 1958-02-01 03:48:00 Juno I Retired Explorer 1 Success
4 US Navy LC-18A, Cape Canaveral AFS, Fl null 1958-02-05 07:33:00 Vanguard Retired Vanguard TV3BU Failure

this example requires a data file, space_missions.parquet.

Query Multiple Files with Wildcards

In this example, we are querying multiple files using wildcard patterns. Opteryx supports * (any characters), ? (single character), and [range] patterns in file paths.

# Import the Opteryx query engine.
import opteryx

# Execute a SQL query to select data from all parquet files in a directory.
# The wildcard '*' matches any characters in the filename.
result = opteryx.query("SELECT * FROM 'data/*.parquet' LIMIT 10;")

# Display the result.
result.head()

You can also use more specific patterns:

# Query files matching a range pattern, e.g., file1.parquet through file9.parquet
result = opteryx.query("SELECT COUNT(*) FROM 'data/file[1-9].parquet';")

# Query files with specific naming patterns
result = opteryx.query("SELECT * FROM 'logs/2024-01-*.jsonl';")

Wildcards work with all supported file formats (Parquet, JSONL, CSV, etc.) and prevent path traversal for security.

Query Data in SQLite

In this example, we are querying a SQLite database via Opteryx. This example will not run as written because the file being queried does not exist.

# Import the Opteryx query engine and the SqlConnector from its connectors module.
import opteryx
from opteryx.connectors import SqlConnector

# Register a new data store with the prefix "sql", specifying the SQL Connector to handle it.
# This allows queries with the 'sql' prefix to be routed to the appropriate SQL database.
opteryx.register_store(
   prefix="sql",  # Prefix for distinguishing this particular store
   connector=SqlConnector,  # Specify the connector to handle queries for this store
   remove_prefix=True,  # Remove the prefix from the table name when querying SQLite
   connection="sqlite:///database.db"  # SQLAlchemy connection string for the SQLite database
)

# Execute a SQL query to select specified columns from the 'planets' table in the SQL store,
# limiting the output to 5 rows. The result is stored in the 'result' variable.
result = opteryx.query("SELECT name, mass, diameter, density FROM sql.planets LIMIT 5;")

# Display the result.
# This is useful for quickly verifying that the query executed correctly.
result.head()
ID name mass diameter density
1 Mercury 0.33 4879 5427
2 Venus 4.87 12104 5243
3 Earth 5.97 12756 5514
4 Mars 0.642 6792 3933
5 Jupiter 1898.0 142984 1326

this example requires a data file, database.db.

Query Data on GCS

In this example, we are querying a dataset on GCS in a public bucket called 'opteryx'.

# Import the Opteryx query engine and the GcpCloudStorageConnector from its connectors module.
import opteryx
from opteryx.connectors import GcpCloudStorageConnector

# Register a new data store named 'opteryx', specifying the GcpCloudStorageConnector to handle it.
# This allows queries for this particular store to be routed to the appropriate GCP Cloud Storage bucket.
opteryx.register_store(
    "opteryx",  # Name of the store to register
    GcpCloudStorageConnector  # Connector to handle queries for this store
)

# Execute a SQL query to select all columns from the 'space_missions' table located in the 'opteryx' store,
# and limit the output to 5 rows. The result is stored in the 'result' variable.
result = opteryx.query("SELECT * FROM opteryx.space_missions WITH(NO_PARTITION) LIMIT 5;")

# Display the result.
# This is useful for quickly verifying that the query executed correctly.
result.head()
ID Company Location Price Launched_at Rocket Rocket_Status Mission Mission_Status
0 RVSN USSR Site 1/5, Baikonur Cosmodrome, null 1957-10-04 19:28:00 Sputnik 8K71PS Retired Sputnik-1 Success
1 RVSN USSR Site 1/5, Baikonur Cosmodrome, null 1957-11-03 02:30:00 Sputnik 8K71PS Retired Sputnik-2 Success
2 US Navy LC-18A, Cape Canaveral AFS, Fl null 1957-12-06 16:44:00 Vanguard Retired Vanguard TV3 Failure
3 AMBA LC-26A, Cape Canaveral AFS, Fl null 1958-02-01 03:48:00 Juno I Retired Explorer 1 Success
4 US Navy LC-18A, Cape Canaveral AFS, Fl null 1958-02-05 07:33:00 Vanguard Retired Vanguard TV3BU Failure

this example is complete and should run as-is


You can also try Opteryx right now using our interactive labs on Binder.

Binder

Community

Discord Medium

If you're interested in contributing to Opteryx or understanding how it works:

Resource Location Description
Examples examples/ Code examples and tutorials for various use cases
Developer Guide DEVELOPER_GUIDE.md Guide to Opteryx's architecture and development patterns
Contributing CONTRIBUTING.md How to contribute to the project

Project Structure

  • opteryx/ - Main source code
    • planner/ - Query planning and optimization
    • operators/ - Physical execution operators
    • connectors/ - Data source adapters
    • functions/ - SQL function implementations
    • managers/ - Resource and cache management
  • tests/ - Comprehensive test suite
  • dev/ - Development tools and build scripts
  • examples/ - Usage examples and tutorials
  • tools/ - Development utilities and profiling tools

Get Involved

🌟 Star this repo to show your support and help others discover Opteryx.
💬 Join the discussion — share your ideas, tell us how you’re using Opteryx, or suggest features.
🛠️ Contribute to the code — join us in building Opteryx! It’s easy to get started, and we’re happy to guide you.
📚 Check out the contributor documentation. No matter your skill level, there are ways to contribute.
❤️ We welcome sponsorships of any size. Every contribution helps us make Opteryx even better!

We’re excited to have you join our journey. Let us know how we can help!

Security

We take security seriously. If you find any weaknesses please review our Security Policy let us know through our reporting process.

Static Analysis Vulnerabilities Security Rating

License

License

Opteryx is licensed under Apache 2.0 except where specific modules note otherwise.

Status

Status

Opteryx is in beta. Beta means different things to different people, to us, being beta means:

  • Core functionality has good regression test coverage to help ensure stability
  • Some edge cases may have undetected bugs
  • Performance tuning is incomplete
  • Changes are focused on feature completion, bugs, performance, reducing debt, and security
  • Code structure and APIs are not stable and may change

We’re actively adding features and improving performance.

Related Projects

  • orso DataFrame library
  • draken Cython bindings for Arrow
  • rugo File Reader

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opteryx-0.26.2b1974.tar.gz (10.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

opteryx-0.26.2b1974-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (42.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

opteryx-0.26.2b1974-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (40.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

opteryx-0.26.2b1974-cp313-cp313-macosx_11_0_universal2.whl (11.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

opteryx-0.26.2b1974-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (41.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

opteryx-0.26.2b1974-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (40.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

opteryx-0.26.2b1974-cp312-cp312-macosx_11_0_universal2.whl (11.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

opteryx-0.26.2b1974-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (42.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

opteryx-0.26.2b1974-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (41.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

opteryx-0.26.2b1974-cp311-cp311-macosx_11_0_universal2.whl (11.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

opteryx-0.26.2b1974-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (41.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

opteryx-0.26.2b1974-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (39.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

opteryx-0.26.2b1974-cp310-cp310-macosx_11_0_universal2.whl (11.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

opteryx-0.26.2b1974-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (40.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

opteryx-0.26.2b1974-cp39-cp39-macosx_11_0_universal2.whl (11.7 MB view details)

Uploaded CPython 3.9macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file opteryx-0.26.2b1974.tar.gz.

File metadata

  • Download URL: opteryx-0.26.2b1974.tar.gz
  • Upload date:
  • Size: 10.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for opteryx-0.26.2b1974.tar.gz
Algorithm Hash digest
SHA256 6f713166c49d7674f8893f941cc18f87a05deeeed476fc36f25f3fcc45849ba0
MD5 3bcb876dc187e167c512c4efead03aff
BLAKE2b-256 85d7c1b938fe44e2b39a8ebc577338ebf8eba1b959ffba2b8b085e8463764ca1

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 f1c0942051b04f6b6edfa6c30bf115d9a414c7bb94050dd5ff5f98d2025177da
MD5 8bbefdac9995d5c0d778cc447d6799b8
BLAKE2b-256 038fe615a852645393a47c731e21456b83db3775c6c5baf07242e99f96a4f7ad

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 5d486ec147d32d62d320f07a4ed87b4aa7f57d057581d8d2c35a20b4ada1f1be
MD5 a08d855ee7f62f00b6489c9f09564384
BLAKE2b-256 b408c4212d109f9a9f1a9b07b3c935c409c30cef834465be348d9d6489efc485

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 c377ec2a551d2a60363c8d8fff5aa26443cb9104861596897d5bd54ff5c390e2
MD5 ab96c57e4d5034ef6c6270cdb398fd84
BLAKE2b-256 8075e4b98bd4b8f390497c18e3227096078bb8fdb159d75e559d396f45230054

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8cdf318531274cbf12e1f31c9618c1c6c9f9cc93be1c00696c02b533b5d300cb
MD5 0049960453a12c581c9252e670c56414
BLAKE2b-256 74c32486205278bbb1b515539a3a7eb39bb8d4eaba9d2bfef95ee5dee4f13579

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 fbd28da77b2ebf0590ba53c6442140d3b9abd29745a7ca350c422ea1f1aba469
MD5 b0a4a5bb124090fe8dec1c42fbdb328b
BLAKE2b-256 a5e559e7457ffe71d880654c2b046deb2d5a9e0df1cdaf8b2c7cbc19f893c2bf

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 05dfef142fb16f5f1f8796f234a0c811e4409ccdf3147138756e30f70def9346
MD5 1028512bd9d4c705074bd26075d6a056
BLAKE2b-256 56bd32e0b7043d35a75ca24749559fe67518fbeee0e2aea0feebf65e32a8fd51

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 12866fa2e2e0eb8d7505c9412a95c4a4e64b086c118fbc44a61aa1d137cb2ca8
MD5 e1365735d313847847a4865f1baaa3ee
BLAKE2b-256 f081ee9532305124f47989f4f522660201a4d023f5b414f40da597f5f4b0fe7b

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 0d9a9887184d64ee3521e9ca33bf02b1581bf6de1605f703275650406d133491
MD5 59d54cd5625a1027710428457964594e
BLAKE2b-256 1064e3cce67e24cc202764f26d3defe4b29a4c6a65f54aece65a2c487b84e5ff

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 74992a140d05fdbb25b4f0497ffda3d64712d33cad9e26c2ace19e5bddce20ee
MD5 eb164c62a913553f06151bdafb219979
BLAKE2b-256 3c3ae408123196ae7bc9b7a60bb021419b6f9f52475ebee9b8d50eb5447f22b7

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 0993c8d3e41d42734049a408cb322440c5b26d94959e76895bd450c651b981f0
MD5 e97eb3eb9970cb21d51d312e58119502
BLAKE2b-256 77d1d50cb4115b83ef0deb0db90f70b4fec0b83c71c84cd1c620665d4e726653

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 59ab561b86176c0112c3df19ffd9f20618bd766bdf5d92cdb2aa66b9d0611af3
MD5 8979206ab6138c775b631eb594f55666
BLAKE2b-256 36db764c128972c16759982dfc6389ebe0b9c17f76eb6112b5ff3fc5992a9b18

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6b05ddeb88a0bbfb9e3dd34bd87c83358084ac69bdea042dc42aea650a92fe80
MD5 e154f55a5f5feb7bbb19694626fc348b
BLAKE2b-256 0ec08b8e245c5173b44c60fc636207ba81b2b10564c5b1e86d0814f3af128fe9

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 45d5e1369d02940c36a08a94ca86d9f2a88649d8fc677724e1509789166c6237
MD5 a37b56eb7eb7dfb7d052c293c4c7b353
BLAKE2b-256 e717849f04f3015f923b1aea6434ef2a77ad3ea2782a1b29592f829a76213aa2

See more details on using hashes here.

File details

Details for the file opteryx-0.26.2b1974-cp39-cp39-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for opteryx-0.26.2b1974-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 32435ad3edd85ed53c1da891124138676c09c416cee7af9a5b5aa5f6c22fc169
MD5 1594b7fa813a166fae2bba5689daf0f2
BLAKE2b-256 c159b405065c2d4dd004df1b977c6f12f473e0eac5967d0aaa58f396d11124f1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page