程序包中的Cython酸洗“未找到”错误

安德鲁

我在选择Cython类时遇到麻烦,但仅限于在包中定义它时。该问题先前已在网上指出,但他们没有说明如何解决。这里有两个组成部分:使用__reduce__方法的Cython酸洗和包装错误。

Cython酸洗成功

我将首先展示它在没有包装部分的情况下是如何工作的。此示例正常工作。

Cython文件

我的Cython文件是reudce.pyx

cdef class Foo(object):
    cdef int n

    def __init__(self, n):
        self.n = n

    def __reduce__(self):
        return Foo, (self.n,)

设定档

可以使用以下命令进行编译setup.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension("reduce", ["reduce.pyx"])]
)

通过执行 python setup.py build && cp build/lib*/reduce.so .

测试脚本

测试脚本被调用test_reduce.py为:

import reduce
import pickle
f = reduce.Foo(4)
print pickle.dumps(f)

执行python test_reduce.py工作正常。

Cython酸洗中的包装失败

但是,一旦将reduce.pyx其放入包装中,就会出现错误。

包装制作

要重现此内容,请首先创建一个名为的包bar

mkdir bar
mv reduce.so bar
echo "from reduce import Foo" > bar/__init__.py 

测试脚本

将该test_reduce.py文件更改为:

import bar
import pickle
f = bar.Foo(4)
print pickle.dumps(f)

错误信息

运行python test_reduce.py会出现以下错误:

File "/usr/lib/python2.7/pickle.py", line 286, in save
  f(self, obj) # Call unbound method with explicit self
File "/usr/lib/python2.7/pickle.py", line 748, in save_global
  (obj, module, name))
pickle.PicklingError: Can't pickle <type 'reduce.Foo'>: it's not found as reduce.Foo

pickle.py在查看该代码之后,所有错误都变成了PicklingError ,正在发生的特定错误是:

ImportError: No module named reduce

健全性测试

要检查是否没有某种范围或其他问题,如果我运行pickle模块应执行的步骤,则一切正常:

f = bar.Foo(4)
call, args = f.__reduce__()
print call(*args)

那这是怎么回事?!

安德鲁

问题出在构建脚本中。Pickle模块使用__module__函数/类属性进行酸洗。__module__属性来自脚本中Extension()构造函数的第一个参数setup.py由于我将构造函数定义为Extension('reduce', ['reduce.pyx']),因此__module__属性为reduce应该是bar/reduce因为它现在在包装中。

使setup.py看起来像:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension('bar/reduce', ['reduce.pyx'])]
)

解决了问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

出现DistributionNotFound错误,但程序包存在

来自分类Dev

Android:其他程序包中的活动错误

来自分类Dev

conda:将cython程序包链接到dll

来自分类Dev

Android Studio导入错误的程序包

来自分类Dev

审核参数检查与错误的程序包

来自分类Dev

Android Studio中的“程序包筛选器删除了所有程序包”错误

来自分类Dev

重命名程序包后,Android Studio会引发未找到匹配的客户端的情况

来自分类Dev

我的IDE无法找到我已导入的库。错误:“程序包不存在”

来自分类Dev

作曲家未找到私人托管程序包

来自分类Dev

在vs 2015中执行更新程序包时出现“程序包”错误

来自分类Dev

错误:在提供程序包中找不到类型“ SingleChildCloneableWidget”

来自分类Dev

程序包的Cython C级接口:* .pxd文件未找到

来自分类Dev

中介程序包R中的“未使用的参数”错误

来自分类Dev

在我的程序包中添加声音文件时,在顶级找到非标准文件/目录错误

来自分类Dev

R:在我自己的程序包中使用数据表:lapply(.SD,Mean)错误:未找到对象“ .SD”

来自分类Dev

错误:在Windows 10中安装GNU八度程序包时,“不允许打包程序包”

来自分类Dev

使用@ nguniversal / express-engine程序包的有角度的SSR会收到此错误(错误TS6053中的错误:未找到文件'/project/src/server.ngtypecheck.ts'。)

来自分类Dev

如何找到更新程序包中的新增功能?

来自分类Dev

Android:其他程序包中的活动错误

来自分类Dev

conda:将cython程序包链接到dll

来自分类Dev

在Ubuntu中删除程序-无法找到程序包名称

来自分类Dev

安装Rcartogram程序包-错误消息

来自分类Dev

Android Studio中的“程序包筛选器删除了所有程序包”错误

来自分类Dev

错误:“无法找到程序包network-manager-vpnc-gui”

来自分类Dev

错误删除的程序包

来自分类Dev

R:sample.int()中的错误:NMOF程序包

来自分类Dev

如何调试SSIS程序包中的CRM连接错误?

来自分类Dev

QT c++ 程序中的错误,显示未找到 arduino

来自分类Dev

“未找到适用于应用程序的 WatchKit 1.0 应用程序包”Xcode 10.1 Swift 4.2

Related 相关文章

  1. 1

    出现DistributionNotFound错误,但程序包存在

  2. 2

    Android:其他程序包中的活动错误

  3. 3

    conda:将cython程序包链接到dll

  4. 4

    Android Studio导入错误的程序包

  5. 5

    审核参数检查与错误的程序包

  6. 6

    Android Studio中的“程序包筛选器删除了所有程序包”错误

  7. 7

    重命名程序包后,Android Studio会引发未找到匹配的客户端的情况

  8. 8

    我的IDE无法找到我已导入的库。错误:“程序包不存在”

  9. 9

    作曲家未找到私人托管程序包

  10. 10

    在vs 2015中执行更新程序包时出现“程序包”错误

  11. 11

    错误:在提供程序包中找不到类型“ SingleChildCloneableWidget”

  12. 12

    程序包的Cython C级接口:* .pxd文件未找到

  13. 13

    中介程序包R中的“未使用的参数”错误

  14. 14

    在我的程序包中添加声音文件时,在顶级找到非标准文件/目录错误

  15. 15

    R:在我自己的程序包中使用数据表:lapply(.SD,Mean)错误:未找到对象“ .SD”

  16. 16

    错误:在Windows 10中安装GNU八度程序包时,“不允许打包程序包”

  17. 17

    使用@ nguniversal / express-engine程序包的有角度的SSR会收到此错误(错误TS6053中的错误:未找到文件'/project/src/server.ngtypecheck.ts'。)

  18. 18

    如何找到更新程序包中的新增功能?

  19. 19

    Android:其他程序包中的活动错误

  20. 20

    conda:将cython程序包链接到dll

  21. 21

    在Ubuntu中删除程序-无法找到程序包名称

  22. 22

    安装Rcartogram程序包-错误消息

  23. 23

    Android Studio中的“程序包筛选器删除了所有程序包”错误

  24. 24

    错误:“无法找到程序包network-manager-vpnc-gui”

  25. 25

    错误删除的程序包

  26. 26

    R:sample.int()中的错误:NMOF程序包

  27. 27

    如何调试SSIS程序包中的CRM连接错误?

  28. 28

    QT c++ 程序中的错误,显示未找到 arduino

  29. 29

    “未找到适用于应用程序的 WatchKit 1.0 应用程序包”Xcode 10.1 Swift 4.2

热门标签

归档