Не понимаю Cython и почему он не работает с Python 3? - PullRequest
0 голосов
/ 10 марта 2020

Большая часть нашего текущего проекта сильно зависит от этого интегратора. Он написан на Cython, поэтому у меня есть несколько файлов с одинаковыми именами, например: "integrator.pyx", "integrator. cpp" и "integrator.hpp". Существует также файл «setup.py», который предназначен для цифонизации файла «integrator.pyx».

И все это работало нормально, когда все работало в Python 2.

Но сейчас мы пытаемся обновить данные до Python 3 (в частности, 3.4, если это имеет значение), и у нас возникают проблемы.

Многие мои файлы зависят от интегратора, поэтому большинство из них имеют :

from integrator import *

Это прекрасно работает в Python 2. Но если я запускаю те же файлы в Python 3 (я обычно работаю в ноутбуке Jupyter), я получаю ошибку :

ImportError: no module named 'integrator'

После долгих поисков я получил совет распечатать пути импорта для Python 2 и Python 3. Я обнаружил, что каталог '/ usr / local / lib / python2 .7 / dist-packages 'содержит файл с именем "integrator.so" и другой файл с именем "integrator-0.0.0.egg-info", оба из которых отсутствуют в / usr / local /lib/python3.4/dist-packages 'directory.

Когда я вызываю from integrator import *, он вызывает файл .so или ссылается на один из. cpp или .hpp файлы в каталоге? Будет ли просто скопировать файл .so и / или файл .egg в справочную директорию 3.4?

Затем я попытался добавить точку в команду импорта:

from .integrator import *

, который возвращает ошибку:

SystemError: Parent module '' not loaded, cannot perform relative import

Я также попытался перекомпилировать файл "integrator.pyx" в Python 3.4, чтобы посмотреть, не создаст ли это новый кодированный код, совместимый с Python 3. Когда я пытаюсь это сделать, все, что я получаю, - это ошибка:

error: command 'gcc' failed with exit status 1

Я пытался найти это, но большая часть решения либо go над моей головой, либо не работают, либо у меня нет прав на внесение определенных изменений, так как я работаю удаленно на компьютере с общим доступом. Например, я попытался «импортировать pystan» в файле .pyx, но это приводит к

ImportError: no module named 'pystan' даже после pip3 install --user pystan

Как я могу заставить эту работу в Python 3?

...