mach-o, но неправильная архитектура при импорте регулярного выражения

Я получаю следующую ошибку, когда пытаюсь import regex.

Traceback (most recent call last):
  File "app.py", line 3, in <module>
    import regex 
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/regex.py", line 391, in <module>
    import _regex_core
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex_core.py", line 21, in <module>
    import _regex
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex.so, 2): no suitable image found.  Did find:
    /opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex.so: mach-o, but wrong architecture

Я установил python33 через macports, а затем установил последнюю версию регулярного выражения (от Мэтью Барнетта) через sudo python setup.py install.

Я использую Mac OS X Leopard (8.5). Мой процессор - Core 2 Duo, 64-битный. Как я могу исправить эту ошибку?

Когда я запускаю lipo -info, я получаю:

Non-fat file: /opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/_regex.so is architecture: i386

Когда я запускаю lipo -info /opt/local/bin/python нежирный файл: /opt/local/bin/python это архитектура: ppc7400

Почему питон ppc7400?


person Baz    schedule 24.03.2013    source источник
comment
Вы уверены, что используете бинарный файл Python 3.3?   -  person Xymostech    schedule 25.03.2013
comment
Посмотрите на пути к библиотекам: это явно указывает на то, что Python 3.3 запущен.   -  person Gareth Rees    schedule 25.03.2013
comment
Когда я запускаю python на терминале, я получаю: Python 3.3.0 (по умолчанию, 24 марта 2013 г., 16:14:43) [GCC 4.0.1 (Apple Inc., сборка 5493)] на darwin. лицензию для получения дополнительной информации. ›››   -  person Baz    schedule 25.03.2013


Ответы (1)


У MacPorts есть собственный порт библиотеки regex для Python 3.3, так почему бы не использовать его вместо того, чтобы создавать его самостоятельно?

$ sudo port install py33-regex
[...]
$ python3.3
Python 3.3.0 (default, Nov 23 2012, 10:26:01) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import regex
>>> regex.match(r'[a-z]+', 'abc123').group(0)
'abc'

Архитектура ppc7400 была более известна как PowerPC G4, которая является одной из архитектур, поддерживаемых используемой вами версией OS X. Похоже, вам каким-то образом удалось установить сборку Python 3.3 для PowerPC. (Предположительно, он работает через Rosetta.)

Один из способов, которым это могло бы произойти, — если бы у вас была установка MacPorts на машине PowerPC G4, и вы перенесли свою установку на новую машину Intel с помощью Ассистента миграции. См. часто задаваемые вопросы о MacPorts по этому вопросу:

MacPorts работает как на компьютерах Mac на базе Intel, так и на PowerPC, но по умолчанию устанавливаемые вами порты будут скомпилированы только для той архитектуры, на которой вы сейчас работаете. Это означает, что если вы переходите, скажем, с PowerPC Mac на Intel и используете Migration Assistant для копирования данных на новую машину, вам следует переустановить все свои порты на новой машине, чтобы перестроить их для Intel. См. раздел Миграция, чтобы узнать, как заставить все снова работать.

(Кроме того, вам не нужно использовать lipo: утилита file расскажет вам об архитектуре (ах) в исполняемой или разделяемой библиотеке.)

person Gareth Rees    schedule 24.03.2013
comment
Я установил регулярное выражение с macports, и теперь оно импортируется правильно. Однако это потому, что теперь он также создан для архитектуры ppc7400. Почему это? - person Baz; 25.03.2013
comment
Я не перешел с PowerPC. :) - person Baz; 25.03.2013
comment
Какие у вас есть настройки для build_arch и universal_archs в /opt/local/etc/macports/macports.conf? - person Gareth Rees; 25.03.2013
comment
В macports.conf у меня есть: «universal_archs ppc i386», но нет упоминания о build_arch. - person Baz; 25.03.2013
comment
Вы можете попробовать установить universal_archs на x86_64 i386, а затем удалить и пересобрать порт python33 с параметром +universal. Или прочтите документы MacPorts еще немного... - person Gareth Rees; 25.03.2013