pyzmq/zmq/__init__.py

95 lines
2.2 KiB
Python

"""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
DRAFT_API = backend.has("draft")
__all__ = (
[
'get_includes',
'COPY_THRESHOLD',
'DRAFT_API',
]
+ constants.__all__
+ sugar.__all__
+ backend.__all__
)