You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何简化从已安装Wheel包调用PYD文件的操作?实现Pybind11构建的PYD包的简洁导入

优化PYD文件导入语法的方案

当然有办法简化导入!核心思路是让你的crusher包直接暴露Shard这类对象,不需要再深入一层子模块。这里有两种靠谱的方案,你可以根据自己的打包习惯选择:

方案一:添加__init__.py导出对象

这是最常规的Python包做法,适合需要灵活控制导出内容的场景:

  • 在你的crusher包目录(就是存放crusher.pyd的文件夹)里新建一个__init__.py文件
  • 在这个文件里导入你想对外暴露的类/函数,比如:
    # crusher/__init__.py
    # 单个对象导入
    from .crusher import Shard
    # 如果有多个对象,直接列出来即可
    # from .crusher import Shard, DataProcessor, calculate_score
    
  • 打包Wheel时,确保这个__init__.py被包含进去。如果用setuptools,只要在setup.pypyproject.toml里正确配置packages=["crusher"],工具会自动把目录下的__init__.pycrusher.pyd都打包进Wheel。

完成后,其他开发者就能直接用from crusher import Shard导入了,Python会自动通过__init__.py找到对应的对象。

方案二:将PYD文件重命名为__init__.pyd

如果你的包完全是二进制实现,不想添加额外的纯Python文件,可以直接把crusher.pyd改名为__init__.pyd,放在crusher包目录下。

Python允许用.pyd文件作为包的初始化模块,当别人import crusher时,会直接加载这个__init__.pyd,里面导出的所有类/函数都会直接挂在crusher模块下,自然就能用from crusher import Shard的简洁语法了。

验证方法

打包好Wheel并安装后,打开Python控制台测试:

from crusher import Shard
# 能正常实例化或调用就说明优化成功
shard_instance = Shard()

两种方案都能解决你的问题:方案一适合需要额外配置(比如版本号、精确导出控制)的场景,方案二更简洁,适合纯二进制包的情况。

内容的提问来源于stack exchange,提问作者original.roland

火山引擎 最新活动