无法从已编译的cython文件导入功能

时间:2018-12-27 06:29:04

标签: python cython

我在cython文件中添加了一个函数(用def定义,因此应该公开从python导入),编译了该文件并安装了信封库,但是我无法导入它。我以前在此文件中定义的其他功能都正常工作。

Here是包,this是有问题的函数。

我通过导航到目录,然后使用pip install -e .命令来安装此软件包。这是一个ipython叙述,显示了我安装它后的情况:

In [1]: import mab.bandits

In [2]: dir(mab.bandits)
Out[2]:
['BANDIT_CHOICE_RULE_GREEDY',
 'BANDIT_CHOICE_RULE_UCB',
 'UPDATE_RULE_CONSTANT',
 'UPDATE_RULE_MEAN',
 '__builtins__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__pyx_unpickle_Enum',
 '__spec__',
 '__test__',
 'make_stationary_bandits',
 'non_stationary_bandit_maker',
 'np',
 'run_bandits']

In [3]: type(mab.bandits.run_bandits) # <- This def is imported ok!
Out[3]: builtin_function_or_method

In [4]: type(mab.bandits.run_gradient_bandit) # <- This def is not!
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-5021ae84cb9b> in <module>
----> 1 type(mab.bandits.run_gradient_bandit) # <- This def is not!

AttributeError: module 'mab.bandits' has no attribute 'run_gradient_bandit'

出于良好的考虑,我在文件中添加了另一行:

XX = 2

卸载,重新安装,然后尝试以相同的结果from mab.bandits import XX ImportError

我已经重新启动内核,或在所有重新编译之间杀死了重新启动的ipython。

那么是什么原因导致这些功能没有出现在扩展模块中?重新编译或重新启动python内核时,是否有缓存无法清除?

0 个答案:

没有答案