2015-07-10 34 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 
相关问题