【问题标题】:Python Modules, Pip, CronjobsPython 模块、Pip、Cronjobs
【发布时间】:2017-04-17 03:07:10
【问题描述】:

我整天都在努力弄清楚如何正确安装 python 模块,以便 crontab 可以访问它。下面我概述了我目前正在采取的步骤,并希望有人告诉我我在哪里犯了错误以及如何改进。

在我进入第 8 步之前,一切看起来都很好

欢迎所有反馈

第 1 步 - 检查节拍器

>>> 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 步 - 创建导入 beatbox 的 python 文件 MacBook-Pro-10:桌面 $ vim beatbox_test.py

import beatbox
~
~      

第 7 步 - 创建 crontab MacBook-Pro-10:桌面 $ crontab -e

*/1 * * * * python /Users/user123121231/Desktop/beatbox_test.py      

crontab: installing new crontab  

第 8 步 - 检查邮件的 crontab 是否成功

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?

【问题讨论】:

  • 你的问题很好。我想知道它是如何获得如此低的观点的。你在step 6 做了什么在你的beatbox_test.py 脚本中做。并再次检查。
  • beatbox_test.py 中唯一的一行是import beatbox
  • 也许 cron 使用的 Python 版本与您安装 beatbox 时使用的版本不同。我建议通过which python 找出工作 python 的路径,然后在 crontab 中设置绝对路径。例如:/usr/bin/python
  • 看来 crontab 正在使用 python 2.6...我该如何更改?
  • 你可以ls /usr/bin/python*查看所有可用的python版本。如果您有自定义 python 安装,可能还有更多。链接到特定的 python 二进制文件总是一个好主意。尤其是在使用 virtualenv 时(无论如何都是推荐的)。

标签: python python-2.7 module pip crontab


【解决方案1】:

在 crontab 中使用这一行来指向特定的 Python 版本(以及为其安装的所有软件包):

*/1 * * * * /usr/bin/python2.7 /Users/user123121231/Desktop/beatbox_test.py

【讨论】:

  • 有没有办法永久更改它,所以我可以使用python 而不是/usr/bin/python2.7
  • 因为python2.6还有一个easy_install,你也可以为那个版本安装你的包:sudo /usr/bin/easy_install-2.6 beatboxxx
【解决方案2】:

您可能需要在 crontab 中指定相应 python 版本的完整路径,否则可能会运行错误的版本并在错误的位置查找您安装的模块。假设你的程序从命令行启动时运行良好,你可以使用 which 命令找到你正在使用的 python 可执行文件的位置。

 $ which python
/usr/bin/python2.7 

然后在您的 crontab 条目中使用此路径来指向特定的 Python 版本(以及为其安装的所有软件包):

*/1 * * * * /usr/bin/python2.7 /Users/user123121231/Desktop/beatbox_test.py

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2017-11-21
    • 2020-01-26
    相关资源
    最近更新 更多