微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

conda 环境使用/调用不正确的 python 版本

如何解决conda 环境使用/调用不正确的 python 版本

我试图找到类似 here 的答案,但它们对我不起作用。

我有一个名为 py36 的 python3.6 环境。如果我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/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时使用的环境。

任何帮助将不胜感激!

谢谢!

解决方法

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

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

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

conda create --name appleslice python=3.6

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。