微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 setup.py 安装动态库?

如何解决如何使用 setup.py 安装动态库?

我想分发一个具有封闭源代码依赖性的 Python 包。我正在使用 setup.py,如果我也使用 setup.py 进行编译,一切都会正常。

this question 的答案和 that question 的答案都不能解决我的问题。

我有以下文件结构:

.
├── closed_source
│   ├── compiled.so
├── python_modules
│   ├── file1.py
│   ├── file2.py
│   ├── ...
│   └── __init__.py
└── setup.py

我还尝试在 compiled.so 中包含 python_modules。在 file1.py 中,我使用 import compiled 失败。

以下有效,但无法包含动态库:

setup(
    name='my_package',version=0.1,packages=['python_modules'],package_dir={'python_modules': 'python_modules'},package_data={'': ['closed_source/compiled.so']},# also tried using key compiled
    include_package_data=True,)

解决方法

您必须vendor 依赖项。最简单的方法是将依赖项放在你的python包里,而不是放在外面。

setuptools 要求您包含一个 MANIFEST.in 文件以在您的发行版中包含非包、非 Python 文件。

有关如何执行此操作的示例,请参阅 this 项目。

您的项目结构应如下所示:

my_package
|-- vendor
    |-- compiled.so
|-- __init__.py
|-- file1.py
|-- file2.py
setup.py

您还需要使用额外的相对前缀导入您的vendored 库

from .vendor import compiled

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。