Обходной путь, чтобы установить Numpy? - PullRequest
2 голосов
/ 27 сентября 2011

Прямо сейчас у меня есть скрипт, который использует numpy, который я хочу автоматически запускать на сервере. Когда я запускаю ssh и запускаю его вручную, он работает нормально. Тем не менее, когда я настроил его на выполнение в качестве задания cron, он не может найти numpy. Очевидно, из-за среды общего сервера, демон cron по какой-либо причине не может найти numy. Я связался со службой технической поддержки хоста сервера, и они сказали мне настроить VPS или получить мой собственный проклятый сервер. Есть ли способ взломать обходной путь для этого? Возможно, перемещая определенные файлы с numpy в ту же директорию, что и скрипт?

Ответы [ 4 ]

2 голосов
/ 27 сентября 2011

Cronjob работает с пустой средой. Таким образом, он либо не использует тот же двоичный файл python, что и у вас в оболочке, либо у вас установлен PYTHONPATH, которого не будет в crontab.

Вы должны запустить env -i HOME=$HOME sh, чтобы получить представление о среде cronjob. Установите переменные среды, пока ваша команда не сработает, и запишите их.

Затем вы можете установить их в файле crontab, снова используя команду env, например:

* * * * * env PYTHONPATH=/my/pythonpath OTHERVAR=correct-value /path/to/mycommand
2 голосов
/ 27 сентября 2011

Если у вас на сервере установлен numpy, вы можете добавить его в путь импорта для python;в начале вашего скрипта сделайте что-то вроде этого:

import sys
sys.path.append("/path/to/numpy")
import numpy
1 голос
/ 27 сентября 2011

Процессы, вызываемые демоном cron, имеют минимальное окружение, обычно состоящее из $HOME, $LOGNAME и $SHELL.

Звучит, как будто numy где-то на вашем $PYTHONPATH? Если это так, вам нужно будет указать это в строке crontab. Такие как

/usr/bin/env PYTHONPATH=... <then the command to run>

Если вы работаете в системе Linux, использующей vixie cron, вы также можете указать глобальные переменные в вашем crontab, используя такие строки, как

# my environment settings
PYTHONPATH = <path>
SOMETHING_ELSE = blah

<then my normal cron line>

См. man -s 5 crontab

1 голос
/ 27 сентября 2011

Ваша задача cron, вероятно, выполняется с другим интерпретатором Python.

Войдите как вы (через ssh) и скажите which python.Это скажет вам, где ваш питон.Затем пусть ваша задача cron выполнит этот интерпретатор python для запуска вашего скрипта или chmod +x ваш скрипт и поместит путь в строку #! вверху скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...