Skip to main content

Load a shared library (and access a 32-bit library from 64-bit Python)

Project description

Documentation Status pypi travis appveyor

This package loads a shared library in Python. It is basically just a thin wrapper around ctypes (for libraries that use the __cdecl or __stdcall calling convention), Python for .NET (for libraries that use Microsoft’s .NET Framework, CLR), Py4J (for Java .jar or .class files) and comtypes (for libraries that use the Component Object Model).

However, the primary advantage is that it is possible to communicate with a 32-bit library from 64-bit Python.

MSL-LoadLib is a pure-python package, but, Python for .NET depends on the .NET Common Language Runtime (CLR) on Windows and Mono Runtime on Linux and macOS and Py4J depends on having a Java Virtual Machine installed.

Install

To install MSL-LoadLib run:

pip install msl-loadlib

Alternatively, using the MSL Package Manager run:

msl install loadlib

Optional dependencies:

To set up your environment on Linux, please follow the instructions on the prerequisites section of the documentation.

Examples

If you are loading a 64-bit library in 64-bit Python (or a 32-bit library in 32-bit Python), then you can directly load the library using LoadLibrary.

The following examples load a 64-bit library in a 64-bit Python interpreter. If you are using a 32-bit Python interpreter then replace the 64 with 32 in the filename.

Import the LoadLibrary class and the directory where the example libraries are located

>>> from msl.loadlib import LoadLibrary
>>> from msl.examples.loadlib import EXAMPLES_DIR

If the file extension is not included then a default extension, .dll (Windows) or .so (Linux), is used.

Load a C++ library and call the add function

>>> cpp = LoadLibrary(EXAMPLES_DIR + '/cpp_lib64')
>>> cpp.lib.add(1, 2)
3

Load a FORTRAN library and call the factorial function

>>> fortran = LoadLibrary(EXAMPLES_DIR + '/fortran_lib64')

With a FORTRAN library you must pass values by reference using ctypes, and, since the returned value is not of type int we must configure ctypes for a value of type double to be returned

>>> from ctypes import byref, c_int, c_double
>>> fortran.lib.factorial.restype = c_double
>>> fortran.lib.factorial(byref(c_int(37)))
1.3763753091226343e+43

Load a .NET library and call the reverse_string function, we must specify that the library type is a .NET library by passing in the 'net' argument

>>> net = LoadLibrary(EXAMPLES_DIR + '/dotnet_lib64.dll', 'net')
>>> net.lib.StringManipulation().reverse_string('abcdefghijklmnopqrstuvwxyz')
'zyxwvutsrqponmlkjihgfedcba'

Load Java byte code and call the cos function

>>> java = LoadLibrary(EXAMPLES_DIR + '/Trig.class')
>>> java.lib.Trig.cos(1.234)
0.33046510807172985

Python interacts with the Java Virtual Machine via a local network socket and therefore the connection needs to be closed when you are done using the Java library

>>> java.gateway.shutdown()

To load a Component Object Model (COM) library pass in the library’s Program ID. NOTE: This example will only work on Windows.

Here we load the FileSystemObject library and include the 'com' argument to indicate that it is a COM library.

>>> com = LoadLibrary('Scripting.FileSystemObject', 'com')

We then use the library to create, edit and close a text file

>>> fp = com.lib.CreateTextFile('a_new_file.txt')
>>> fp.WriteLine('This is a test')
0
>>> fp.Close()
0

Inter-process communication is used to access a 32-bit shared library from a module that is running within a 64-bit Python interpreter. The procedure uses a client-server protocol where the client is a subclass of msl.loadlib.Client64 and the server is a subclass of msl.loadlib.Server32. See the tutorials for examples on how to implement inter-process communication.

Documentation

The documentation for MSL-LoadLib can be found here.

Project details


Download files

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

Source Distribution

msl-loadlib-0.9.0.tar.gz (1.1 MB view details)

