я довольно новый для Cython, кто-нибудь знает, как собрать питон проект через Cython (с относительными низкими накладными расходами), так как я получаю следующее сообщение об ошибке импорта:Compling Python пакет через Cython
ImportError: No module named CythonRelated.testSource.MyClassObject
Моих структура тестового проекта, как это:
CythonRelated/
setup.py
testSource/
MainCythonTest.py
MyClassObject.py
MainCythonTest.pyx
MyClassObject.pyx
Где MainCythonTest импорт класса из модуля MyClassObject (через
from CythonRelated.testSource.MyClassObject import myCustomObj
), инициализирует объект и вызывает метод объекта.
Мой setup.py выглядит следующим образом:
from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
setup(
name = "My cython test app",
ext_modules = cythonize("testSource/*.pyx", include_path = ["."]),
packages = ["CythonRelated", "CythonRelated.testSource"]
)
Что мне не хватает?
Принимая setup.py вне CythonRelated (и, очевидно, обновляя соответствующий путь * .pyx файлов в cythonize) не помогло
MyClassObject.py
import sys
print sys.version_info
class myCustomObj():
def __init__(self, value):
self.value_ = value
def classInfo(self):
print "calling class {0} object with value of {1}".format(self.__class__.__name__,
self.value_)
MainCythonTest.py
import pyximport; pyximport.install()
from CythonRelated.testSource.MyClassObject import myCustomObj
def myFunc():
aObj = myCustomObj(12)
bObj = myCustomObj(21)
bObj.classInfo()
aObj.classInfo()
print "myFunc called"
myFunc()
Спасибо - но тогда кажется, что python не принимает скомпилированные версии. Попробуйте удалить .py-файлы и установить только с .pyx, он не сможет найти модули при их импорте (хотя установка идет без ошибок). Или вам всегда нужно хранить файлы .py? Как вы можете быть уверены, что он берет скомпилированную версию? Я видел это: http://stackoverflow.com/questions/6584457/what-is-the-precedence-of-python-compiled-files-in-imports, но так или иначе ... – schmi
Хорошо, я этого не понимал. Я просто скопировал содержимое файла '.pyx'. Когда вы «cythonizing» файл '.py', нет необходимости хранить файл' .py'. Вы можете просто удалить его. –