Anaconda Pycharm 是怎么回事儿?是什么?什么关系?

前言

许多人学习Python的经历可能很相似,写程序没有问题,最后却被各种环境困扰。

不论你是Python小白,还是学习Python有一段时间了。都可以认真的看一下ヾ(≧▽≦*)o

这篇文章让你对Anaconda Pycharm理解更透彻。或许会有新的发现哦!

小故事

王二喜,男,性别不详。程序员一个,头发一打。

"这年头多会一门语言就是多会一门手艺,技多不压身" 王二喜摸了摸自己未来的口袋,有了学习python的心思。

去Python的官网下载,安装。出于程序员天生对于事物的控制感,王二喜打开了Python的安装路径。一个python.exe 以及 pythonw.exe(IDLE 的一个组成部分),更复杂的路径里还有pip.exe。王二喜摸了摸眼镜说:“结构清晰,文件精简”。转身便投入到语法的海洋中去,领会其中的水深火热。一句语法,一份力量。

简简单单,几天过去了...

王二喜很喜欢使用原生的IDLE。 这里可以方便的测试各种Python语法。这期间命令行里输入python pip ,误打误撞的学习过程中也安装了许多的库文件,方便了自己的编程。

天气晴朗,昨夜刚下了一场雨。

王二喜坐在电脑面前看着一篇博文《Python AI 手写数字识别》,什么神经网络,数据集,模型。所有的代码竟然不到100行。王二喜立刻照着代码,自己实现了一下。不错,程序可以运行,可是很多关于 Deep Learning 的概念王二喜并不是很懂。王二喜决定找个教程学一学。

教程A Anaconda。教程B Anaconda。教程C Anaconda。世界就是这么循环往复,学习永不停止。

Anaconda 科学计算,方便包管理。王二喜根据一些教学视频,安装下来。一个良好的环境是心情美丽的开发起点。

Anaconda安装成功后的测试中,王二喜在命令行输入Python,发现出现的并不是老相好原生python。而是新上任的Anaconda里的Python。

同时原生的pip也不可以使用了。王二喜大惊失色:“不会我原来的程序都不能运行了把。”

Python 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated.  Libraries may fail to load.  To activate this environment
please see https://conda.io/activation

Type "help", "copyright", "credits" or "license" for more information.
>>>123
123
>>>exit()

王二喜感觉身体有点麻,不是全麻的那种,因为他还有部分感觉。

还好这场面这几年来见过不少”大场面“,原生Python IDLE 是可以继续使用的。王二喜立刻调整了心态。身体的麻感也渐渐消失了...接着进行了Anaconda的探索。

电脑里出现了很多最近添加,王二喜点击Jupyter,出现一个网址,点进去发现很不错。那Spyder 又是什么呢。点击了半天,发现并不可以使用打不开的

王二喜并不清楚来自远古的冰河世纪的麻感,渐渐的,渐渐的,向他围拢了来...

点击Navigator,原来图形界面在这里啊!launch一下jupyter,这东西也不动

创建一个新环境,只是走进度条,最后没有结果

”我这安装了一个什么东西?“王二喜在网上开始了漫漫的求解之路,此去山长水远,少小离家老大回。为什么视图界面不可以运行Jupyter Spyder。这个问题他一辈子都没有解决,不断的试错加深了他的麻感....

王二喜对Anaconda并不感冒,编写程序还是喜欢使用原来的IDLE。就这样又编了一段时间。

直到刚开始要接触一些大的项目用到Pycharm

初秋的夜,天气已然微凉。王二喜感到嘴唇发麻,因为他喜欢白色的烈酒搭配红色花椒粒。风很冷,这酒却是暖暖的。王二喜打开电脑,开始今天的学习之旅。

正常安装Pycharm后,开始创建项目,什么是 venv? 什么是 interpreter? 为什么要选择interpreter?王二喜一脸疑惑。没有答案,同时不知不觉中腿麻了。

现在,王二喜开始接触到虚拟环境了。知道在虚拟环境中安装或者删除的包,对于真正的Python全局来说并不影响。而且一个新的虚拟环境只有三个包,很干净。

