首页 > 解决方案 > python setup.py build ctypes.CDLL:无法打开共享对象文件:没有这样的文件或目录

问题描述

我已经实现了一个名为 api.c 的 ctypes 包装器,并且我具有以下结构:

lib/api.c
foo.py
setup.py

手动编译 api.c 并调用ctypes.CDLL(path+'lib/api.so')内部foo.py工作, path绝对路径名在哪里。

现在,我想用 setup.py 分发它:

setup(name='foo',
      ext_modules=[Extension('lib.api', ['lib/api.c'])]
     )

安装也可以python setup.py develop -u --user工作,因为api.so出现在lib/.

python setup.py install --user代码也被编译,但api.so出现在某个文件build/bdist.linux-x86_64/egg/lib夹中。因此导入模块会导致 OSError: /.../lib/api.so: cannot open shared object file: No such file or directory

那么我该如何分配它,它install的价值应该是什么path

相关问题: 如何在 Python 包中包含共享 C 库

标签: python

解决方案


我发现在将参数添加py_modules=['foo']到时setuppython setup.py install将其正确安装在 site-packages 目录中。因此

setup(name='foo',
      py_modules=['foo'],
      ext_modules=[Extension('lib.api', ['lib/api.c'])]
     )

推荐阅读