2015-04-17 3 views
3

Я разрабатываю небольшой инструмент, который использует в основном NumPy и один модуль SciPy (scipy.optimize.fsolve). Моя идея поделиться им с другими заключается в том, что он поставляется в комплекте с Portable Python, чтобы теоретически каждый мог его запустить.Компиляция одного модуля SciPy в * .pyd

Весь пакет SciPy весит много (около 80 мб). Можно ли скомпилировать только 1 модуль в * .pyd и импортировать его как какой-либо другой модуль, так что мне не нужно включать модули, которые мне действительно не нужны?

ответ

2

Есть несколько возможностей, если вы хотите распространять только подмножество SciPy кода с кодом (и, в частности scipy.optimize.fsolve),

  1. Посмотрите на исходный SciPy код и скопировать только те файлы, которые необходимы для fsolve функция. После быстрого взгляда, который был бы, по крайней мере, scipy/optimize/optimize.py, scipy/optimize/minpack.py, scipy/optimize/_minpack.so/.pyd (но, возможно, я пропустил пару).
  2. В более простом подходе, удалите папку папку неиспользуемых частей в каталоге SciPy установки (особенно те, которые занимают много места), в том числе scipy/weave, scipy/sparse, scipy/linalg и т.д.
  3. Написать простую обертку вокруг scipy.optimize.fsolve и скомпилировать его в коде C с Cython, это должно производить независимую .pyd/.so

Там должен быть модуль питона, чтобы сделать это автоматически, например pyinstaller действительно включает только необходимые модули в двоичном исполняемом она производит. Таким образом, вам понадобится эквивалент pyinstaller, который создает динамические библиотеки.

Смежные вопросы