王二喜兴奋的按照教程创建出了自己的虚拟环境。

interpreter是解释器。二喜把自己原生的python.exe 放了上去。

创建成功,但是爆出了一个错误

Invalid Python SDK
cannot set a python SDK at Python 3.10(PythonProject)(F:\Code\PythonProject\venv\Scripts\python.exe)
The SDK seems invalid

二喜心里一惊同时屁股麻了,这是什么东西?顺手点击了OK。这事儿也就过去了。样例程序也可以运行。

迫不及待的试一试,找到了可以查看包的位置,二喜又一次瞪眼了,哪里有之前的说的简单的三个包啊,这**是把咱老Python的包给偷过来了了啊,坑爹啊。(瞪眼)

二喜站在哪里傻傻的说不出话来。整个上半身顿时麻感就涌上来。

王二喜挺住啊!

有没有可能已经是虚拟环境了,与外界隔离了,只不过初始的包库是在原来的基础之上。二喜对它还是有期待的。

二喜在包列表里找了个不那么重要的包,像抓一只即将离开人世的小乳猪,他叫h5py。

打开原来的IDLE,import h5py print(h5py)。h5py高兴的不得了,他输出了自己的信息。转瞬二喜又到了pycharm里卸载了h5py....

这毕竟也是第一次在pycharm里卸载包,二喜还有点小兴奋。

二喜很喜欢这个虚拟环境的功能,对于这种隔离,二喜vmware里已经尝到不少甜头。

打开原来的IDLE

import h5py
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import h5py
ModuleNotFoundError: No module named 'h5py'

多天的深夜程序编写,一直报错的项目环境,小猪猪的离奇死亡....

这一切的一切...

二喜胸口发闷。突然!!!世界一片漆黑,二喜再也没有忍住,麻倒在地不省人世。嘴里念叨着我的h5py小猪猪啊,呜呜呜。

谁也不知道二喜与h5py的深厚感情....

看到这里很多同志都想起了当年了吧(~ ̄▽ ̄)~

一些拙见

我们想要一个Python环境。只需要安装Anaconda + Pycharm即可

原生的Python环境和Anaconda环境会有冲突。

原生Python的 python pip 是放到用户环境变量

但是Anaconda也有这些命令。

Anaconda的 python conda pip安装时是直接放到系统环境变量

这里说一下环境变量。在命令行里我们要运行一个可执行xxx.exe程序,最常用的做法就是切换到这个程序所在的文件目录,键入 xxx就执行了。这样很麻烦,若我们将这个程序所在的文件目录直接放到环境变量里,不论在那个文件目录下,我们都可以键入xxx即可运行。

在Anaconda 和 原生Python之间现在出现了命令冲突。你运行python pip ,操作系统怎么分辨这是哪位大爷的程序?

答案是系统环境变量优于用户环境变量。

二喜运行python pip 的这些命令都是Anaconda里的。

原生Python这下就遭殃了。python pip 这些重要的命令用不出来,它就很麻烦。而且匹配pycharm的时候,用原生python创建虚拟环境就会出现创不出来的情况。虚拟环境只能匹配原生的一切配置用到所谓的虚拟环境了。这已经不是虚拟了。

这时你试一试用Anaconda的解释器去配虚拟环境。同样是解释器,Anaconda却能正常的创建虚拟环境。

因此原生Python就失去了用物之地。很多人就蒙了,认为没有原生python就没有IDLE执行程序。

我们先说说原生python的特点,体积小巧,可以执行python程序(python.exe)的功能,一个pip。最重要的是有一个自带的IDLE。绝大多数人最初编写的程序都通过它运行。大家可以在这里确认一些语法和算法问题,很方便。

可我们看看Anaconda。

安装上不生不响,虽然有一个jupyter可以使用类似IDLE的功能,但真的不太顺手。Anaconda给人的第一印象就是,庞大的自带科学计算库,AI必用。

