How do I package a Python module together with a precompiled .so
library? Specifically, how do I write setup.py
so that when I do this in Python
>>> import top_secret_wrapper
It can easily find top_secret.so
without having to set LD_LIBRARY_PATH
?
In my module development environment, I have the following file structure:
. ├── top_secret_wrapper │ ├── top_secret.so │ └── __init__.py └── setup.py
Inside __init__.py
, I have something like:
import top_secret
Here's my setup.py
from setuptools import setup, Extension setup( name = 'top_secret_wrapper', version = '0.1', description = 'A Python wrapper for a top secret algorithm', url = None, author = 'James Bond', author_email = '[email protected]', license = 'Spy Game License', zip_safe = True, )
I'm sure my setup.py
is lacking a setting where I specify the location of top_secret.so
, though I'm not sure how to do that.
There are two Python package repositories to use. One of them for testing and experimentation which is Test PyPI (test.pypi.org) and another for real index which is PyPI (pypi.org).
What I ended up doing is:
setup( name='py_my_lib', version=version, # specified elsewhere packages=[''], package_dir={'': '.'}, package_data={'': ['py_my_lib.so']}, )
This way I get to import the lib by its name, and don't have another level of nestedness:
import py_my_lib
and not
from py_my_lib_wrapper import py_my_lib
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With