Я использую обычную генерацию генераторов случайных чисел с 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 варианта:
PYTHONPATH=$PYTHONPATH:prng
from os.path import dirname, join import sys sys.path.append(join(dirname(__file__), 'prng')
from prng import dcmt