2012-07-31 415 views
0

我寫了一個python腳本「thescript.py」,它導入了「SHA256.py」,它們都在同一個目錄「/ thedirectory /包括/」。當使用PHP的exec()調用python腳本時,「ImportError:No module named _SHA256」

在PHP中我做的:

chdir('/thedirectory/include/'); 
$result = exec('thescript.py argument1 2>&1'); 

這使我的結果:

Traceback (most recent call last): File "thescript.py", line 4, in ? import SHA256 File "/thedirectory/include/SHA256.py", line 152, in ? import _SHA256 ImportError: No module named _SHA25

導致此錯誤的SHA256.py線所在的位置:

try: 
    import hashlib 
    hashFactory = hashlib.sha256 
except ImportError: 
    #from Crypto.Hash import _SHA256 
    import _SHA256 # <--- ERROR IS OCCURRING ON THIS LINE 
    hashFactory = _SHA256 

如果我從命令行通過SSH運行它運行良好。爲什麼它不能導入_SHA256?

說實話,我不明白包名前的下劃線是甚麼。

是否在「SHA256.py」中輸入自己的行import _SHA256

+0

是'_SHA256'實際Python模塊?我在谷歌找不到任何關於它的東西,它不在我的python安裝中。 – 2012-07-31 22:58:13

+1

我剛剛發現,當我從PHP執行exec()時,問題確實是'import hashlib'失敗。但是當我從shell運行腳本時發現hashlib。所以我想我需要以某種方式添加hashlib路徑。 – Olhovsky 2012-07-31 23:07:37

+0

_SHA256與SHA256不同,它是一個獨特的模塊。主要的下劃線有內部/私人的內涵,但除了下劃線只是另一個角色。這段代碼的語義是「我們更喜歡在hashlib模塊中使用實現,但如果在這種環境中不可用,我們可以回退到_SHA256模塊。」在你的情況下,沒有一個可用。 – 2012-07-31 23:18:09

回答

0

PHP運行的是python的錯誤版本。

這實際上是import hashlib這是失敗,但我沒有注意到這一點,因爲它在try塊,因此不會引起該線上的錯誤。

0

這是因爲在通過exec執行時路徑可能會有所不同。

檢查你的路徑,並同時通過exec命令在PHP執行Python

import sys 
sys.path 
相關問題