从crontab运行python时出现“无效的Python安装”问题

6 投票
3 回答
4012 浏览
提问于 2025-04-16 13:55

我在我的Linux电脑上安装了Python 2.7,现在想通过crontab来定时运行一个Python脚本。这个脚本在命令行下运行得很好,但通过cron运行时却出现了错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site.py", line 553, in <module>
    main()
  File "/usr/local/lib/python2.7/site.py", line 535, in main
    known_paths = addusersitepackages(known_paths)
  File "/usr/local/lib/python2.7/site.py", line 268, in addusersitepackages
    user_site = getusersitepackages()
  File "/usr/local/lib/python2.7/site.py", line 243, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/usr/local/lib/python2.7/site.py", line 233, in getuserbase
    USER_BASE = get_config_var('userbase')
  File "/usr/local/lib/python2.7/sysconfig.py", line 535, in get_config_var
    return get_config_vars().get(name)
  File "/usr/local/lib/python2.7/sysconfig.py", line 434, in get_config_vars
    _init_posix(_CONFIG_VARS)
  File "/usr/local/lib/python2.7/sysconfig.py", line 298, in _init_posix
    raise IOError(msg)
IOError: invalid Python installation: unable to open /usr/include/python2.7/pyconfig.h (No such file or directory)

我发现/usr/include/python2.7这个文件夹不存在,但/usr/local/include/python2.7/是存在的。我是在安装Python的时候犯了错误吗?

3 个回答

2

我假设在你的crontab文件里,你是给出了python可执行文件的完整路径,而不是仅仅依赖于she-bang和可执行权限。如果不是的话,请在crontab文件中指定完整的python2.7路径,并且在命令行中也使用同样的完整路径,这样可以确保你不会遇到这个问题。如果在命令行中也出现这个问题,那可能是缺少一些开发头文件。(你是不是在尝试编译一些东西,比如用setup.py build,并且想通过crontab来做?)我想了解一下这些头文件到底在哪些情况下需要。所以,除了上面的建议,提供更多的信息可能会有助于进一步解决问题。

2

你需要安装 python2.7-dev,这个包会安装一些必要的文件和头文件。

如果你用的是Ubuntu系统,可以通过运行 sudo apt-get install python2.7-dev 来安装它。你现在用的是什么Linux发行版呢?

3

你可能安装了两个版本的 Python,其中一个是坏的。如果你的定时任务(cron)直接调用了 python,而不是指定具体的路径,那么你的 PATH 变量可能是先包含了 /usr/bin,再包含 /usr/local/bin(这种情况很常见)。所以在你的定时任务中,最好明确指定要使用哪个 Python,或者把 /usr/bin 中的坏版本删掉,然后把好的 Python 通过链接的方式放到 /usr/bin/python

补充一下:刚刚重新看了一下,发现从命令行运行是没问题的。可能 python-dev 是更好的选择。抱歉!

撰写回答