Ставлю на Mac OS X 10.7.4 (Lion) пакеты python27 @2.7.3, py27-numpy @1.6.2, py27-scipy @0.10.1, py27-matplotlib @1.1.1, py27-spyder @2.1.9, py27-crypto @2.6 с хранилища MacPorts.
Все успешно ставится в /opt/local/…, кроме пакета spyder, который все-таки компилируется с ошибкой - “Module compiled against API version 6 but this version of numpy is 4”.
Когда запускаю /opt/local/bin/python2, запускается python версии 2.7.3, после введения команд в котором:
>>> import Crypto
>>> Crypto.__file__
'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/Crypto/__init__.pyc'
>>> import scipy
>>> scipy.__file__
'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/__init__.pyc'
>>> import numpy
>>> numpy.__version__
'1.5.1 ‘
>>> numpy.__file__
’/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/__init__.pyc'
Вопрос: почему пакет numpy загружается системный? Возможно, проблема c путями в sys.path?
>>> import sys
>>> sys.path
(' ‘, ’/ System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', ‘/ Library/Python/2.7/site-packages/pip-1.1-py2.7.egg’ ‘/ opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip’, ‘/ opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7’ ‘/ opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin’, ‘/ opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2 .7/plat-mac ’ ‘/ Opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk’, ‘/ opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2 .7/lib-old ’,' / opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/readline ‘,’ / opt / local / Library / Frameworks / Python .framework/Versions/2.7/lib/python2.7/lib-dynload ‘,’ / opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages ‘,’ / opt / local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL ‘,’ / opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2. 7/site-packages/PyObjC ‘ ’/ Library/Python/2.7/site-packages', ‘/ Library/Python/2.7/site-packages/PIL’)
Как видно, первые идут, после текущего каталога, системные пути. Изменить sys.path можно в режиме выполнения, переместив 2-й и 3-й путь в конец списка, - sys.path = (' ‘, …).
И действительно,
>>> import numpy
>>> numpy.__version__
’1.6.2 ‘
>>> numpy.__file__
’/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy'
Но при следующем запуске /opt/local/bin/python2, список в sys.path, конечно, остался прежним.
Не исправило проблему и добавления PYTHONPATH в .profile:
export PYTHONPATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy
и перезапуск bash shell.
В списке путей sys.path значение PYTHONPATH заняло 3-ю позицию после системных первых двух.
В результате, конечно, ничего не изменилось:
>>> import numpy
>>> numpy.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/__init__.pyc'
————————————————– ——————————————–
Crypto, scipy - пакеты были установлены мной ранее в системные каталоги Mac OS X для системного python 2.7.1, а потом через некоторое время спустя, также установлены с помощью MacPorts, - в /opt/local/…
Вопросы:
1. Почему Crypto, scipy правильно импортируются в python 2.7.3 на пути /opt/local/…, а numpy - нет?
2. Что нужно сделать, чтобы импортировалась numpy 1.6.2 из /opt/local/…, а не системную - numpy 1.5.1? Не хочу увеличивать версии компонентов системного python 2.7.1.
3. Есть какие-то возможности изменить список sys.path на нужный (чтоб первые пути не были системные), а не правкой site.py на пути /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7?