2009-12-18 101 views
1

我試圖在python中導入模塊時,只有當通過系統或exec調用腳本時,我有一個令人費解的問題。從PHP調用python導入失敗

從Python外殼:

import igraph #This works. 

假如上一行是在一個文件中,比如,test_module.py,則:在Bash
蟒蛇test_module.py工作。

在PHP:
EXEC( 「蟒蛇test_module.py」,$輸出,$ RETVAL) - >失敗:$ RETVAL = 1

但是,如果腳本來代替:import math,那麼這是精細。

有人曾經處理過類似的事嗎?

+0

add'import sys;打印sys.path'到你的腳本。 – jfs 2009-12-18 01:41:31

+0

'import os,site; print os.environ.get('PYTHONPATH'),site.USER_SITE;幫助(網站)'也許也有幫助。 – jfs 2009-12-18 01:47:25

+0

我在shell中或從PHP調用的腳本中看到sys.path沒有區別。 – 2009-12-18 01:56:38

回答

0

Python的標準模塊路徑中的igraph模塊,還是與您的個人腳本在同一目錄?如果是這樣,很可能PHP正在調用帶有不同工作目錄的python文件,並且它試圖相對於該路徑導入相關內容,而不是腳本的路徑。

+0

在python shell中: import igraph; print igraph .__ file__ returns /usr/lib/python2.4/site-packages/python_igraph-0.5.2-py2.4-linux-x86_64.egg/igraph/__init__.pyc 父目錄/ usr/lib/python2 .4/site-packages /在PHP腳本中調用時位於sys.path內。 python_igraph-0.5.2-py2.4-linux-x86_64.egg也在sys.path中。 – 2009-12-18 02:01:24

+0

您是否嘗試從命令獲取輸出(或者通過指定'exec()'調用的'output'參數,或者使用'passthru()'來確切地查看python從php調用時給出的錯誤? – Amber 2009-12-18 02:11:36

+0

我試過這樣做。它似乎沒有輸出Python錯誤消息,所以我不知道發生了什麼。但它的返回值爲1. – 2009-12-18 02:18:32

1

一件事是檢查sys.path

看出其中的差別是什麼所謂的每路

+1

如上所述。我看到sys.path之間沒有區別。 – 2009-12-18 01:58:54

0

發生這種情況,因爲你有一個不同的用戶下安裝這些包,也許根本,還是其他什麼東西的時候。

我怎麼調試這個,我檢查sys.path的輸出兩種情況下(shell和php的exec,它有默認的用戶www-data),比我都比較。

我注意到'/root/.local/lib/python2.7/site-packages'路徑丟失,當我從PHP中運行它時,它完全包含這些丟失的包。 所以我只是將這個文件夾的內容複製到'/usr/lib/python2.7/dist-packages/',這解決了這個問題。

+0

這是一個壞主意,手工複製python包。您應該使用'apt-get',將Python軟件包安裝到'/ usr/lib/python2.7/dist-packages /'中。否則,使用'pip'來安裝Python包(可能是'virtualenv')。你可能不想在'root'用戶下運行'pip'。 – jfs 2016-01-02 03:54:52