Загрузка модулей Python через вычислительный кластер
У меня есть учетная запись в вычислительном кластере, который использует Scientific Linux. Конечно, у меня есть только пользовательский доступ. Я работаю с Python, и мне нужно запускать скрипты Python, поэтому мне нужно импортировать некоторые модули Python. Поскольку у меня нет доступа с правами root, я установил локальную копию Python на свой $HOME со всеми необходимыми модулями. Когда я запускаю скрипты на моей учетной записи (хост-узле), они работают правильно. Но для отправки заданий в вычислительные очереди (для обработки на гораздо более быстрых машинах) мне нужно отправить bash-скрипт, в котором есть строка, выполняющая эти сценарии. Вычислительный кластер использует SunGrid Engine. Однако, когда я отправляю скрипт bash, я получаю сообщение об ошибке, что установленные мной модули не могут быть найдены! Я не могу понять, что не так. Я надеюсь, что вы можете помочь.
2 ответа
Вы можете просто вызвать вашу программу на Python из скрипта bash примерно так: PYTHONPATH=$HOME/lib/python /path/to/my/python my_python_script
Я не знаю, как работает SunGrid, но если он использует пользователя, отличного от вашего, вам потребуется глобальный доступ для чтения к вашему $HOME
, Или, по крайней мере, в библиотеки Python.
Вы пытались добавить их в свой код Python:
import sys
sys.path.append("..")
from myOtherPackage import myPythonFile
Это очень хорошо работает для моего кода, когда я запускаю его в кластере, и я хотел вызвать свой "myPythonFile" из другого пакета "myOtherPackage"
Во-первых, работает ли у вас это решение, во многом зависит от того, как настроен кластер. Тем не менее, общее решение вашей проблемы ниже. Если у вычислительного кластера есть доступ к тем же файлам, что и у вас в домашнем каталоге, я не вижу причин, по которым это не будет работать.
Вы должны использовать virtualenv. Установите ваше программное обеспечение внутри этого virtualenv вместе с любыми дополнительными пакетами Python, которые вам нужны. Затем в вашем пакетном bash-скрипте укажите полный путь к интерпретатору python в пределах этого virtualenv.
Примечание: чтобы установить пакеты Python внутри вашего virtualenv, вам нужно использовать экземпляр pip, который находится в вашем virtualenv, а не системный pip.
Пример:
$ virtualenv foo
$ cd foo
$ ./bin/pip install numpy
Тогда в вашем скрипте bash:
/path/to/foo/bin/python /path/to/your/script.py