Я попытался скомпилировать Pyparsing на моей машине с Windows, но получил следующие ошибки:
python setup.py build_ext --inplace
running build_ext
cythoning pyparsing.pyx to pyparsing.c
Error compiling Cython file:
------------------------------------------------------------
...
If C{include} is set to true, the matched expression is also parsed (the
skipped text
and matched expression are returned as a 2-element list). The C{ignore}
argument is used to define grammars (typically quoted strings and comment
s) that
might contain false matches.
"""def __init__( self, other, include=False, ignore=None, failOn=None ):
^
------------------------------------------------------------
pyparsing.pyx:2764:31: Expected an identifier, found 'include'
Error compiling Cython file:
------------------------------------------------------------
...
def __init__( self, other, include=False, ignore=None, failOn=None ):
super( SkipTo, self ).__init__( other )
self.ignoreExpr = ignore
self.mayReturnEmpty = True
self.mayIndexError = False
self.includeMatch = include
^
------------------------------------------------------------
pyparsing.pyx:2769:28: Expected an identifier or literal
building 'pyparsing' extension
creating build
creating build\temp.win32-2.7
creating build\temp.win32-2.7\Release
C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox /MD /W
3 /GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcpyparsing.c /Fobuild\t
emp.win32-2.7\Release\pyparsing.obj
pyparsing.c
pyparsing.c(1) : fatal error C1189: #error : Do not use this file, it is the re
sult of a failed Cython compilation.
error: command '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' fa
iled with exit status 2
Я выполнил компиляцию с использованием Microsoft Visual C ++ 2008 Express, а используемый модуль Pyparsing является самой последней версией. Пожалуйста, кто-нибудь знает, как заставить это работать?
Сэр, я сделал, как вы сказали, но все еще было предупреждение во время компиляции:
python setup.py build_ext --inplace работает build_ext cythoning pyparsing.pyx в pyparsing.c предупреждение: pyparsing.pyx: 413: 8: недоступный код построение расширения pyparsing создание сборки создание сборки \ temp.win32-2.7 создание сборки \ temp.win32-2.7 \ Release C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ BIN \ cl.exe / c / nologo / Ox / MD / W 3 / GS- / DNDEBUG -IC: \ Python27 \ include -IC: \ Python27 \ PC /Tcpyparsing.c / Fobuild \ t emp.win32-2.7 \ Release \ pyparsing.obj pyparsing.c C: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ BIN \ link.exe / DLL / nologo / INCRE MENTAL: NO / LIBPATH: C: \ Python27 \ libs / LIBPATH: C: \ Python27 \ PCbuild / EXPORT: initpyp arsing build \ temp.win32-2.7 \ Release \ pyparsing.obj / OUT: C: \ Users \ iProsper \ Desktop \ pyparsing \ pyparsing.pyd /IMPLIB:build\temp.win32-2.7\Release\pyparsing.lib / MAN IFESTFILE: построить \ temp.win32-2.7 \ Release \ pyparsing.pyd.manifest Создание библиотеки build \ temp.win32-2.7 \ Release \ pyparsing.lib и сборка объекта \ temp.win32-2.7 \ Release \ pyparsing.exp C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ mt.exe -nologo -manifest build \ temp.win32-2.7 \ Release \ pyparsing.pyd.manifest -outputresource: C: \ Users \ iProsper \ Desktop \ Pyparsing \ pyparsing.pyd; 2
Предупреждение на самом деле в строке 4: предупреждение: pyparsing.pyx: 413: 8: недоступный код. Затем я изменил строку следующим образом:
def __getattr __ (self, name): если True: #name не в себе .__ slots__: если имя в себе .__ tokdict: если имя не в себе .__ имена: вернуть себя .__ tokdict [имя] [- 1] [0] еще: вернуть ParseResults ([v [0] для v in self .__ tokdict [name]]) еще: вернуть "" иначе: возврат Нет
и затем перекомпилировал это. Одна вещь, которую я заметил, заключается в том, что даже с предупреждением и внесенным мною редактированием оба они успешно скомпилировались, но когда я попытался проверить его с помощью следующего кода:
из pyparsing импорта Word, альфы greet = Word (альфа) + ',' + Word (альфа) + '!' приветствие = greet.parseString ('Привет, мир!') печать приветствия
Я получил следующую ошибку:
Traceback (последний вызов был последним): Файл "C: \ nwaomachux \ build_pyparsing \ checkout.py", строка 1, в из pyparsing импорта Word, альфы Файл "pyparsing.pyx", строка 3414, в init pyparsing (pyparsing.c: 100064) AttributeError: у объекта «builtin_function_or_method» нет атрибута «ANY_VALUE»
Я бы изменил файл дальше и отправил его вам, чтобы проверить, но мне всего несколько часов с Pyparsing, так что я еще не понял полный исходный код.
Я не знаю, каков эффект от перемещения withAttribute.ANY_VALUE = object () к началу def withAttribute (арг,* AttrDict): Функция означать. Пожалуйста, что это за исправление? Благодарю.
Я подозреваю, что проблема заключается в использовании ‘include’ в качестве именованного параметра, так как include
является зарезервированным ключевым словом C. Попробуйте отредактировать это __init__
рутина для:
def __init__( self, other, include_=False, ignore=None, failOn=None ):
super( SkipTo, self ).__init__( other )
self.ignoreExpr = ignore
self.mayReturnEmpty = True
self.mayIndexError = False
self.includeMatch = include_
self.asList = False
if failOn is not None and isinstance(failOn, basestring):
self.failOn = Literal(failOn)
else:
self.failOn = failOn
self.errmsg = "No match found for "+_ustr(self.expr)
То есть просто добавьте «_» к имени параметра, в списке параметров и в одной строке, которая ссылается на него. Это сделает ваш Python-компилятор немного отличающимся от стандартного выпуска, но я не видел интенсивного использования этого параметра.
Удачи, пожалуйста, напишите в pyparsing wiki Обсуждение на главной странице ваш опыт Cython-izing, и любая информация о том, как это могло ускорить ваш процесс pyparsing.