【问题标题】:conda environment using/calling incorrect python versionconda 环境使用/调用不正确的 python 版本
【发布时间】:2021-09-20 18:15:29
【问题描述】:

我试图找到像 here 这样的答案,但它们对我不起作用。

我有一个名为 py36 的 python3.6 环境。如果我conda activate py36 然后用

运行烧瓶
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',因为它是在那个环境下安装的。

如果我这样做 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,但由于某种原因,错误来自我的 python 代码,它启动了 python3.5 而不是 python3.6。我没有任何前缀或任何标题来告诉它应该运行哪个 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": "*"}})

换句话说,我的 conda 环境应该安全地包含单个 python 版本(python 3.6),但无法不一致地激活正确的 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

虽然这解决了我的问题,但它是一个创可贴,并不能解决问题。因为基础环境不是我conda activate py36时想要使用的环境。

任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 我与conda 的合作不多,更多的是pip 用户,但是您是否尝试过从Python 会话中导入该库?它说什么?
  • which flask 的输出是什么?
  • @Cerberton 你是什么意思 Python 会话,比如在笔记本中?事实上,当我在 conda 环境中时,我确实尝试使用 pip(或 conda)(这是我一直在做的)@Matt 这就是我得到的which flask/Users/USERNAME/anaconda/bin/flask
  • @appleslice - 我将从您的虚拟环境开始,这似乎是这里的问题。我建议创建一个全新的虚拟环境(我们称之为“appleslice”)conda create --name appleslice python=3.6,然后执行activate appleslice 并继续安装所有需要的软件包。我认为这是解决这个问题的最佳方法。
  • which flask 的输出是这里调试的关键,它很可能是在不同的 conda 环境中拾取烧瓶。在这个 conda 环境中安装烧瓶可能会解决问题。

标签: python virtualenv conda


【解决方案1】:

我的建议是让您重新创建虚拟环境。

让我们创建一个全新的虚拟环境(我们称之为appleslice 好玩):

首先,通过执行deactivate 确保您当前没有在任何虚拟环境中运行。然后运行:

conda create --name appleslice python=3.6

然后执行:activate appleslice 并继续安装所有需要的包。

如果仍然卡住,请查看this article

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多