使用从php导入的非标准库*调用python script*

2024-09-26 18:13:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我搜索了所有相关的问题,有很多类似的问题,但我的问题是

如何从php调用python脚本,我在其中导入了一些非标准库/模块

更具体地说,我有一个.py文件,测试.py,其中我导入了pycurl和botternose,这是一个amazonapi包装器。两个模块都不在标准库中。所以文件看起来像

import pycurl
import bottlenose
...
print "hello!"

然后我做了一个php文件,测试.php在

^{pr2}$

两者兼而有之测试.php以及测试.py在同一目录下。更重要的是如果我跑

php test.php 

在我的终端中,没有问题。成功输出“hello”,返回代码为0,表示程序无错误退出

但是,当我在我的浏览器上测试它时,www.someurl.com/test.php,出现了一些错误。我逐行跟踪,发现错误发生在“import pycurl”和“import bottlenose”。在

我也试着打印出来搜索路径,它确实包括宽吻的路径。在

有人能帮忙吗?在

谢谢!!在


Tags: 模块文件pytestimport路径脚本hello
3条回答

通常,您不以my_user_name的身份运行web服务器,而是以httpd或{}或{}等特殊用户的身份运行。而且该用户可能没有权限读取您安装的Python模块,这当然会导致导入失败。在

若要测试此项,请尝试在导入之前打开它:

try:
    with open('/path/to/bottlenose.py', 'r') as f:
        print('Opened file just fine')
except Exception as e:
    print('Failed to open file: %s' % (e,))

当然,如果print在您的设置中不能有效地工作,无论您如何打印出sys.path,请在此处执行相同的操作。在

如果这不是问题所在,您可以尝试将导入包装在一个try块中,以打印出异常并查看它失败的原因,因此我们不必猜测。在

如果问题出在上,那么快速和肮脏的解决方案是让您的web服务器帐户通过chmod访问用户的Python modules目录,但更好的解决方案是将这些模块安装到系统范围内的site packages目录中,或者安装到web服务器帐户拥有的目录中。在

对你的案子来说可能太重了,但你考虑过virtualenv吗?在

我相信系统路径如果在调用Python程序之前在php脚本中调用putenv,则是正确的。在

从成功的运行,抓住机会打印搜索路径. 我们把这个打印结果称为“x”。然后,尝试以下操作:

putenv('PYTHONPATH=x');
exec("/home/my_user_name/local/Python-2.7/bin/python test.py", $output, $ret_code);

这有帮助吗?在

相关问题 更多 >

    热门问题