2013-03-06 4 views
-1

Я новичок-компилятор из-источника, и у меня есть некоторые проблемы с sconstruct.Scons не найден cython

У меня есть новый osx (Mountain Lion) install (да, это был один из тех выходных). Я установил cython через pip. Он находится в/usr/local/share/python. Этот каталог также находится в моем PATH. Если я запустил команду, которую scons barfing on из приглашения, она заканчивается просто отлично.

Однако скрипт scons для источника, который я пытаюсь построить, не может найти cython. Из нижеприведенного расшифровки видно, что мой PATH правильно передается в scons.

Любой совет будет оценен!

~/Desktop/Fiat-Lux> scons 
scons: Reading SConscript files ... 
Checking whether the C++ compiler works(cached) yes 
Checking for C function printf()... (cached) yes 
Checking for C++ library m... (cached) yes 
Checking for C library boost_system-mt... (cached) yes 
    --> Setting HOME : /Users/davidcranor 
    --> Appending custom PATH : /usr/local/share/python:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 
    --> Appending custom PYTHONPATH : /usr/local/lib/python2.7/site-packages: 
Staging directory: /Users/davidcranor/Desktop/Fiat-Lux/build/ 
Checking for C++ library boost_system-mt... (cached) yes 
Checking for C++ library boost_thread-mt... (cached) yes 
Checking for C++ library boost_program_options-mt... (cached) yes 
Checking for C++ library boost_filesystem-mt... (cached) yes 
Checking for C++ library jack... (cached) yes 
Checking for C++ library aubio... (cached) yes 
Checking for C++ header file Eigen/Dense... (cached) yes 
Checking for C++ library opencv_core... (cached) yes 
Checking for C++ library opencv_imgproc... (cached) yes 
Checking for C++ library opencv_highgui... (cached) yes 
Checking for C library openlase... (cached) yes 
scons: done reading SConscript files. 
scons: Building targets ... 
cython --cplus -o xenon/Python/xenon_core.cc xenon/Python/xenon_core.pyx 
sh: cython: command not found 
scons: *** [xenon/Python/xenon_core.cc] Error 127 
scons: building terminated because of errors. 
+0

записи Cython в терминале и положить выход здесь –

+0

кажется, вызвать компилятор просто отлично .... ~/Desktop/Fiat- Lux> cython Cython (http://cython.org) - это компилятор для кода, написанного на языке Cython . Cython основан на Pyrex Грегом Юинг. Использование:. Cython [опция] SourceFile {дарохранительница, р} ... Опции: -V, --version Показать номер версии Cython компилятора – David

+0

Насколько я знаю SCons не Buildin поддержки Cython. Поэтому код, вызывающий cython, должен быть предоставлен скриптом, и он может быть сломан где-то. – Arpegius

ответ

1

От scons FAQ

Почему SCons не найти мой компилятор/линкер/и т.д..? Я могу выполнить его просто отлично из командной строки.

Конечно, распространяя внешние переменные среды в свою сборку, вы рискуете, что изменение внешней среды повлияет на сборку, возможно, непреднамеренно. Способ гарантировать, что сборка повторяемые является явно инициализировать PATH

path = ['/bin', '/usr/bin', '/path/to/other/compiler/bin'] 
env = Environment(ENV = {'PATH' : path}) 
+0

Я читал FAQ перед тем, как приехать сюда (я обещаю!), Но я не хочу жестко кодировать свой личный путь к cython в файл Sconstruct, а затем проверять его обратно в github ... файл Sconstruct действительно имеет директиву распространите внешнюю (и рабочую!) среду в сборку (вы можете увидеть в строке 8) из приведенного выше файла журнала. Есть ли другой способ сделать работу более чистым? Будут рубить с этим в то же время. Спасибо, что посмотрели на это. – David

+0

Я не собираюсь звучать скупо, но снова из FAQ «SCons не использует ту же переменную среды PATH, которую вы используете из командной строки, поэтому она не может найти программу, которая была установлена ​​в« не- стандартного "местоположения, если вы не скажете ему, как это сделать." и, несмотря на то, что думает 'pip','/usr/local/share/python' является нестандартным. Жесткий код не *, * жесткий, поскольку он глобальный, и вам нужно будет сделать это только один раз ... – danodonovan

+0

Хорошо, я пробовал это по-своему, и это сработало. Просто интересно, хотя ... раньше было «env.Append (PATH = os.environ ['PATH']) 'в файле Sconfig (который я удалил) и'/usr/local/share/python 'в моем ПУТЬ ОС. Кажется, что будет правильно распространяться, не могли бы вы объяснить, почему нет? Спасибо за вашу помощь! – David

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