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

使用Setuptools打包含动态共享库的Python包无法正确导入求助

问题原因分析
  • 导入包名和setup.py的name字段无直接关联:name仅为pip索引、列表显示的包标识,实际可导入的包名由packages参数中指定的文件夹名决定,当前配置中packages=['libmypackage'],所以仅能导入libmypackage,无法导入mypackage。
  • package_data文件名配置错误:实际的动态库文件名为libmypackage.so,但配置中写的是libspylizard.so,导致安装时动态库未被打包进安装目录,导入后自然没有对应内容。
  • __init__.py导入路径错误:from libmypackage import *是搜索全局顶层的libmypackage包,不是当前包目录下的libmypackage.so文件,需要使用相对导入。
修复步骤
  1. 调整文件夹结构,将libmypackage文件夹重命名为mypackage,实现import mypackage的导入需求,调整后结构如下:
project
 + setup.py
 + mypackage
   + __init__.py
   + libmypackage.so
  1. 修改setup.py配置,修正包名和动态库文件名:
from setuptools import setup

setup(
    name='mypackage',
    version='1.0',
    packages=['mypackage'],
    package_data={'mypackage': ['libmypackage.so']},
    include_package_data = True,   
)
  1. 修改mypackage/__init__.py内容,使用相对导入导出动态库的所有内容:
# 相对导入当前目录下的libmypackage.so的所有符号
from .libmypackage import *
# 可按需添加__all__明确导出的符号列表,避免导入不必要的内容
# __all__ = ["your_function_name", "your_class_name"]
验证方法
  • 先卸载旧版本的包:pip uninstall -y mypackage
  • 重新执行安装:python setup.py install --user
  • 打开Python交互终端执行import mypackage,即可直接通过mypackage.xxx调用动态库中的接口。

内容的提问来源于stack exchange,提问作者hamid badi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:54:08