我想从PHP(LAMP)运行Python脚本。该脚本导入了astropy,由于某种原因,我无法成功执行此操作。我可以使用下面复制的示例文件重现基本问题。我不认为这是一个权限或Python路径问题。例如,我可以导入numpy,scipy等。我还可以创建一个Python脚本来读取和写入同一目录(/ www / var)上的文件。我在/ usr / bin / python上有标准Python,还有Anaconda版本。两者都有熵,无论我使用哪一个,我都会遇到同样的问题。
我怀疑它是关于像我一样运行代码(工作正常)或www-data(来自Web浏览器)的东西。但是,当我从Linux终端执行此操作时:sudo -u www-data php test.php,代码按预期工作。
这是test.php:
<?php
echo "<p>begin test.php</p>";
system("python test.py");
echo "<p>end test.php</p>";
?>
并且test.py:
print("this is test.py ...")
import sys, numpy, scipy, matplotlib
print("passed the import sys, numpy, scipy, matplotlib ...")
import astropy
print("passed the import astropy ...")
我打开test.php时得到的是:
begin test.php
this is test.py ... passed the import sys, numpy, scipy, matplotlib ... ERROR: TypeError: coercing to Unicode: need string or buffer, NoneType found [genericpath]
end test.php
答案 0 :(得分:1)
你在运行什么版本的Astropy?顺便提一下,我很确定这是一个已知且已修复的问题:https://github.com/astropy/astropy/pull/952
此外,当前版本的Astropy要求您指定库可以写入的配置目录。它不一定知道/ var / www是用于Web服务器的正确“home”目录,因此您需要设置环境变量XDG_CONFIG_HOME=/var/www
(确保/var/www/astropy
目录也存在)
我认为有计划简单地这样做,以便在没有这种额外设置的情况下至少可以导入库。