【发布时间】:2012-07-31 22:11:12
【问题描述】:
我编写了一个python脚本“thescript.py”,它导入“SHA256.py”,它们都在同一个目录“/thedirectory/include/”中。
我在 PHP 中:
chdir('/thedirectory/include/');
$result = exec('thescript.py argument1 2>&1');
这给了我结果:
Traceback(最近一次调用最后一次):文件“thescript.py”, 第 4 行,在 ? 导入 SHA256 文件“/thedirectory/include/SHA256.py”,第 152 行,在? 导入 _SHA256 ImportError: 没有名为 _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 行是在导入自身还是什么?
【问题讨论】:
-
_SHA256是一个真正的 python 模块吗?我在 google 中找不到任何关于它的信息,而且它不在我的 python 安装中。 -
我刚刚发现问题在于当我从 PHP 执行 exec() 时,
import hashlib确实失败了。但是当我从 shell 运行脚本时发现了 hashlib。所以我想我需要以某种方式添加 hashlib 路径。 -
_SHA256 与 SHA256 不同,它是一个不同的模块。前导下划线具有内部/私有的含义,但除此之外,下划线只是另一个字符。这段代码的语义是“我们更喜欢使用 hashlib 模块中的实现,但如果在这个环境中不可用,我们可以回退到 _SHA256 模块。”在您的情况下,两者都不可用。