相关疑难解决方法(0)

如何在Python包中包含共享C库

我有一个项目取决于共享库.从头开始说明:共享库是纯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)

python makefile setuptools

7
推荐指数
1
解决办法
2522
查看次数

标签 统计

makefile ×1

python ×1

setuptools ×1