Python и движок Spidermonkey Javascript в Linux - PullRequest
0 голосов
/ 23 февраля 2012

Я успешно установил движок Spidermonkey JS на мою Linux-машину (Ubuntu). По сути, моя цель - заставить его выполнять сценарии Ajax (js) и возвращать результат обратно в мой сценарий Python. Я в основном пытаюсь построить хороший О.О. веб-скребок. Но мне довольно сложно заставить все это работать.

Сейчас я нахожусь в точке, где, когда я набираю JS в моем терминале, я могу начать выполнять Javascript. Я был в Google и нашел этот маленький фрагмент на Stackoverflow:

import urllib2
import spidermonkey
js = spidermonkey.Runtime()
js_ctx = js.new_context()
script = urllib2.urlopen('http://etherhack.co.uk/hashing/whirlpool/js/whirlpool.js').read()
js_ctx.eval_script(script)
js_ctx.eval_script('var s="abc"')
js_ctx.eval_script('print(HexWhirpool(s))')

но не удалось запустить с ошибкой, что модуль Spidermonkey не может быть найден.

Я немного растерялся. Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 10 мая 2013

Недавно у меня возникла задача сделать что-то вроде удаления из Интернета, и для части javascript, в настоящее время хочу попробовать использовать python-spidermonkey для ее решения и посмотреть, может ли это работать для меня ...

и я, кажется, сталкиваюсь с подобной ситуацией, после того, как я думаю, что я закончил установку python-spidermonkey, я выполнил скрипт выше, я получил эту ошибку:

Traceback (most recent call last):
  File "spidermonkeytest.py", line 2, in <module>
    import spidermonkey
ImportError: libjs.so: cannot open shared object file: No such file or directory

затем после некоторого поиска в Google ... я нашелрешение, вероятно, в конце здесь: http://hi.baidu.com/peizhongyou/item/ec1575c3f0e00e31e80f2e48

я настроил эти вещи:

$sudo vi /etc/ld.so.conf.d/libjs.so.conf

заполните эту строку:

/usr/local/lib/

сохранить и выйти,выполнить ldconfig:

$sudo ldconfig

тогда я могу запустить скрипт, предоставленный выше @Synbitz Prowduczions, не знаю, нужен ли вам этот ответ, или это все еще помогает?

1 голос
/ 16 мая 2016

Я также попытался easy_install python-spidermonkey безуспешно, поскольку libnspr-dev пакет отсутствует.

Итак, я собрал пакет из исходного кода. Инструкции со страницы проекта (Debian Stretch):

Сборка

  1. Проверьте модуль Python-Spidermonkey из репозитория SVN (я скачал его как исходный архив, прямая ссылка )
  2. Распакуйте и перейдите к ./python-spidermonkey/trunk
  3. CPPFLAGS="-Wno-format-security" python setup.py build (эти флаги для Debian)
  4. Ошибка jsemit.h:508:32: error: expected ‘(’ before ‘)’ token uintN decltype); означает, что decltype нельзя использовать в качестве переменной (может быть, это макрос или что-то еще), исправьте это следующим образом:

    sed -e 's / decltype / dectyp /' -i.ORIG ./js/src/jsemit.h

    sed -e 's / decltype / dectyp /' -i.ORIG ./js/src/jsemit.cpp

  5. Ошибка jsemit.cpp:6490:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘uint8 {aka unsigned char}’ inside { } [-Wnarrowing] означает недопустимое преобразование переменной, перекомпилируйте его вручную:

    cd js / src

    g ++ -o Linux_All_DBG.OBJ / jsemit.o -c -Wall -Wno-сужение -Wno-формат -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY = va_copy -DPIC -fPIC -DPEОшибка spidermonkey.c:1:2: error: #error Do not use this file, it is the result of a failed Pyrex compilation. - некоторые проблемы с пирексом.Есть патч .Сделайте это следующим образом:

    wget -O - https://storage.googleapis.com/google-code-attachments/python-spidermonkey/issue-14/comment-4/cinit.patch |patch -p1 ./spidermonkey.pyx

Установка

su и python setup.py install как root.

Running

  1. По умолчанию сценарий установки устанавливает libjs.so на /usr/local/lib/, поэтому я сделал ln -s /usr/local/lib/libjs.so /usr/lib/libjs.so (но вам лучше использовать решение от Seagal82 )

Без этого шага python продолжает жаловаться на импорт ImportError: libjs.so: cannot open shared object file: No such file or directory

У меня также была ошибка ImportError: cannot import name Runtime после from spidermonkey import Runtime.Возможно, причина была в старых данных easy_install в ~/.local/lib/python2.7/site-packages/spidermonkey/.После удаления все работает гладко
0 голосов
/ 31 марта 2012

Вам нужно попробовать libnspr4. Если это не сработает, вы всегда можете скачать его с Mozilla и создать код самостоятельно.

Нетрудно набрать ./config && make && make install, чтобы собрать библиотеку самостоятельно после распаковки источника. Если вы создаете себя, файлы, скорее всего, будут в

/ usr / local / {include, lib}

Также попробуйте поискать в Google для "YOUR_OS_NAME install nspr4".

  • Я полагаю, что кто-то написал переводчик заголовочных файлов C / C ++ для Python ctypes. Хотя я не могу сказать ничего другого, потому что я не использую Python.
  • SpiderMonkey также имеет собственную реализацию ctypes, смоделированную после Python. Так что технически, если вы знаете javascript, вы можете вообще отказаться от использования Python, поскольку вы хотите сделать с ним немного ajax. Вам нужно будет освежить сокеты времени выполнения NSPR или C, чтобы соответствовать требованиям для ваших проектов, использующих только Spidermonkey.

ИЛИ веб-поиск Python + AJAX может найти именно то, что вам нужно.

...