Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在setup.py中使用Numba扩展名?_Python_Setuptools_Numba - Fatal编程技术网

Python 如何在setup.py中使用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)')) @抄送

我试着用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)'))
@抄送导出('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