2015-07-10 102 views
0

我有一個Python構建的系統,我現在想用一個普通的cron定期運行一些函數。所以我做了這開始了這樣的文件:直接運行文件時只有ImportError

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

當我從交互式Python命令行導入文件我沒有任何問題:

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

但是,當我直接運行該文件終端我得到的導入錯誤:

$ /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中的,但從這點我有點迷失。我的想法是否正確?我該如何解決這個問題?

歡迎所有提示!

+0

你不能在一個包中運行一個腳本*,並希望Python拿起整個包,不。將腳本**放在'app'包的**外部,並且/或將'/ home/kramer65'添加到'PYTHONPATH'(通過環境變量或通過Python中的sys.path'操作)。 –

+0

你爲什麼要在文件中導入'app.models',但是在命令行測試'app.crons'? – Dobz

回答

2

如果要由cron腳本以及我認爲,最好是手動添加的父目錄的app(這似乎是/home/kramer65/sys.path,行from app.models import User

實例之前 -

import sys 
sys.path.append('/home/kramer65/') 
1

添加含有app包到你的Python路徑的目錄中,使用PYTHONPATH

$ set PYTHONPATH=/home/kramer65 
$ /home/kramer65/app/crons/scrapeChannels.py 
相關問題