如果扩展是由 setuptools 配置的,则这是可能的。
例如:
from setuptools import setup, Extension
extension = Extension('mymodule', sources=[<..>])
setup('mymodule', ext_modules=[extension])
安装后,该扩展可用import mymodule
。注意find_packages
未使用。
这需要通过 setuptools 来完成,否则需要packages
如果没有则设置ext_modules
提供。
However,这使得.so
模块直接安装在site-packages
目录,并且会与同名的任何非扩展 python 模块发生冲突。
这通常被认为是不好的做法,大多数库使用裸Python模块和单个__init__.py
,在该扩展名下可用。
例如,您将来可能会将 python 代码添加到您的模块中,并希望将纯 python 代码与扩展代码分开。或者您可能想要添加多个扩展,这是不可能的,至少在保持相同的包名称的情况下是不可能的。
所以像这样的结构mymodule.<python modules>
and mymodule.my_extension
说得通。
就我个人而言,我会对扩展代码与 python 代码有单独的名称空间,并且not do from <ext mod> import *
in __init__.py
.