可是它还有一个重要的功能,分割各种Python环境,类似于我们的虚拟环境。在一个Anaconda里你可以创建无数的环境。这环境由一个类似完整独立的python组成,这里的独立还包括对应的库环境,如果你去看它的目录结构,同一个原生的python几乎一摸一样,例如我创建了一个python3.7的环境,这里可以使用python3.7,我又在这里pip一个Requests包。过几天我又创建了一个python3.9的环境,我在这里pip一个Tensorflow包,这两者是不相关的。这个功能与Pycharm配合会更好。

这些个环境可以通过Navigator来实现,存放在Anacnda安装目录里的evns目录里。

很多人还是一头雾水,这有什么用?还不如我一个python IDLE好用。我必须保留原生的python。这是很多人对于原生Python的一个执念。

这里又要说一个事儿。

Anaconda真是一个闷葫芦。它自带了python IDLE。 在安装后却没有像jupyter那样明显的显示。太败家了。

原生python IDLE

IDLE (python 3.7.4 64-bit)
目标
C:\Users\hp四核\AppData\Local\Programs\Python\Python37\pythonw.exe "C:\Users\hp四核\AppData\Local\Programs\Python\Python37\Lib\idlelib\idle.pyw"

而Anaconda的在哪里?和着这个一摸一样啊!

右键桌面空白,新建,快捷方式。目标,还可以自己起一个名。

"F:\ProgramData\Anaconda3\pythonw.exe""F:\ProgramData\Anaconda3\Lib\idlelib\idle.pyw"

image
说到这里,原生Python有的没的Anaconda都是有的。为什么还揪着原来的python不放?

卸载原生Python注意如果以前改过解释器名称的,改回来才可以正常卸载。

所以一个完整的python环境

只需要安装Anaconda + Pycharm即可。

1 Anaconda使用

由于 很多人在 Anaconda Navigator 界面遇到很多问题。建议直接放弃视图界面。

这里介绍命令方法使用Anaconda。

1.1 查看conda版本

conda -V		
4.10.1

1.2 查看各种虚拟环境

conda info -e		
# conda environments:
#
base                  *  F:\ProgramData\Anaconda3

1.3 创建一个虚拟的 python3.7环境 名字叫enviroment_name

conda create -n enviroment_name python=3.7

文件在Anaconda3\envs

虚拟环境 python3.7 与 原生python3.7 完全一致

你甚至可以利用快捷方式创建一个虚拟环境 python3.7的IDLE。与上面的方法一致。

1.4 虚拟环境的进入与退出

# To activate this environment, use
#
#     $ conda activate py37
#
# To deactivate an active environment, use
#
#     $ conda deactivate

这两条命令可以随时进入(退出)这个虚拟的环境,一旦进入,任何操作都与整体Python环境无关。包括下载包。

可以看到这个环境里只有四个包。很简单。

(py37) C:\Users\hp四核>pip list
Package      Version
------------ -------------------
certifi      2021.5.30
pip          21.0.1
setuptools   52.0.0.post20210125
wheel        0.37.0
wincertstore 0.2

1.5 虚拟环境的删除

conda remove -n py37 --all

删除所有的环境相关文件。

1.6 Pycharm利用Anaconda的虚拟环境

Pycharm是自带虚拟环境功能的。即Virtualenv。不过他需要一个base interpreter,来构建整个虚拟项目。整个项目的Python版本依赖于base interpreter的python版本。不过在Virtualenv里的一切操作不会影响到你base interpreter的环境。从base interpreter这里就看到一个问题,我只有一个python3.9的解释器,也就是自己安装的。但是我们的项目需要python3.7这时候就束手无策了。

Anaconda的虚拟环境是 我每一个虚拟环境都是一个完整的python版本(有解释器,有对应的库包资源)。各个虚拟环境之间相互独立。可以在你电脑里安装100个独立的Python版本,对应100个解释器。eg:pyhton3.7 3.8 3.9。

两个配合将是绝杀。

这里讲如何在pychrm利用Anaconda的虚拟环境。注意使用anconda的虚拟环境环境的解释器。

Interpreter是Python的解释器,运行Python需要解释器的帮助。

例如在CMD里键入Python就是调用这个解释器。解释器会依赖其中的Python版本信息,来解释你的代码。

