Python: выберите одну из нескольких версий установленных модулей
В моей системе несколько модулей установлены несколько раз. Чтобы привести пример,numpy 1.6.1
устанавливается по стандартному пути в/usr/lib/python2.7/dist-packages
и у меня есть обновленная версияnumpy 1.8.0
установлен в/local/python/lib/python2.7/site-packages/
.
Причина, по которой я не могу просто удалить старую версию, заключается в том, что у меня нет прав что-либо изменить на моем рабочем компьютере. Однако мне нужно использовать новую версию NumPy.
я добавил/local/python/lib/python2.7/site-packages/
к моемуPYTHONPATH
, К сожалению, это не помогает, так как/usr/lib/python2.7/dist-packages
вставляется в путь первым и, следовательно,numpy 1.6.1
будет загружен. Вот пример:
>>> import os
>>> print os.environ['PYTHONPATH']
/local/python/lib/python2.7/site-packages
>>> import pprint
>>> import sys
>>> pprint.pprint(sys.path)
['',
'/local/python/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg',
'/local/python/lib/python2.7/site-packages/pyparsing-2.0.1-py2.7.egg',
'~/.local/lib/python2.7/site-packages/setuptools-3.4.4-py2.7.egg',
'~/.local/lib/python2.7/site-packages/mpldatacursor-0.5_dev-py2.7.egg',
'/usr/lib/python2.7/dist-packages',
'/local/python/lib/python2.7/site-packages',
'/usr/lib/python2.7',
...,
'~/.local/lib/python2.7/dist-packages',
...]
Итак, похоже, что порядок импорта
Текущий каталогяйца изPYTHONPATH
яйца из локального модуля пути (~/.local/lib/python2.7/site-packages/*.egg
)общесистемный путь модуля (~/usr/lib/python2.7/dist-packages/
)каталоги отPYTHONPATH
промежуточные пути (для краткости опущены)каталог базы пользователей (~/.local/lib/python2.7/site-packages/
)Моя проблема в том, что мне нужно было бы поместить пункт 5. перед пунктами 3. и 4., чтобы мой код работал правильно. Прямо сейчас, если я импортирую модуль, который был скомпилирован сnumpy 1.8.0
от/local/*
каталог, и этот модуль импортирует NumPy, он по-прежнему будет принимать NUMPY из/usr/*
каталог и сбой.
Я обошел эту проблему, поместив что-то вроде этого в мои сценарии:
import sys
sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
Таким образом, я могу заставить Python использовать правильный порядок импорта, но, конечно, это не решение, так как мне придется сделать это вкаждый сценарий.