Что такое pyximport и как его использовать?

Я использую cython для генерации более быстрого кода для математической модели. Мне сложно компилировать код, но каким-то образом мне удалось это сделать с помощью .bat:

setlocal EnableDelayedExpansion

CALL "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /x64 /release
set DISTUTILS_USE_SDK=1

C:\Python27\python.exe C:\gcsilve\trunk\myproject\myproject\cythonsetup.py build_ext --inplace

PAUSE

Он работает нормально...

Мой вопрос касается pyximport. У меня есть старый код, написанный кем-то другим, который использует pyximport.install(). Я не мог понять, что он делает и почему я должен использовать его, так как я уже сам компилирую код. Итак, может кто-нибудь объяснить мне в очень простой (для чайников) способ, что делает pyximport?

Дополнительная информация: У меня есть проект1, используя cython. У меня есть проект2, который ссылается на проект1.

Ответы

Ответ 1

pyximport является частью Cython, и он используется вместо import в некотором роде.

Если вашему модулю не нужны никакие дополнительные библиотеки C или специальная сборка, вы можете использовать модуль pyximport для загрузки файлов .pyx непосредственно при импорте без необходимости писать файл setup.py. Его можно использовать следующим образом:

>>> import pyximport; pyximport.install()
>>> import helloworld
Hello World

Прямо из документации Cython

Ответ 2

Вы можете использовать pyximport для автоматической перекомпиляции и перезагрузки вашего .pyx модуля.

Удалите setup.py, иначе вы можете загрузить этот модуль расширения. pyximport не использует setup.py.

Возьмем hello.pyx с функцией mean2.

Запустите IPython.

In [1]: import pyximport In [2]: pyximport.install(reload_support=True) In [3]: from importlib import reload In [4]: import hello In [5]: hello.mean2(2,3)

Результат:

Out [5]: 2.5

Оставьте это окно и перейдите в редактор, чтобы изменить hello.pyx.

Затем вернитесь к IPython и введите

In [6]: reload(hello);import hello;hello.mean2(2,3)

Вы увидите некоторый текст, информирующий о перекомпиляции. Тогда новый результат:

Out[6]: 'Mean of 2 and 3 is 2.5'