| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- """Python bindings for 0MQ"""
- # Copyright (C) PyZMQ Developers
- # Distributed under the terms of the Modified BSD License.
- from __future__ import annotations
- import os
- import sys
- from contextlib import contextmanager
- @contextmanager
- def _libs_on_path():
- """context manager for libs directory on $PATH
- Works around mysterious issue where os.add_dll_directory
- does not resolve imports (conda-forge Python >= 3.8)
- """
- if not sys.platform.startswith("win"):
- yield
- return
- libs_dir = os.path.abspath(
- os.path.join(
- os.path.dirname(__file__),
- os.pardir,
- "pyzmq.libs",
- )
- )
- if not os.path.exists(libs_dir):
- # no bundled libs
- yield
- return
- path_before = os.environ.get("PATH")
- try:
- os.environ["PATH"] = os.pathsep.join([path_before or "", libs_dir])
- yield
- finally:
- if path_before is None:
- os.environ.pop("PATH")
- else:
- os.environ["PATH"] = path_before
- # zmq top-level imports
- # workaround for Windows
- with _libs_on_path():
- from zmq import backend
- from . import constants # noqa
- from .constants import * # noqa
- from zmq.backend import * # noqa
- from zmq import sugar
- from zmq.sugar import * # noqa
- def get_includes():
- """Return a list of directories to include for linking against pyzmq with cython."""
- from os.path import abspath, dirname, exists, join, pardir
- base = dirname(__file__)
- parent = abspath(join(base, pardir))
- includes = [parent] + [join(parent, base, subdir) for subdir in ('utils',)]
- if exists(join(parent, base, 'include')):
- includes.append(join(parent, base, 'include'))
- return includes
- def get_library_dirs():
- """Return a list of directories used to link against pyzmq's bundled libzmq."""
- from os.path import abspath, dirname, join, pardir
- base = dirname(__file__)
- parent = abspath(join(base, pardir))
- return [join(parent, base)]
- COPY_THRESHOLD = 65536
- # zmq.DRAFT_API represents _both_ the current runtime-loaded libzmq
- # and pyzmq were built with drafts,
- # which is required for pyzmq draft support
- DRAFT_API: bool = backend.has('draft') and backend.PYZMQ_DRAFT_API
- __all__ = (
- [
- 'get_includes',
- 'COPY_THRESHOLD',
- 'DRAFT_API',
- ]
- + constants.__all__
- + sugar.__all__
- + backend.__all__
- )
|