Skip to main content

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

Project description

Documentation Status pypi

This package is used to load 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 shared library from 64-bit Python.

Tested in Python 2.7, 3.4+. The examples provided are currently only supported in Windows and Linux.

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 OSX 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. We then use the library to create, edit and close a text file

>>> com = LoadLibrary('Scripting.FileSystemObject', 'com')
>>> 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.6.0.tar.gz (904.9 kB view details)

Uploaded Source

Built Distributions

msl_loadlib-0.6.0-py2.py3-none-win_amd64.whl (8.3 MB view details)

Uploaded Python 2 Python 3 Windows x86-64

msl_loadlib-0.6.0-py2.py3-none-win32.whl (8.3 MB view details)

Uploaded Python 2 Python 3 Windows x86

msl_loadlib-0.6.0-py2.py3-none-manylinux1_x86_64.whl (11.0 MB view details)

Uploaded Python 2 Python 3

msl_loadlib-0.6.0-py2.py3-none-manylinux1_i686.whl (11.0 MB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

  • Download URL: msl-loadlib-0.6.0.tar.gz
  • Upload date:
  • Size: 904.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for msl-loadlib-0.6.0.tar.gz
Algorithm Hash digest
SHA256 785370c22e5cf84b68b5668141129dfebee2094773e730dceb3bacc05ec69abb
MD5 853706e1ec9485f00899a0e284bbef7e
BLAKE2b-256 16556837295e8d62f61c09bae366c0e8a0ada2963c26034343ea237dea42b105

See more details on using hashes here.

File details

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

File metadata

  • Download URL: msl_loadlib-0.6.0-py2.py3-none-win_amd64.whl
  • Upload date:
  • Size: 8.3 MB
  • Tags: Python 2, Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for msl_loadlib-0.6.0-py2.py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f7fe13a61c760de435cc70d5a5a439722eb2a92861d2aff9b665dbdf24cd4216
MD5 b2671d072d7452b0ff7c8cb50e844325
BLAKE2b-256 789290e98b176d1a128d65ccf5998f99ae4d4a07ac8c4a453a587ed85bdeceb2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: msl_loadlib-0.6.0-py2.py3-none-win32.whl
  • Upload date:
  • Size: 8.3 MB
  • Tags: Python 2, Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for msl_loadlib-0.6.0-py2.py3-none-win32.whl
Algorithm Hash digest
SHA256 9004059a981b17d7962b746cd753f8e4680504cf07f6c9c18eba6aaaa5592482
MD5 df5a63ccf5451247253d789e03e6b4e5
BLAKE2b-256 8a5db225dbe28c8e39df52d7dec431a134b430c481b3a7886259af3f0b167382

See more details on using hashes here.

File details

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

File metadata

  • Download URL: msl_loadlib-0.6.0-py2.py3-none-manylinux1_x86_64.whl
  • Upload date:
  • Size: 11.0 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for msl_loadlib-0.6.0-py2.py3-none-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 261f33aa683b49f349ce05c4e28925dd3ad511fc2971469498b68183dd98ed56
MD5 444437cfe0acff1c9731bfafc751300e
BLAKE2b-256 dce4f2fd37b60ef010fd1d8b441646637915964378efb8bf4ef127d5b12b05c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: msl_loadlib-0.6.0-py2.py3-none-manylinux1_i686.whl
  • Upload date:
  • Size: 11.0 MB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for msl_loadlib-0.6.0-py2.py3-none-manylinux1_i686.whl
Algorithm Hash digest
SHA256 a782827f9489e00815a50e4030162937f3328f3232b56873b27fa3ae8f7b8fd8
MD5 be006d90cf4a31afe67395bd9fa41bc2
BLAKE2b-256 05492d9278f3fe1c460bc137c63e9e20a9c68305c2a9b369f1a8c794ad1c03c4

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