【问题标题】:Crontab No module named Pandascrontab 没有名为 Pandas 的模块
【发布时间】:2020-03-05 09:52:10
【问题描述】:

由于某种原因,Cron 不会处理这个并一直告诉我 pandas 没有安装(它是每当我正常运行我的代码时)

我收到了这封邮件:

  Subject: Cron <user@Justins-MBP-4> PYTHONPATH=/Users/user/Library/Python/3.6/lib/python/site-packages python  ~/downloads/random/milbtrans.command
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
X-Cron-Env: <HOME=/Users/user>
Date: Tue,  8 May 2018 11:18:01 -0400 (EDT)

Traceback (most recent call last):
  File "/Users/user/downloads/random/milbtrans.command", line 2, in <module>
    import requests, csv, pandas, openpyxl, datetime, time
ImportError: No module named pandas

将 Pandas 更改为已修复,但现在出现此错误:

 Traceback (most recent call last):
  File "/Users/user/downloads/random/milbtrans.command", line 2, in <module>
    import requests, csv, sys, pandas, openpyxl, datetime, time
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/__init__.py", line 19, in <module>
    "Missing required dependencies {0}".format(missing_dependencies))
ImportError: Missing required dependencies ['numpy']

感谢任何帮助。

【问题讨论】:

  • 熊猫是如何安装的?例如,如果它在 virtualenv 中,则必须在该 env 中运行它。您可以print(pandas.__file__) 查看它在您系统上的位置。如果它不在系统目录中,那么它是某种本地安装。
  • 该命令告诉我它位于此处:/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/__init__.py
  • 我不熟悉哪个工具集将内容放入/Library/Frameworks。你做了什么改变来解决熊猫问题?
  • 我将 PYTHONPATH 代码更改为上面评论中的正确目录
  • 这是用户 cron 还是系统 cron?

标签: python cron


【解决方案1】:

您尚未发布您的 crontab,但我怀疑您没有使用正确的 Python 3.6 路径。您的 cron 错误电子邮件显示 PATH cron 使用的是 /usr/bin 和 /bin。您的 cron 命令只调用“python”。所以 cron 将使用它的 PATH 来尝试解析“python”。

在这些位置中是否提供了 Python 3.6 的可执行文件或链接?

如果您从自己的登录名运行:$ /usr/bin/python$ /bin/python,您会看到什么?我猜一个、另一个或两者都会启动不同版本的 Python(即 Python 2.x.x)

  1. 找出python3的确切安装位置。示例(您的结果可能不同):

$ which python3 /usr/local/bin/python3

  1. 在 crontab 中,当您指定 python 可执行文件和脚本的路径时使用相同的绝对路径(也使用绝对路径)。

crontab

0 0 * * * /usr/local/bin/python3 /Users/user/downloads/random/milbtrans.command

我建议你先这样尝试,不要使用 PYTHONPATH。

您还可以更优雅地管理 cron 执行上下文的环境变量(即通过 crontab 本身或“包装”shell 脚本导出正确的 PATH 环境变量),这也可以解决问题,但基于您的've shared here 我相信这是解决您当前问题的最简单方法。

【讨论】:

    【解决方案2】:

    我在 Ubuntu 18.04 上遇到了同样的问题。

    对我来说,解决方法是让 crontab 调用一个 shell 脚本,然后执行 python 脚本。还必须设置 HOMEPYTHONPATH 环境变量:

    crontab:

    # Execute shell script and pipe stdout and stderr to a log file
    # Which will enable you to see what's going on
    * * * * * <your_path>/yourscript.sh  >> <your_path>yourscript_cron.log 2>&1
    

    你的脚本.sh:

    #!/bin/bash
    echo yourscript.sh called: `date`
    HOME=<your_home_dir>
    PYTHONPATH=<path_to_dist_packages>
    cd <path_to_your_python_script>
    <python_executable> ./<your_python_script> 2>&1 1>/dev/null
    

    很有趣,这个 shell 包装器方法是我过去在 Windows 上确定计划任务的方式,因为它为您提供了最好的调试和灵活性。

    【讨论】:

    • (Debian 系统)因为这将由 cron 运行。还值得注意的是脚本/脚本名称和所有权的正确格式。请参阅:serverfault.com/a/754104 如果您每分钟都使用配置进行测试,例如*/1。你不会有问题。但是,如果您每天指定一个特定时间,我必须按照上面的说明应用正确的格式才能使其正常工作。
    • 我已经改用 PyEnv (github.com/pyenv/pyenv) 并且可能会在下次我必须使用 Crontab 中的 Python 时使用它,因为它极大地简化了 python 包和环境的管理。跨度>
    猜你喜欢
    • 2016-02-02
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2016-05-06
    • 2018-04-13
    • 2021-02-06
    • 2020-09-02
    相关资源
    最近更新 更多