任何高级语言都需要解释器,也都有解释器。

interpreter 英 [ɪnˈtɜːprətə(r)] 美 [ɪnˈtɜːrprətər] n. 口译译员;口译工作者;演绎(音乐、戏剧中人物等)的人;解释程序

1.6.1 选择 Previously configured interpreter

如果点击使用Anaconda新建环境,你可以选择Python的版本,然后Pycharm会从网络上拉取对应的python版本。不过版本拉取可能会受到网络影响。

这里我们用已有的就行了,省一些步骤。我们现在有一个原生的 Anaconda的解释器,还有一个Anaconda生成的虚拟环境py3.7版本的解释器。

image

1.6.2 添加Anaconda的虚拟环境解释器

这里等一会儿就行了,他会自动寻找。其实就是虚拟环境里的Python解释器。

image

1.6.3 Create

这就成功创建了一个基于Anaconda的虚拟环境解释器的Python项目。

我们打开设置

看一下环境的包

image

哪怕有了Pycharm Anaconda的包最好还是在你的命令行里直接安装比较好。比较方便的使用方式使使用pycharm的terminal,并且在其中激活我们的虚拟环境。

2 Pycharm使用

2.0 编译

C语言要想运行就必须要有gcc编译器,C++运行就必须要有g++编译器。任何语言的运行都需要编译器的帮助,将高级代码转换成计算机可以看懂的机器代码。可是这些语言在创建运行时,我们离他们的编译器很远。他们藏在一些大型编译环境的深处。

高级语言代码的转换有两种形式。

  1. 编译程序,在没有将整个程序全部翻译完之前,程序不可以运行。编译和运行是两个分开的阶段。c++ c

  2. 解释程序,一旦一个语句分析结束,程序就立刻运行并产生结果。lisp python php

程序的解释是非常慢的,有时一个高级语言的源程序的解释会比运行等价的机器代码慢100倍!另外,解释程序的空间开销也比较大。

有些语言 java,既有解释器,也有编译器。以便用于不同的场景。

python由于语言特性版本多样。他需要在创建一个项目的同时,指定一个Python的解释器。

你在命令行运行Python程序的时候 python test.py,其实也是指定了一个解释器。希望大家能够理解这层关系。

pycharm的一大优势就是虚拟环境。根据一个Python的解释器,在项目目录里生成一个虚拟的环境,这个虚拟环境中初始只有几个库包,任何对于库包的添加和修改,都不会影响到真实的解释器中的库包,但其实真实和虚拟环境用的是一个解释器。

Interpreter 就是 python.exe

2.1 虚拟环境创建 Virtualenv

选择 New environment using Virtualenv 外加一个解释器Interpreter就可以了,下面图片用的是Annaconda自带解释器。

image

解释器使用anaconda的虚拟环境中的 python.exe也是可行的。

image

虚拟环境是很干净的,只有三个包。完美的使用了anaconda提供的python3.9。

注意,在Terminal里对这个环境的使用需要激活。

cd .\venv\Scripts\
activate

2.2 项目的共享

你编写了一个程序,下载了许多包。程序只有1 m,而项目的包却有100 G。突然你想把这个项目上传到网上。

这个100 G的东西压缩都需要不少时间。有什么更好的办法呢。

2.2.1 制作依赖文件

在项目的Terminal进行环境的激活,激活后。

pip freeze > requirements.txt # 将项目的虚拟环境包的依赖放入requirements.txt

这样你只需要将这两个文件发送给他人即可

code.py
requirements.txt

2.2.2 使用有依赖文件的项目

创建一个新项目,使用一个新的虚拟环境。放入code.py requirements.txt

在项目的Terminal运行

pip install -r requirements.txt

就会下载里面的包。制作一个一摸一样的环境。

pip利用国内阿里云源 更加快速的下载包
pip install -i http://mirrors.aliyun.com/pypi/simple/ pandas

文章可能发生改动。一些网站会爬取本文章可能会有出入。
https://www.cnblogs.com/asmurmur/

posted @ 2021-08-27 19:13  Dba_sys  阅读(975)  评论(0编辑  收藏  举报