我试图在共享服务器(BlueHost)上从php执行一个python脚本(称为Filename.py)。python文件执行简单的web刮取,然后返回输出。我的代码看起来像这样
PHP文件
<?php
$url = 'example.com';
$command = escapeshellcmd("python ../cgi-bin/filename.py $url");
$output = exec($command);
echo $output;
?>
Filename.py
# Import libraries
import sys
import requests
from bs4 import BeautifulSoup
#capture url passed from php
url = sys.argv[1] # <= url from
#use python and beautifulsoup to scrape the specified webpage
html_text = requests.get(url).text
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
Scrape = soup.find(...scrape logic...).text
#send result back to php
print(Scrape)
这段代码在我的桌面测试服务器上运行。也就是说,我可以执行php文件,它将运行python脚本,捕获web scrape的输出,并在我的web浏览器中显示它
但是,它在我的webhost服务器(BlueHost)上不起作用。我可以让这两个文件互相对话(例如,如果我在Filename.py中注释掉beautifulsoup逻辑,我可以让php文件将url文本发送到.py文件,我可以让.py文件将其复制回来,然后在web浏览器中显示)。所以我认为我的问题在于Python库
由于这是一个共享主机服务器,我无法安装pip或任何python库(如请求或Beauty soup)。但是,我可以安装python的本地版本(例如,升级到3.8.5而不是在BlueHost上运行标准版的2.7.5),并且我可以将库本地安装到我的BlueHost帐户,这是我根据以下指南完成的
https://www.bluehost.com/help/article/python-installation
http://thelazylog.com/install-python-as-local-user-on-linux
现在,在我的BlueHost SSH终端中,当我键入:
python --version
=>;我明白了Python 3.8.5.
which python
=>;我明白了home1/myusername/python/Python-3.8.5/python
python
=>;Python 3.8.5已经发布which pip
=>;我明白了home1/myusername/.local/bin/pip
pip list
=>;我看到一个库列表,包括我需要的requests
和beautifulsoup4
对于我的.py脚本李>尽管如此,python脚本似乎仍在针对2.7.5版运行,并且它无法访问我安装的库。具体来说,当我注释掉Filename.py
中的request
和beautifulsoup
逻辑,并用
print(sys.version_info)
我可以看到python脚本仍在针对python 2.7.5运行;不是3.8.5或我安装的库
我被卡住了,欢迎来自Stack Overflow社区的输入
如何使Filename.py
脚本在本地安装的Python版本和库上运行?库是关键,因为我相信我可以用Python 2.7.5解决这个问题
最后一点注意——我有python库文件的副本。我相信有一种方法可以将它们放在与我的.py文件相同的目录中,并在每次脚本运行时手动导入它们(而不是在服务器上安装它们)。但我不确定如何做到这一点,或者是否有更好的解决方案
提前感谢您的帮助
目前没有回答
相关问题 更多 >
编程相关推荐