【问题标题】:Cannot Import Python MySQL module when running a script using crontab使用 crontab 运行脚本时无法导入 Python MySQL 模块
【发布时间】:2011-12-19 17:33:43
【问题描述】:

我正在使用 crontab 运行需要模块 MySQLdb 的 python 脚本。当我从命令行运行此脚本时,一切正常。但是,尝试使用 crontab 运行它会引发此错误。

Traceback (most recent call last):
  File "clickout.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

我进行了谷歌搜索并将其添加到我的脚本顶部#!/usr/bin/python。但是,这没有做任何事情,我仍然遇到同样的错误。我究竟做错了什么?

【问题讨论】:

    标签: python shell cron mysql-python


    【解决方案1】:

    您可能正在使用不同的 Python 可执行文件。在 shell 上,输入 which python 以找出 Python 可执行文件所在的位置。假设这会返回 /usr/bin/python 以外的其他内容,比如 /home/myuser/bin/python,那么在脚本的第一行中,您将编写:

    #!/home/myuser/bin/python
    

    也可能是您的 shell 具有名为 PYTHONPATH 的环境变量。如果是这种情况,并且您找到了从哪里导入库,那么这就是您如何在脚本的第一行中添加查找库的路径,“MySQLdb”的导入之前:

    import sys; sys.path.append('/path/to/MySQLdb-lib/')
    

    【讨论】:

    • 非常感谢!如何找出 MySQLdb 路径的路径是什么?
    • 像 unutbu 节目那样做。 import 终端中它工作的模块并输入 MySQLdb.__file__
    • 非常有用,非常感谢。就我而言,正确的解决方案是:尝试在创建 cronjob 时始终使用二进制文件的绝对路径。问候
    【解决方案2】:

    在 crontab 顶部定义 PYTHONPATH。 定义所有这些环境变量(如下)可以帮助您避免一些与缺少环境变量相关的常见 cron 问题:

    USER=...
    HOME=/home/...
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:$HOME/bin
    PYTHONPATH=...
    DISPLAY=:0.0
    MAILTO=...
    LANG=en_US.UTF-8
    

    要查找 MySQLdb 的路径,请打开 python shell 并键入:

    >>> import MySQLdb
    >>> MySQLdb.__file__
    '/usr/lib/pymodules/python2.7/MySQLdb/__init__.pyc'
    

    你的路径我不同。在上面的示例中,要添加到 PYTHONPATH 的适当目录是 /usr/lib/pymodules/python2.7(尽管您不必添加此特定路径,因为您的 python 可执行文件应该在其 sys.path 中自动包含此路径)。

    【讨论】:

    • 非常感谢!如何找出 MySQLdb 路径的路径是什么?
    【解决方案3】:

    在 crontab 中定义 PYTHONPATH 对我有用,首先我使用以下方法进入 crontab:

    sudo crontab -e
    

    然后我将库路径添加到 PYTHONPATH 变量中。在我的情况下是这样的:

    PYTHONPATH=/home/username/.local/lib/python2.7/site-packages
    

    为了找到库的路径,我首先使用 python 导入它,然后使用 file 属性。

    import library
    library.__file__
    

    【讨论】:

      【解决方案4】:

      尝试运行

      sudo -H pip install MySQLdb
      

      (注意 -H 选项)。它对我有用,与另一个包有类似的问题

      【讨论】:

        【解决方案5】:

        问题是这个模块不在crontab用户的python模块搜索路径中。 试试看这里:http://docs.python.org/tutorial/modules.html#the-module-search-path

        【讨论】:

          猜你喜欢
          • 2016-06-18
          • 2016-03-06
          • 1970-01-01
          • 2021-12-29
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多