Python 如何在setup.py中使用Numba扩展名?
我试着用Numba进行一些快速计算。我在创建使用Numba扩展的包时遇到了以下问题 我按照官员的建议做了类似的事情。我有以下文件夹结构:Python 如何在setup.py中使用Numba扩展名?,python,setuptools,numba,Python,Setuptools,Numba,我试着用Numba进行一些快速计算。我在创建使用Numba扩展的包时遇到了以下问题 我按照官员的建议做了类似的事情。我有以下文件夹结构: -test_numba -test_numba -__init__.py -source_module.py -setup.py 然后我将以下代码放入source_module.py中: 从numba.pycc导入 cc=cc(“我的_模块”) cc.verbose=True @抄送导出('multf','f8(f8,f8)')) @抄送
-test_numba
-test_numba
-__init__.py
-source_module.py
-setup.py
然后我将以下代码放入source_module.py中:
从numba.pycc导入
cc=cc(“我的_模块”)
cc.verbose=True
@抄送导出('multf','f8(f8,f8)'))
@抄送导出('multi','i4(i4,i4'))
def mult(a、b):
返回a*b
@抄送输出('square','f8(f8)'
def square(a):
返回**2
如果名称=“\uuuuu main\uuuuuuuu”:
cc.compile()
他照办了。对于init.py,我只需导入函数:
从.my_模块导入*
对于setup.py:
从设置工具导入设置
从test\u numba.source\u模块导入cc
从setuptools导入扩展
如果名称=“\uuuuu main\uuuuuuuu”:
设置(
name=“test\u numba”,
version=“0.0.1”,
软件包=[“测试”],
ext_modules=[cc.distutils_extension()]
)
我使用pip安装来安装这个包。但扩展未安装在正确的文件夹位置
/Users/xxx/miniconda3/envs/py/lib/python3.7/site-packages/my_module.cpython-37m-darwin.so
/Users/xxx/miniconda3/envs/py/lib/python3.7/site-packages/test_numba-0.0.1.dist-info/*
/Users/xxx/miniconda3/envs/py/lib/python3.7/site-packages/test_numba/*
当我试图从jupyter导入这个包时。我将得到以下错误:没有名为“test\u numba.my\u module”的模块
如何更正此问题?首先,我假设您的setup.py实际上位于您的第一个test\u numba目录中,而不是如上图所示位于该目录之外。瞧,我想实际上是这样的:
-test_numba
-test_numba
-__init__.py
-source_module.py
-setup.py
有一个步骤是必需的,那就是进行所需的提前(AOT)编译。为此,您可以在setup.py中添加cc.compile()
:
从设置工具导入设置
从setuptools导入扩展
从test\u numba.source\u模块导入cc
如果名称=“\uuuuu main\uuuuuuuu”:
cc.compile()###重命名cc('my_module')
为cc('test_numba.my_module')
?@hoefling我得到了值错误:basename应该是一个简单的模块名,而不是安装时的限定名
>>> import test_numba as tn
>>> tn.multf(4,5)
20.0