мне нужен 32-битный libxml2 для Python на снежном барсе? - PullRequest
3 голосов
/ 01 марта 2010

У меня чертовски много времени на том, чтобы установить скрап на моем слэ мбп. это требует libxml2, поэтому я приступил к его установке. установка его из macports, похоже, не снимает привязку с python.

установка его из источника с помощью инструкций scrapy ( здесь ) действительно устанавливает привязки python, но когда я запускаю 'python -c "import libxml2"', я получаю несоответствие архитектуры:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "libxml2.py", line 1, in <module>
    import libxml2mod
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-    packages/libxml2mod.so, 2): no suitable image found.  Did find:
    /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-    packages/libxml2mod.so: mach-o, but wrong architecture

когда я явно собираю библиотеки libxml2, чтобы они были 32-битными, эта ошибка исчезает, но тогда libxslt не будет собираться из-за того, что некоторые другие библиотеки не являются 32-битными. Я боюсь продолжать тянуть за эту струну. так что вопрос - только 32-битный питон? я делаю что-то глупое здесь?

edit - это python 2.6

edit 2 - по многочисленным просьбам я собираю здесь потрясающий ответ @Ned Deily. все заслуги перед ним, я просто публикую шаги, которые я предпринял, основываясь на его ответе:

если вы крутились с портами Mac (и не устанавливали через них ничего, что вам нужно), взломайте их.

$ sudo rm -r /opt/local

добавить следующее к /opt/local/etc/macports/variants.conf, чтобы предотвратить загрузку всей библиотеки unix с помощью следующих команд

+bash_completion +quartz +ssl +no_x11 +no_neon +no_tkinter +universal +libyaml -scientific

установить версию Python для Macports

$ sudo port install python26

установить предварительные требования для скрапа

sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select
sudo python_select python26

проверить, что выбран правильный питон: запустите $ which python, который должен что-то сказать в соответствии с '/ opt / local / bin / python', и что он сам по себе должен быть ссылкой на / opt / local /bin/python2.6.

