Что такое 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'