我有一个项目取决于共享库.从头开始说明:共享库是纯C库而不是Python库.为简单起见,我创建了一个名为pkgtest的小型演示项目,我将参考该项目.
所以需要做的是:运行Makefile来编译库并将编译好的共享库(libhello.so此处称为)文件放在某个地方,可以从依赖Python包中访问它.
到目前为止,我最好的猜测是将makefile作为预安装例程运行,将libhello.so文件复制到packages目录中并将其添加到package_data安装脚本的参数中.安装后,共享库将被放置在site-packages/pkgtest/目录中,并可从模块访问.
包目录的结构就像这样简单:
pkgtest/
src/
libhello.c
libhello.h
Makefile
pkgtest/
__init__.py
hello.py
setup.py
Run Code Online (Sandbox Code Playgroud)
我的setup.py看起来像这样:
setup.py
import subprocess
from setuptools import setup
from distutils.command.install import install as _install
class install(_install):
def run(self):
subprocess.call(['make', 'clean', '-C', 'src'])
subprocess.call(['make', '-C', 'src'])
_install.run(self)
setup(
name='pkgtest',
version='0.0.1',
author='stefan',
packages=['pkgtest'],
package_data={'pkgtest': ['libhello.so']},
cmdclass={'install': install},
)
Run Code Online (Sandbox Code Playgroud)
Makefile实际上构建了库并将其复制到我的python包的目录中.
SRC/Makefile文件
all: libhello.so
libhello.o: libhello.c
gcc -fPIC -Wall -g -c libhello.c
libhello.so: libhello.o
gcc -shared -fPIC -o libhello.so libhello.o
cp …Run Code Online (Sandbox Code Playgroud)