You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

conda激活py36环境后运行flask调用错误Python版本问题求助

问题描述

我尝试查找过类似的解决方案,但都不适用于我的情况。

我有一个运行python3.6的环境名为py36,我执行conda activate py36激活环境后,运行如下命令启动flask:

export FLASK_APP=main.py
flask run --port=5050

随后收到如下报错:

Traceback (most recent call last):
  File "/Users/USERNAME/anaconda/bin/flask", line 6, in <module>
    sys.exit(flask.cli.main())
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 513, in main
    cli.main(args=args, prog_name=name)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 380, in main
    return AppGroup.main(self, *args, **kwargs)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args[1:], **kwargs)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 423, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 152, in __init__
    self._load_unlocked()
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 176, in _load_unlocked
    self._app = rv = self.loader()
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 237, in load_app
    rv = locate_app(self.app_import_path)
  File "/Users/USERNAME/anaconda/lib/python3.5/site-packages/flask/cli.py", line 90, in locate_app
    __import__(module)
  File "/Users/USERNAME/Documents/Google_Drive/Projects/project/main.py", line 3, in <module>
    import MySQLdb
ImportError: No module named 'MySQLdb'

问题的根源并不是未安装'MySQLdb',该依赖已经在py36环境中安装完成。

我执行conda list得到如下输出:

mysql-connector-c         6.1.11               h42a37c1_0  
mysqlclient               1.4.6            py36h0a44026_0  

这可以证明mysql相关依赖已经在当前环境安装完成。

同时我执行python得到的输出如下:

$ python
Python 3.6.1 |Anaconda custom (64-bit)| (default, May 11 2017, 13:04:09) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

这证明当前环境的默认python版本为3.6。

可见所有配置都应该使用python3.6,但报错信息显示代码实际调用了python3.5运行,我的代码没有指定python版本的前缀或头声明。

下面是我的main.py文件的开头部分代码:

from flask import Flask, request, render_template, jsonify
from flask_cors import CORS
from flask_pymongo import PyMongo
import MySQLdb
import json
import math
import pandas as pd
import numpy as np
from collections import OrderedDict
import pprint
import sys

app = Flask(__name__)
cors = CORS(app, resources={r"/*": {"origins": "*"}})

也就是说,本应独立运行python3.6版本的conda环境出现了激活后Python版本不一致的异常。我不敢随意修改环境路径,执行echo $PATH得到的输出如下:

>>>echo $PATH
/Users/USERNAME/anaconda/envs/py36/bin:/usr/local/opt/openssl/bin:/usr/local/opt/openssl/bin:/usr/local/opt/openssl/bin:/usr/local/opt/openssl/bin:/usr/local/fsl/bin:/Users/USERNAME/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands

我目前只能通过如下临时方法解决问题:

conda activate /Users/USERNAME/anaconda
pip install pymysql

但这只是权宜之计,没有解决根本问题,因为我激活py36环境时并不想使用base环境的依赖。

恳请各位帮忙定位问题,十分感谢!


解决方案

问题核心是你激活的py36环境内没有安装flask,执行flask命令时,系统在py36的bin目录下找不到对应执行文件,就会向后遍历PATH路径,最终调用了base环境下安装的flask,自然会使用base环境的Python3.5和对应的依赖库。

修复步骤如下:

  • 执行conda activate py36确保切换到目标环境
  • 执行conda install flask或者pip install flask在py36环境内安装flask
  • 安装完成后执行which flask验证路径,正常会返回/Users/USERNAME/anaconda/envs/py36/bin/flask,说明调用的是py36环境内的flask
  • 重新执行flask run --port=5050即可正常运行

这个方案完全基于py36环境的依赖,不会影响base环境的配置,也不需要修改系统PATH。


内容的提问来源于stack exchange,提问作者appleslice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 21:30:06