You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安装CMake+pybind11生成的.so文件并在Python3中导入?

解决预编译pybind11扩展的安装问题

你的setup.py存在几个关键问题,导致无法正常安装,以下是修正方案和正确的安装调用步骤:

问题分析

  1. packages=[''] 无效,setuptools无法识别空字符串作为包名
  2. package_data 指定的pow包不存在,且路径使用~无法被setup正确解析
  3. 预编译的.so文件需要被放置到Python能识别的模块路径中

方案一:直接安装到site-packages(最简单)

修改setup.py为以下内容,注意替换成pow.so的绝对路径(不要用~):

from setuptools import setup
import sysconfig

setup(
    name='pow',
    version='0.1',
    author="Nobody",
    description="Install precompiled pybind11 extension",
    # 将.so文件安装到Python的site-packages目录
    data_files=[(sysconfig.get_path('purelib'), ['/home/你的用户名/Desktop/pybinmod1/pow.so'])]
)

安装与调用

  1. 执行安装命令:
pip install .
  1. 在Python代码中直接导入调用:
import pow
print(pow.your_function_name())  # 替换成你实际的C++函数名

方案二:创建包结构(规范方式)

如果想以包的形式管理,先创建如下目录结构:

pow_ext/
├── __init__.py
└── pow.so

其中__init__.py可以是空文件,也可以添加导入语句简化调用:

# __init__.py
from .pow import *

然后编写setup.py:

from setuptools import setup, find_packages

setup(
    name='pow_ext',
    version='0.1',
    author="Nobody",
    description="Precompiled pybind11 extension package",
    packages=find_packages(),
    package_data={'pow_ext': ['pow.so']}
)

安装与调用

  1. 执行安装命令:
pip install .
  1. 在Python中调用:
# 方式1
import pow_ext.pow
print(pow_ext.pow.your_function_name())

# 方式2(如果__init__.py添加了导入语句)
import pow_ext
print(pow_ext.your_function_name())

注意事项

  • 确保pow.so与你的Python版本、系统架构完全兼容(比如同为64位,Python版本匹配)
  • 安装时如果遇到权限问题,可添加--user参数(pip install . --user),安装到当前用户的site-packages目录

内容的提问来源于stack exchange,提问作者Mohammad Hassan Rezaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:48:17