проверить наличие правильных архитектур: запустите file 'which python' (одинарные кавычки должны быть обратными галочками, которые должны выплевываться (для intel macs работает 10.6):

/opt/local/bin/python2.6: Mach-O universal binary with 2 architectures
/opt/local/bin/python2.6 (for architecture x86_64): Mach-O 64-bit executable x86_64
/opt/local/bin/python2.6 (for architecture i386):   Mach-O executable i386

проверить, что libxml успешно установлен

$ python -c 'import libxml2'

если все хорошо, вы не должны получать вывод.

установка скрапа

sudo /opt/local/bin/easy_install-2.6 scrapy

бегать по улицам (полностью одетым), радуясь, что все сделано. еще раз, спасибо Неду за подробный ответ.

Ответы [ 4 ]

5 голосов
/ 02 марта 2010

Судя по путям в вашей трассировке, вы установили и пытаетесь использовать python.org python 2.6.4 (установлен в /Library/Frameworks/Python.frameworks ...). Этот питон только 32-битный. По умолчанию на 10.6 MacPorts пытается установить 64-битные версии пакетов. Вы можете изменить это для большинства пакетов MacPorts, указав вариант +universal в командах установки MacPorts или добавив его в /opt/local/etc/macports/variants.conf. Но, поскольку вам нужны разнообразные пакеты, если вам просто нужно это для вашей собственной машины, вам, вероятно, будет гораздо проще просто установить полное 64-разрядное решение python2.6 с использованием MacPorts. Кроме самой scrapy, вы должны найти почти все пакеты, которые вам нужны, уже там. Вам нужно будет изменить ваш $ PATH, добавив /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin и /opt/local/bin перед любыми другими каталогами с Python в них. Нечто подобное должно работать (не проверено!):

sudo port selfupdate  # ensure you have the latest ports file information
sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select
sudo python_select python26  # optionally make /opt/local/bin/python -> python2.6
sudo /opt/local/bin/easy_install-2.6 scrapy
# or install manually
cd /path/to/scrapy
sudo /opt/local/bin/python2.6 setup.py install

РЕДАКТИРОВАТЬ: Для 10.6, из-за некоторых проблем с отсутствием поддержки Tk в 64-битном режиме, Tk по умолчанию используется версия X11, которая вам, вероятно, не нужна и не нужна. Я добавляю следующие варианты в /opt/local/etc/macports/variants.conf для 10.6 (не все из них применимы к python и друзьям):

+bash_completion +quartz +ssl +no_x11 +no_neon +no_tkinter +universal +libyaml -scientific

РЕДАКТИРОВАТЬ: Если MacPorts установлен правильно, вы должны увидеть что-то вроде этого на 10.6:

$ ls -l /opt/local/bin/python2.6
lrwxr-xr-x  1 root  wheel  73 Oct 28 20:25 /opt/local/bin/python2.6@ -> /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
$ file /opt/local/bin/python2.6
/opt/local/bin/python2.6: Mach-O universal binary with 2 architectures
/opt/local/bin/python2.6 (for architecture x86_64): Mach-O 64-bit executable x86_64
/opt/local/bin/python2.6 (for architecture i386):   Mach-O executable i386

Это если вы добавили вариант +universal, в противном случае вы можете просто увидеть одну архитектуру x86_64 или i386.

При использовании относительных путей убедитесь, что ваша оболочка $ PATH сначала имеет две директории MacPorts:

$ echo $PATH
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin ...

Вам может понадобиться отредактировать ~/.bash_profile или другой файл оболочки, чтобы сделать это изменение "постоянным". Если вы хотите, чтобы голая команда python ссылалась на MacPorts Python, обязательно запустите команду python_select, показанную выше. Если у вас все еще есть проблемы, хорошая вещь о MacPorts в том, что ее легко удалить и начать заново; просто:

$ sudo rm -r /opt/local

и загрузите установщик MacPorts 10.6. Но вам действительно не нужно этого делать. И я думаю, что это действительно было бы в ваших интересах, чтобы исправить это и работать, поскольку это, вероятно, избавит вас от многих головных болей в будущем.

1 голос
/ 08 сентября 2010

У меня есть небольшая заметка, чтобы внести свой вклад. Пытаясь продолжить этот пост, я начал с трех установок Python:

  1. Apple Python 2.5.1 по умолчанию, расположенный по адресу: / usr / bin / python
  2. Версия находится: /Library/Frameworks/Python.framework/Versions/2.7
  3. И версия для Macport находится: /opt/local/bin/python2.6

Моя проблема была в том, что:

$ python

всегда будет по умолчанию 2.7, когда мне нужно было использовать версию Macports. Не помогло следующее:

$ sudo python_select python26

Я даже удалил версию 2.7, которая вызвала только ошибку.

Я понял, что мне нужно изменить путь по умолчанию для версии Macports, используя следующее:

$ PATH=$PATH\:/opt/local/bin ; export PATH

А затем заново инициализировать порты и т. Д.

Наконец, я не смог обратиться к файлу scrapy-ctl.py по умолчанию с помощью этих инструкций, поэтому мне пришлось напрямую ссылаться на файл scrapy-ctl.py

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py

UPDATE

Краткое приложение к этому сообщению с инструкциями по созданию ссылки, найденное на сайте Scrapy (# 2 и # 3).

Начиная с # 2, "Добавьте Scrapy в ваш путь Python"

sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scrapy

И № 3: «Сделать команду scrapy доступной»

sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py /usr/local/bin/scrapy
0 голосов
/ 04 марта 2010

Кредит @Ned Deily

Эти шаги работают, если вы хотите запустить Scrapy 0.8 в OS X 10.6. Он использует установку Macports Python 2.6, а не ту, что входит в комплект ОС. Шаги предполагают, что Macports еще не установлен.

Загрузите последнюю версию установщика MacPorts и установите:

http://www.macports.org/install.php

sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select

sudo /opt/local/bin/easy_install-2.6 scrapy

Измените ~ .profile на:

export     PATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH
0 голосов
/ 04 марта 2010

Пытаюсь установить, но все еще борется. Когда я:

sudo /opt/local/bin/easy_install-2.6 scrapy

Я получаю сообщение об ошибке, и оно останавливается

AttributeError: 'NoneType' object has no attribute 'get'

Вместо этого я создаю Scrapy с нуля, которая отлично работает.

Тогда я попробую то, что ты пишешь

cd /path/to/scrapy
sudo /opt/local/bin/python2.6 setup.py install

Где находится / путь / к / скрап? Это:

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py

или

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/Scrapy-0.8-py2.6.egg

или где-то еще?

...