Uploaded Source

Built Distributions

msl_loadlib-0.9.0-py2.py3-none-win_amd64.whl (7.7 MB view details)

Uploaded Python 2 Python 3 Windows x86-64

msl_loadlib-0.9.0-py2.py3-none-win32.whl (7.7 MB view details)

Uploaded Python 2 Python 3 Windows x86

msl_loadlib-0.9.0-py2.py3-none-manylinux1_x86_64.whl (10.9 MB view details)

Uploaded Python 2 Python 3

msl_loadlib-0.9.0-py2.py3-none-manylinux1_i686.whl (10.9 MB view details)

Uploaded Python 2 Python 3

File details

Details for the file msl-loadlib-0.9.0.tar.gz.

File metadata

  • Download URL: msl-loadlib-0.9.0.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for msl-loadlib-0.9.0.tar.gz
Algorithm Hash digest
SHA256 dba847353f6d37a309892eb28755caa39f2f81f972cb83162789d319102734b0
MD5 6382431c689f361e2e07c32675924656
BLAKE2b-256 2430db4f7fd1dabe1c23219de5d276d2561f595fb2015bb3ba1825146e9c3bb1

See more details on using hashes here.

File details

Details for the file msl_loadlib-0.9.0-py2.py3-none-win_amd64.whl.

File metadata

  • Download URL: msl_loadlib-0.9.0-py2.py3-none-win_amd64.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: Python 2, Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for msl_loadlib-0.9.0-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 577f8b5b565a0e6ec497eb16bc0f91a295ad310c972b8553e9ecff70ec7cf023
MD5 6fb916287831fa543ff5f8128d885fa2
BLAKE2b-256 644b5ca465387be40d456ea09aaab7cc3ce375efa8dead45cff11fac311eac1c

See more details on using hashes here.

File details

Details for the file msl_loadlib-0.9.0-py2.py3-none-win32.whl.

File metadata

  • Download URL: msl_loadlib-0.9.0-py2.py3-none-win32.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: Python 2, Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for msl_loadlib-0.9.0-py2.py3-none-win32.whl
Algorithm Hash digest
SHA256 e661c147e382a59c0a559353cf561bef8b7cba65848c6fc24f95a1303546c930
MD5 cb79f9a90aceee3ec7e3fd39ca7ada40
BLAKE2b-256 e00a3f79d485be9dba3b3d796b0e335d1c3b7e175f32148051d6387855f1d67b

See more details on using hashes here.

File details

Details for the file msl_loadlib-0.9.0-py2.py3-none-manylinux1_x86_64.whl.

File metadata

  • Download URL: msl_loadlib-0.9.0-py2.py3-none-manylinux1_x86_64.whl
  • Upload date:
  • Size: 10.9 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for msl_loadlib-0.9.0-py2.py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 42bc4803c3a97c5c05dcd395052b7029b33e9b1a35027f019c2952346c5845c5
MD5 b0c0e37846dfada3363904d3f0c7a042
BLAKE2b-256 03208bf4ec9fa6fbd59e7825a61973c9b249eff694dc1ac7d515a5adadb6de39

See more details on using hashes here.

File details

Details for the file msl_loadlib-0.9.0-py2.py3-none-manylinux1_i686.whl.

File metadata

  • Download URL: msl_loadlib-0.9.0-py2.py3-none-manylinux1_i686.whl
  • Upload date:
  • Size: 10.9 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for msl_loadlib-0.9.0-py2.py3-none-manylinux1_i686.whl
Algorithm Hash digest
SHA256 e7fa11dadd6c8a15f783458bb5a8da79dcf16e2afbc2f1b52611d0c32bb8cd24
MD5 5a0c5d5e3beb8dcbdb45918cd4ade1e4
BLAKE2b-256 a2face8267eb6900d057acfa3cd2179b1c4899d4de9965fd334330e0f968b2f5

See more details on using hashes here.

Supported by

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