Только ImportError при прямом запуске файла

У меня есть система, построенная на Python, в которой я теперь хочу периодически запускать некоторые функции с помощью обычного cron. Итак, я сделал файл, который начинается так:

#!/usr/bin/env python
from app.models import User

Когда я импортирую файл из интерактивной командной строки Python, у меня нет проблем:

>>> from app.crons import scrapeChannels
>>>

Но когда я запускаю файл прямо из терминала, я получаю ImportError:

$ /home/kramer65/app/crons/scrapeChannels.py
Traceback (most recent call last):
  File "/home/kramer65/app/crons/scrapeChannels.py", line 2, in <module>
    from app.models import User
ImportError: No module named app.models

Теперь я предполагаю, что это как-то связано с тем, что app.models не в sys.path есть, но с этого момента я немного потерялся. Прав ли я в своем предположении? И как я могу решить эту проблему?

Все советы приветствуются!


person kramer65    schedule 10.07.2015    source источник
comment
Вы не можете запустить скрипт внутри пакета и надеяться, что Python подхватит весь пакет, нет. Поместите скрипты вне пакета app и/или добавьте /home/kramer65 в пакет PYTHONPATH (либо с помощью переменной среды, либо с помощью манипуляций с sys.path в Python).   -  person Martijn Pieters    schedule 10.07.2015
comment
почему вы импортируете app.models в файл, но тестируете app.crons в командной строке?   -  person Dobz    schedule 10.07.2015


Ответы (2)


Я думаю, что если вы хотите запустить скрипт из cron, лучше всего вручную добавить родительский каталог app (который, кажется, /home/kramer65/ к вашему sys.path перед строкой from app.models import User .

Пример -

import sys
sys.path.append('/home/kramer65/')
person Anand S Kumar    schedule 10.07.2015

Добавьте каталог, содержащий пакет app, к пути к Python, используя PYTHONPATH:

$ set PYTHONPATH=/home/kramer65
$ /home/kramer65/app/crons/scrapeChannels.py
person Peter Wood    schedule 10.07.2015