【问题标题】:FPDF ImportError: No module named fpdfFPDF ImportError:没有名为 fpdf 的模块
【发布时间】:2018-10-09 11:03:35
【问题描述】:

我正在尝试从 PHP 运行 python 脚本。 python 脚本从文本文件中读取内容并相应地创建 PDF。当我从终端运行 Python 脚本时,它运行良好,并且我得到了预期的所需 PDF。但是当我尝试从 PHP 运行 python 脚本时,它给了我以下错误:

Traceback (most recent call last): File "/home/amogh/server/test.py", line 3, in from fpdf import FPDF ImportError: No module named fpdf 

PHP 代码:

<?php
$output = shell_exec("/home/amogh/server/test.py 2>&1");
echo $output;
?>

Python 代码:

#! /usr/bin/python

from fpdf import FPDF
fp =  open('downloads/boot.txt', 'r')
pdf = FPDF()
pdf.add_page()
pdf.set_font('Arial', '', 11)
line = fp.read() 
pdf.multi_cell(200, 5, line, 0, 1)
pdf.output('test.pdf', 'F')

我已经使用这个命令安装了fpdf

pip install fpdf 

我在lighttpd 服务器上运行我的PHP 文件。谁能告诉我哪里出错了?

【问题讨论】:

  • @Pynchia 是的,我也试过了。仍然给我同样的错误
  • 你有没有试过检查直接从终端调用和通过PHP运行时使用的python解释器?下一步是比较两种执行方式的sys.path 的内容
  • @FlyingTeller 两种方式(PHP 脚本和终端)都显示相同的路径 /usr/bin/python。我还比较了sys.path的内容,都是一样的
  • 使用import fpdf: print(fdpf.__file__) 运行python 脚本时,它会打印什么?当您使用 php 运行 python 脚本时,路径是否也在 sys.path 中列出?
  • @FlyingTeller 路径似乎相同。我的代码现在可以工作了。我将服务器中的用户从www-data 更改为amogh

标签: php python python-2.7 ubuntu-16.04 lighttpd


【解决方案1】:

这可能是因为运行脚本的用户不同。我认为当您从 php 运行它时,它会以用户 www-data 的身份执行

也许您是从 virtualenv 运行 pip 或出于其他原因 www-data 用户无权访问 fpdf 模块。

编辑:

来自 cmets 的有用链接:

How to install Python Package for global use by all users (incl. www-data)

http://nocurve.com/2018/04/23/running-python-script-from-php-as-www-data/

【讨论】:

  • 如果是这种情况,我该如何将 fpdf 模块的用户更改为www-data
  • 我认为一种可能性是在终端中以 www-data 用户身份登录并运行 pip install fpdf 检查此链接,它们似乎相关:stackoverflow.com/questions/39471295/…nocurve.com/2018/04/23/…
  • 成功了!更改了我服务器中的用户.. 谢谢你:D
  • 太棒了!你能把答案标记为正确吗?有人反对它,但它是正确的。
猜你喜欢
  • 2013-03-11
  • 2012-12-07
  • 2012-05-23
  • 2019-07-29
  • 2015-07-04
  • 2014-03-15
  • 2017-12-29
  • 2014-09-12
  • 2017-05-09
相关资源
最近更新 更多