【问题标题】:How does python use paths when a script is called using eval() from a php script and when the same function is called from a bash script?当使用 eval() 从 php 脚本调用脚本以及从 bash 脚本调用相同的函数时,python 如何使用路径?
【发布时间】:2020-03-20 01:49:25
【问题描述】:

我有一个可执行的 python 脚本,它使用 pymysql 库从 mysql 服务器存档数据。该脚本在命令行中运行良好。

我使用 escapeshellcmd 函数从一个 php 脚本调用这个脚本,我已经让它工作了。

我还创建了一个 bash 脚本,我打算从 crontab 中使用它来归档信息。通过进行下面概述的更改,我也可以使此脚本正常工作。

不知何故,我遇到了 python 版本和路径问题。

如果我包含

#!/home/tim/anaconda3/bin/python

作为 python 脚本的第一行,它在被 php 脚本调用时起作用(我相信使用 www-data 作为用户)。它在 bash 脚本或命令行中不起作用,出现以下错误:

  File "./signal_archive.py", line 22, in <module>
    import pymysql
ModuleNotFoundError: No module named 'pymysql'

但是,如果python脚本的第一行如下:

#!/usr/bin/python3

该脚本可从 bash 脚本和命令行运行,但不能从 php 脚本运行。它给出了以下错误:

  File "/home/tim/python/commodities_related/signal_archive.py", line 23, in <module>
    import pandas as pd
ModuleNotFoundError: No module named 'pandas'

这两个软件包都安装在我的系统上。考虑将脚本指向路径会有所帮助,我在 python 脚本中添加了以下内容,但到目前为止没有运气。

sys.path.append('/usr/lib/python3/dist-packages:')
sys.path.append('/usr/local/lib/python3.5/dist-packages:')

显然我缺少一些东西;我认为是www-user调用了php脚本,我不知道默认路径。我的用户使用 .bashrc 文件中指定的路径调用 bash 文件。但是,我可能需要指定 apache 或 php(www-user)来使用特定的 python 安装。

编辑- 更清楚地说,一个 php 脚本 (phpfile1.php) 调用了 python 脚本。当我从在 apache2 上运行的另一个 php 脚本 (phpfile2.php) 调用 phpfile1.php 时,我一切都使用

#!/home/tim/anaconda3/bin/python

当我从 bash 脚本中的不同 php 脚本 (phpfile3.php) 调用同一文件 (phpfile1.php) 时,它会失败。 此外,如果我使用以下命令运行该文件

./signal_archive.py

我得到了错误,但如果我使用以下命令运行它,它可以工作:

python signal_archive.py

如果这是正确的或如何做到这一点,有什么想法吗?谢谢。

【问题讨论】:

  • 您可以试试这个,保留与 php 一起使用的行 [/home/tim/anaconda3/bin/python] 并在从 bash 脚本调用脚本时使用相同的 python 路径并调用脚本. /home/tim/anaconda3/bin/python 。值得一试!

标签: python php linux bash


【解决方案1】:

我分两步解决了这个问题:

事实证明,我需要将 anaconda3 的路径添加到我的 .bash_profile 文件中。

export PATH="/home/tim/anaconda3/bin:$PATH"

安装 anaconda3 后,它会使用之前的代码 sn-p 修改 .bashrc 文件。但是 .bash_profile 在这种情况下有所作为。

我还修改了python文件的顶部以使用anaconda路径执行,以及添加特定python包的路径。

#!/home/tim/anaconda3/bin/python
import sys
sys.path.insert(1, '/usr/local/lib/python3.5/dist-packages')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多