Сборка с частичной сборкой с Cython - PullRequest
5 голосов
/ 09 ноября 2011

Я столкнулся с проблемой с Cython в buildout.

Одной из частей является сборка модуля с Cython из файла .c и файла .pyx.

I 'мы уже пробовали много решений:

Но все заканчивается ошибкой:

ImportError: No module named Cython.Distutils

Это добавляется при загрузке компоновки setup.py этого модуля Cython.

Обратите внимание, что setup.py работает, когда вызывается из своего собственного каталога и с интерпретатором в каталоге bin для buildout.

Спасибо за вашу помощь.

Ответы [ 3 ]

4 голосов
/ 09 ноября 2011

В статьях, на которые вы ссылаетесь, рассказывается, как установить Cython из компоновки, но для этого вам необходим доступ на запись в папку site-packages. Есть три способа запуска этих сборок:

  1. Запустите его как root и установите Cython в системный python сайт-пакеты. Обычно вы хотите избежать этого.

  2. Скомпилируйте свой собственный Python. Это может быть единственным вариантом, если вы хотите используйте версию Python, которой еще нет в системе. Есть конфигурации сборки, которые позволят вам собрать любую версию Python внутри компоновки.

  3. Использование virtualenv. Это создаст (в папке buildout) полная виртуальная среда для Python, включая вашу собственную site-packages папка. Обычно это лучший способ запустить buildout, который может использовать системный Python (или любой другой Python, который Вы уже установили всю систему).

Я предлагаю вам сделать, используя virtualenv часть инструкции по установке вашего программного обеспечения.

2 голосов
/ 23 ноября 2016

Я нашел сегодня этот рецепт https://pypi.python.org/pypi/mr.cython/1.0 которые решают проблему.

Это решит проблему, установив cython с расширенным рецептом, чтобы он был доступен при запуске buildout setup.py develop

Проблема заключалась в том, чтобы построить модуль Cython без установки Cython в качестве системного уровня.

1 голос
/ 10 декабря 2013

Нет способа сделать это за один шаг, но это легко сделать за два шага.

Использование:

python bootstrap.py
./bin/buildout install cython
./bin/cpy bootstrap.py
./bin/cpy ./bin/buildout

Причина, по которой это возможно, заключается в том, что buildout поддерживает скрытый параметр 'install', о котором никто никогда не говорит, но вы можете использовать его, например:

[buildout]
parts = deps py   # <---- Notice we don't depend on cython here
eggs =
  whatever
  kdist
  nark
  kivy # <--- But we do have a module that requires cython to build
develop =
  .
  lib/nark
  lib/kivy-dist

[cython] # <---- By calling ./bin/buildout install cython we trigger this
recipe = zc.recipe.egg:script
parts = cython-py
interpreter = cpy # <--- Which makes our dummy ./bin/cpy 
eggs =
  cython
  pyinstaller

[deps]
recipe = zc.recipe.egg:eggs
eggs = ${buildout:eggs}

[py]
recipe = zc.recipe.egg:script
interpreter = py
eggs = ${buildout:eggs}

Самое приятное в этом подходе заключается в том, что при запуске buildout во второй раз очищается каталог bin , поэтому в конце дня у вас останется каталог bin, который выглядит следующим образом:

$ ls bin/
buildout garden   py

Никаких оставшихся пакетов, которые могут зависеть или не зависать в вашем virtualenv, а потом все испортить. Вот почему мы используем buildout в первую очередь, верно?

... конечно, если вы хотите, чтобы cython зависал, просто вставьте его в зависимости вверху.

...