python - 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 库
解决方案
我发现在将参数添加py_modules=['foo']
到时setup
,
python setup.py install
将其正确安装在 site-packages 目录中。因此
setup(name='foo',
py_modules=['foo'],
ext_modules=[Extension('lib.api', ['lib/api.c'])]
)
推荐阅读
- sql - Postgresql 在连接后使用空行
- python - 如何从另一个文件夹打开 json 文件?
- sql - Azur SQL Server 的用户定义函数面临的问题
- java - 如何将日期转换为 avro 数据
- python - 特定字符后的多个正则表达式条件
- tensorflow - 深度学习模型输入大小的最大大小是多少
- c++ - SFML vscode 对 `sf::String::String(char const*, std::locale const&)' 等的未定义引用
- python - 如何使用 python/django 获取确切的地址位置,如谷歌地图跟踪器
- sql-server - 我可以安装不同版本号的 sql server 2016 吗?
- javascript - 通过单击按钮调用 API 端点并在客户端打印消息