从crontab运行python时出现“无效的Python安装”问题
我在我的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 个回答
我假设在你的crontab文件里,你是给出了python可执行文件的完整路径,而不是仅仅依赖于she-bang和可执行权限。如果不是的话,请在crontab文件中指定完整的python2.7路径,并且在命令行中也使用同样的完整路径,这样可以确保你不会遇到这个问题。如果在命令行中也出现这个问题,那可能是缺少一些开发头文件。(你是不是在尝试编译一些东西,比如用setup.py build,并且想通过crontab来做?)我想了解一下这些头文件到底在哪些情况下需要。所以,除了上面的建议,提供更多的信息可能会有助于进一步解决问题。
你需要安装 python2.7-dev
,这个包会安装一些必要的文件和头文件。
如果你用的是Ubuntu系统,可以通过运行 sudo apt-get install python2.7-dev
来安装它。你现在用的是什么Linux发行版呢?
你可能安装了两个版本的 Python,其中一个是坏的。如果你的定时任务(cron)直接调用了 python
,而不是指定具体的路径,那么你的 PATH
变量可能是先包含了 /usr/bin
,再包含 /usr/local/bin
(这种情况很常见)。所以在你的定时任务中,最好明确指定要使用哪个 Python,或者把 /usr/bin
中的坏版本删掉,然后把好的 Python 通过链接的方式放到 /usr/bin/python
。
补充一下:刚刚重新看了一下,发现从命令行运行是没问题的。可能 python-dev
是更好的选择。抱歉!