如何配置setup.py使Python扩展pyd文件安装到site-packages对应包目录
问题原因
你当前配置的Extension模块名是顶级名称pymyext1,setuptools会默认将顶层扩展模块直接安装到site-packages根目录,要将扩展放入子包内,只需要修改Extension的全限定名即可。
修改方案
调整ext_modules中Extension的第一个参数,将其改为带包名的层级名称pymyext1.pymyext1,同时可以移除冗余的package_data和include_package_data配置(编译生成的扩展模块会自动被归入对应包目录,不需要额外声明为包数据)。
修改后的完整setup配置如下:
from setuptools import setup, Extension setup( name="pymyext1", version="0.1", ext_modules=[Extension("pymyext1.pymyext1", ["main.c"])], package_dir={"pymyext1": "pymyext1"}, packages=["pymyext1"], )
验证效果
修改后重新执行pip install .,安装完成后site-packages/pymyext1/目录下会生成两个文件:
__init__.py(你项目中原有的文件)pymyext1.pyd(编译生成的扩展模块)
如果你的__init__.py中已经写好了导入逻辑,比如from .pymyext1 import *,用户直接执行import pymyext1就可以调用扩展中的功能。
内容的提问来源于stack exchange,提问作者alexeik
相关产品推荐
相关产品推荐

