简体   繁体   English

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

[英]conda environment using/calling incorrect python version

I've tried to find answers like the ones here , but they don't work for me.我试图找到像这里的答案,但它们对我不起作用。

I have a python3.6 environment called py36.我有一个名为 py36 的 python3.6 环境。 If I conda activate py36 and then run flask with如果我conda activate py36然后用

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

I get the following error:我收到以下错误:

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'

The issue isn't that there is no 'MySQLdb' installed, because it is installed under that environment.问题不在于没有安装“MySQLdb”,因为它是在该环境下安装的。

if I do conda list I get如果我做conda list我得到

mysql-connector-c         6.1.11               h42a37c1_0  
mysqlclient               1.4.6            py36h0a44026_0  

which confirms that mysql is installed on this environment.这确认在此环境中安装了 mysql。

and if I run python I get如果我运行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.
>>> 

which confirms that default python is 3.6.这确认默认 python 是 3.6。

As you can see everything is supposed to be python3.6, but the error comes from my python code for some reason launching python3.5 instead of python3.6.正如你所看到的,一切都应该是 python3.6,但错误来自我的 python 代码,出于某种原因启动 python3.5 而不是 python3.6。 I don't have any prefixes or any headers telling which python it is supposed to run.我没有任何前缀或任何标头告诉它应该运行哪个 python。

In fact this is the top of my main.py事实上,这是我的 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": "*"}})

In other words, my conda environment, which is supposed to safely contain a single python version (python 3.6), is failing to activate the correct python version inconsistently.换句话说,我的 conda 环境本应安全地包含单个 python 版本(python 3.6),却无法不一致地激活正确的 python 版本。

I'm scared to modify the paths but this is what I get if I echo $PATH我害怕修改路径,但这就是我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

The only way I fixed it is if I did the following:我修复它的唯一方法是,如果我执行以下操作:

conda activate /Users/USERNAME/anaconda
pip install pymysql

While this fixes my problem, it's a bandaid and it is not solving the issue.虽然这解决了我的问题,但它是一个创可贴,并没有解决问题。 Because the base environment is not the one I want to be using when I conda activate py36 .因为当我conda activate py36时,基础环境不是我想要使用的conda activate py36

Any help would be deeply appreciated!任何帮助将不胜感激!

Thank you!谢谢!

My suggestion would be for you to re-create your virtual environment.我的建议是让您重新创建虚拟环境。

Let's create a completely fresh virtual environment (let's call it appleslice for fun):让我们创建一个全新的虚拟环境(为了好玩,我们称它为appleslice ):

First, make sure you are not currently running in any virtual environment by executing deactivate .首先,通过执行deactivate确保您当前没有在任何虚拟环境中运行。 Then run this:然后运行这个:

conda create --name appleslice python=3.6

Then execute: activate appleslice and proceed to install all your required packages.然后执行: activate appleslice并继续安装所有需要的软件包。

If still stuck, have a look at this article .如果还是卡住,看看这篇文章

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM