在Flask Web服务中调用时,激活的conda虚拟环境未运行Python文件

0 投票
1 回答
22 浏览
提问于 2025-04-13 19:18

我用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]

在这一行中,&&的作用是把两个命令连接起来:

  1. /home/azureuser/anaconda3/bin/conda run -n py311
  2. 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}'
    )

撰写回答