在Flask Web服务中调用时,激活的conda虚拟环境未运行Python文件
我用conda创建了一个虚拟环境,现在想通过flask的接口调用来运行一个python脚本。但是代码没有执行成功,而如果我在终端里进入这个虚拟环境直接运行文件,它能在不到一分钟内完成。请问我可能漏掉了什么呢?
我的虚拟环境名称是:py311
我的调用代码是:
import flask
import requests
import json
import urllib3
import urllib.parse
from flask import request, jsonify,make_response
import subprocess
app = flask.Flask(__name__)
app.config["DEBUG"] = True
@app.route('/vl/<startdate>/<enddate>', methods=['GET'])
def gen2(startdate, enddate):
result_err={}
k=subprocess.getoutput(' /home/azureuser/anaconda3/bin/conda run -n py311 && python Ekal_Visit_Listing_Between_Dates_A.py ' + startdate +" " +enddate)
result_err['fname']=k
return make_response(jsonify(result_err),200)
if __name__ == "__main__":
app.run(host='0.0.0.0')
在浏览器中出现的错误是:
{
"fname": "\n# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<\n\n Traceback (most recent call last):\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/exception_handler.py\", line 17, in __call__\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/cli/main.py\", line 83, in main_subshell\n exit_code = do_call(args, parser)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/cli/conda_argparse.py\", line 196, in do_call\n result = getattr(module, func_name)(args, parser)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/cli/main_run.py\", line 96, in execute\n script, command = wrap_subprocess_call(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/utils.py\", line 448, in wrap_subprocess_call\n raise Exception(\"No compatible shell found!\")\n Exception: No compatible shell found!\n\n`$ /home/azureuser/anaconda3/bin/conda run -n py311`\n\n environment variables:\n CIO_TEST=<not set>\n CONDA_ROOT=/home/azureuser/anaconda3\n CURL_CA_BUNDLE=<not set>\n LD_PRELOAD=<not set>\n PATH=/home/azureuser/anaconda3/envs/py311/bin\n REQUESTS_CA_BUNDLE=<not set>\n SSL_CERT_FILE=<not set>\n\n active environment : None\n user config file : /var/www/.condarc\n populated config files : \n conda version : 24.1.2\n conda-build version : 24.1.2\n python version : 3.11.7.final.0\n solver : libmamba (default)\n virtual packages : __archspec=1=broadwell\n __conda=24.1.2=0\n __glibc=2.27=0\n __linux=5.4.0=0\n __unix=0=0\n base environment : /home/azureuser/anaconda3 (read only)\n conda av data dir : /home/azureuser/anaconda3/etc/conda\n conda av metadata url : None\n channel URLs : https://repo.anaconda.com/pkgs/main/linux-64\n https://repo.anaconda.com/pkgs/main/noarch\n https://repo.anaconda.com/pkgs/r/linux-64\n https://repo.anaconda.com/pkgs/r/noarch\n package cache : /home/azureuser/anaconda3/pkgs\n /var/www/.conda/pkgs\n envs directories : /var/www/.conda/envs\n /home/azureuser/anaconda3/envs\n platform : linux-64\n user-agent : conda/24.1.2 requests/2.31.0 CPython/3.11.7 Linux/5.4.0-1109-azure ubuntu/18.04.5 glibc/2.27 solver/libmamba conda-libmamba-solver/24.1.0 libmambapy/1.5.6\n UID:GID : 33:33\n netrc file : None\n offline mode : False\n\n\nAn unexpected error has occurred. Conda has prepared the above report.\nIf you suspect this error is being caused by a malfunctioning plugin,\nconsider using the --no-plugins option to turn off plugins.\n\nExample: conda --no-plugins install <package>\n\nAlternatively, you can set the CONDA_NO_PLUGINS environment variable on\nthe command line to run the command without plugins enabled.\n\nExample: CONDA_NO_PLUGINS=true conda install <package>\n"
用Curl调用这个接口也失败了:
curl 'https://afitraining.ekalarogya.org/vl/2024-01-01/2024-03-01'
{
"fname": "\n# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<\n\n Traceback (most recent call last):\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/exception_handler.py\", line 17, in __call__\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/cli/main.py\", line 83, in main_subshell\n exit_code = do_call(args, parser)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/cli/conda_argparse.py\", line 196, in do_call\n result = getattr(module, func_name)(args, parser)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/cli/main_run.py\", line 96, in execute\n script, command = wrap_subprocess_call(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/home/azureuser/anaconda3/lib/python3.11/site-packages/conda/utils.py\", line 448, in wrap_subprocess_call\n raise Exception(\"No compatible shell found!\")\n Exception: No compatible shell found!\n\n`$ /home/azureuser/anaconda3/bin/conda run -n py311`\n\n environment variables:\n CIO_TEST=<not set>\n CONDA_ROOT=/home/azureuser/anaconda3\n CURL_CA_BUNDLE=<not set>\n LD_PRELOAD=<not set>\n PATH=/home/azureuser/anaconda3/envs/py311/bin\n REQUESTS_CA_BUNDLE=<not set>\n SSL_CERT_FILE=<not set>\n\n active environment : None\n user config file : /var/www/.condarc\n populated config files : \n conda version : 24.1.2\n conda-build version : 24.1.2\n python version : 3.11.7.final.0\n solver : libmamba (default)\n virtual packages : __archspec=1=broadwell\n __conda=24.1.2=0\n __glibc=2.27=0\n __linux=5.4.0=0\n __unix=0=0\n base environment : /home/azureuser/anaconda3 (read only)\n conda av data dir : /home/azureuser/anaconda3/etc/conda\n conda av metadata url : None\n channel URLs : https://repo.anaconda.com/pkgs/main/linux-64\n https://repo.anaconda.com/pkgs/main/noarch\n https://repo.anaconda.com/pkgs/r/linux-64\n https://repo.anaconda.com/pkgs/r/noarch\n package cache : /home/azureuser/anaconda3/pkgs\n /var/www/.conda/pkgs\n envs directories : /var/www/.conda/envs\n /home/azureuser/anaconda3/envs\n platform : linux-64\n user-agent : conda/24.1.2 requests/2.31.0 CPython/3.11.7 Linux/5.4.0-1109-azure ubuntu/18.04.5 glibc/2.27 solver/libmamba conda-libmamba-solver/24.1.0 libmambapy/1.5.6\n UID:GID : 33:33\n netrc file : None\n offline mode : False\n\n\nAn unexpected error has occurred. Conda has prepared the above report.\nIf you suspect this error is being caused by a malfunctioning plugin,\nconsider using the --no-plugins option to turn off plugins.\n\nExample: conda --no-plugins install <package>\n\nAlternatively, you can set the CONDA_NO_PLUGINS environment variable on\nthe command line to run the command without plugins enabled.\n\nExample: CONDA_NO_PLUGINS=true conda install <package>\n"
而如果我在虚拟环境里运行这个,它能在不到一分钟内完成:
(base) myhost:~$ source activate py311
(py311) myhost:~$ python script.py '2024-01-01' '2024-03-01'
myurl/reports/19_03_2024_10_27_56_product_listing.xlsx
1 个回答
0
使用conda run命令的基本方法是:
conda run -n ENVIRONMENT COMMAND [arguments]
在这一行中,&&
的作用是把两个命令连接起来:
/home/azureuser/anaconda3/bin/conda run -n py311
python ...
第一个命令因为写得不对而出错,所以第二个命令根本没机会执行。
如果你想在不激活conda环境的情况下运行脚本,可以使用:
k = subprocess.getoutput(
f'/home/azureuser/anaconda3/bin/conda run -n py311 '
f'python Ekal_Visit_Listing_Between_Dates_A.py '
f'{startdate} {enddate}'
)