2011-03-17 88 views
6

我在我的linux系統上安裝了python 2.7,我試圖通過crontab安排一個python腳本。該腳本工作正常,在命令行中,通過cron運行然而,當我得到:從crontab運行python的問題 - 「無效的Python安裝」

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時我犯了一個錯誤嗎?

+0

哪個Linux發行版? – 2011-03-18 03:24:24

+0

@Sridhar - Ubuntu – ripper234 2011-03-18 09:57:59

+0

這不會直接回答你的問題,但你有沒有嘗試過ActivePython 2.7 - 安裝到/opt/ActivePython-2.7? – 2011-03-18 17:23:03

回答

2

您需要python2.7-dev,它會安裝包含和標頭。

對於Ubuntu,您運行sudo apt-get install python2.7-dev進行安裝。你在運行什麼Linux發行版?

+1

但是Python在shell中工作得很好......從crontab運行它需要安裝其他東西,這沒有任何意義。 – ripper234 2011-03-18 09:59:02

+0

'/ usr/include/python2.7/pyconfig.h'是一個C++頭文件。 'python2.7-dev'安裝頭文件和其他東西,你需要使用Python的C++庫來編譯東西,這就是你的'crontab'所做的事情。 – Blender 2011-03-18 14:34:50

+0

不太可能; 「導入網站」在Python啓動時發生。在這裏,Ubuntu的Python上的sysconfig模塊正在發生一些奇怪的事情。/usr/local的Python正在閱讀/ usr /的include/dirs ...這是不正確的。 – 2011-03-18 17:20:52

3

您可能只安裝了2個版本,其中一個版本已損壞。如果你的cron只是直接調用python,而不是一個特定的路徑,你PATH可能包含/usr/bin之前/usr/local/bin(這是典型的) - 所以在你的cron,指定要使用的Python或移除現有的/usr/bin和符號鏈接/path/to/good/python/usr/bin/python

編輯︰劃傷,只是重新閱讀,並看到它從命令行工作正常。 python-dev可能是要走的路。抱歉!

+0

'$ PATH'定義了系統查找二進制文件的位置,但我不確定python是否可以通過它的二進制可執行文件發出它的頭文件的位置...... – Blender 2011-03-17 22:27:36

+0

這是我誤讀的一部分 - 我在說他的cron可能只是使用了錯誤的python二進制文件,因爲錯誤的文件在'$ PATH'中是第一個。看到它在命令行上工作使得無效。 :) – mway 2011-03-17 22:28:39

2

我假設在您的crontab文件中,您提供了python可執行文件的完整路徑,而不僅僅依賴she-bang和可執行權限。如果沒有,請指出crontab文件中的全路徑python2.7,並在命令行中使用相同的完整路徑以確保您不會遇到此問題。如果您也在命令行上獲得了此路徑,那麼它可能會丟失一些開發標題。 (你想編譯一些東西,如使用setup.py構建,並試圖通過crontab來做到這一點?)我想了解哪裏需要這些標題。所以,除了上述建議之外,來自您最終的額外信息可能會進一步幫助您。