Python模块、Pip、定时任务
我今天一直在努力弄明白如何正确安装一个Python模块,以便可以通过定时任务(crontab)访问它。下面是我目前采取的步骤,希望有人能告诉我哪里出错了,以及我该如何改进。
在第8步之前,一切看起来都不错。
欢迎任何反馈。
步骤1 - 检查是否有beatbox
>>> import beatbox
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named beatbox
步骤2 - 安装Beatbox
MacBook-Pro-10:~ $ sudo pip install beatboxxx
Downloading/unpacking beatboxxx
Downloading beatboxxx-21.5.tar.gz
Running setup.py (path:/private/tmp/pip_build_root/beatboxxx/setup.py) egg_info for package beatboxxx
warning: no files found matching '*.txt' under directory 'examples'
no previously-included directories found matching 'src/beatbox/tests/sfconfig.py'
Installing collected packages: beatboxxx
Running setup.py install for beatboxxx
warning: no files found matching '*.txt' under directory 'examples'
no previously-included directories found matching 'src/beatbox/tests/sfconfig.py'
Successfully installed beatboxxx
Cleaning up...
步骤3 - 验证beatbox的位置
>>> import beatbox
>>> print beatbox.__file__
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/beatbox/__init__.pyc
步骤4 - 检查目录是否在sys.path中
>>> import sys
>>> for i in sys.path:
... print i
...
/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
/Library/Python/2.7/site-packages
步骤5 - 将Beatbox添加到sys.path中
>>> import sys
>>> sys.path.append('/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/beatbox')
>>> x = '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/beatbox'
>>> x in sys.path
True
>>>
步骤6 - 创建一个Python文件来导入beatbox MacBook-Pro-10:Desktop $ vim beatbox_test.py
import beatbox
~
~
步骤7 - 创建定时任务 MacBook-Pro-10:Desktop $ crontab -e
*/1 * * * * python /Users/user123121231/Desktop/beatbox_test.py
crontab: installing new crontab
步骤8 - 检查邮件以确认定时任务是否成功
MacBook-Pro-10:Desktop $ mail
"/var/mail/Message 1: 1 message 1 new
>N 1 MacBook-P Sun Oct 26 11:11 22/889 "Cron <MacBook-Pro-10> python /Users/user123121231/Desktop/beatbox_test.py"
From User123142324@User123142324s-MacBook-Pro-10.local Sun Oct 26 11:11:01 2014
X-Original-To: User123142324
Delivered-To: User123142324@User123142324s-MacBook-Pro-10.local
From: User123142324@User123142324s-MacBook-Pro-10.local (Cron Daemon)
To: User123142324@User123142324s-MacBook-Pro-10.local
Subject: Cron <User123142324@User123142324s-MacBook-Pro-10> python /Users/User123142324/Desktop/beatbox_test.py
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=User123142324>
X-Cron-Env: <USER=User123142324>
X-Cron-Env: <HOME=/Users/User123142324>
Date: Sun, 26 Oct 2014 11:10:00 -0700 (PDT)
Traceback (most recent call last):
File "/Users/User123142324/Desktop/beatbox_test.py", line 1, in <module>
import beatbox
ImportError: No module named beatbox":
更新:仍然没有解决方案,但我发现了一些事情。我修改了beatbox_test.py,变成了以下内容:
import sys
for i in sys.path:
print i
import beatbox
返回了以下内容:
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Python/2.6/site-packages
为什么一切都指向2.6而不是2.7?
2 个回答
0
你可能需要在定时任务(crontab)中指定正确的Python版本的完整路径,否则可能会运行错误的版本,这样它就会在错误的地方寻找你安装的模块。如果你的程序在命令行中运行得很好,你可以使用which命令来找到你正在使用的Python可执行文件的位置。
$ which python
/usr/bin/python2.7
然后在你的定时任务中使用这个路径,以确保指向那个特定的Python版本(以及为它安装的所有包):
*/1 * * * * /usr/bin/python2.7 /Users/user123121231/Desktop/beatbox_test.py
1
在crontab中使用这一行可以指定一个特定的Python版本(以及为这个版本安装的所有包):
*/1 * * * * /usr/bin/python2.7 /Users/user123121231/Desktop/beatbox_test.py