gpt4 book ai didi

python - Cython、模块导入和 Pickling 的问题

转载 作者:行者123 更新时间:2023-12-01 06:09:52 25 4
gpt4 key购买 nike

我使用 Cython 构建的自定义随机数生成器。我不明白为什么,但它不再起作用......我猜它与 Python 2.7 有关,或者可能与 Cython 的新版本有关。

在 dcmtrand.pyx 中,我有:

...
import dcmt
...
cdef class RandomState:
...
def __reduce__(self):
return (dcmt.__RandomState_ctor, (), self.get_state())
...

dcmt 是一个文件夹。其中,我有 init.py 文件:

from dcmtrand import *

def __RandomState_ctor():
return RandomState.__new__(RandomState)

我使用它编译

python setup.py build_ext --inplace

然后我将生成的 dcmtrand.so 文件复制到 dcmt 文件夹中,并将 dcmt 文件夹移动到我的项目中。

现在,如果我导入 dcmt,一切正常:

import dcmt
import cPickle
dc = dcmt.DynamicCreator(5)
a = dc[0]
cPickle.dumps(a)

但是如果我想将 dcmt 放入子包中,它就不再起作用了:

from prng import dcmt

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "prng/dcmt/__init__.py", line 1, in <module>
from dcmtrand import *
File "dcmtrand.pyx", line 10, in init dcmtrand (dcmtrand.c:6955)
ImportError: No module named dcmt

为了使其工作,我需要将 prng 添加到 Python 路径。

为什么它不再起作用?如何让它再次工作?

最佳答案

是的,您有 3 个选择:

  1. 将 PYTHONPATH 设置为包含 dmct:PYTHONPATH=$PYTHONPATH:prng
  2. 使用系统路径:
    from os.path import dirname, joinimport syssys.path.append(join(dirname(__file__), 'prng')
  3. 执行与 .py 中相同的包含操作:from prng import dcmt

关于python - Cython、模块导入和 Pickling 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com