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

Nik*_*iki 5 python setuptools setup.py

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

无论是回答这个问题,也没有回答这个问题解决我的问题。

我有以下文件结构:

.
??? closed_source
?   ??? compiled.so
??? python_modules
?   ??? file1.py
?   ??? file2.py
?   ??? ...
?   ??? __init__.py
??? setup.py
Run Code Online (Sandbox Code Playgroud)

我也尝试包含compiled.sopython_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,
)
Run Code Online (Sandbox Code Playgroud)

Bre*_*bel 3

您必须提供依赖项。最简单的方法是将依赖项包含python 包内,而不是外部。

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

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

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

my_package
|-- vendor
    |-- compiled.so
|-- __init__.py
|-- file1.py
|-- file2.py
setup.py
Run Code Online (Sandbox Code Playgroud)

您还需要使用附加的相对前缀导入您的供应库

from .vendor import compiled
Run Code Online (Sandbox Code Playgroud)