从 PHP 导入 astropy 调用 Python


Import astropy calling Python from PHP

我想从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,代码按预期工作。

这是测试.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 ...")

当我打开测试时.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

你运行的是什么版本的 Astropy? 顺便说一句,我很确定这是一个已知且已修复的问题:https://github.com/astropy/astropy/pull/952

此外,当前版本的 Astropy 要求您指定库可以写入的配置目录。 它不一定知道/var/www 是用于 Web 服务器的正确"主"目录,因此您需要XDG_CONFIG_HOME=/var/www设置环境变量(确保 /var/www/astropy 目录也存在)。

我认为有计划简化这一点,以便该库至少可以在没有这种额外设置的情况下导入。