python之环境切换问题实践总结

前言

这个标题是实践总结,为什么呢,因为这个问题困扰了我整整一个月,都没有解决。现在终于解决了,写一篇文章记录一下,也看看有没有小伙伴遇到一样的问题,或者在我下次还会发生这样的实情事可以第一时间解决,幸好不着急,不然就g了。

问题描述

就是我在暑假用python做了一个网页,这也是我学python以来第一个 大项目,做完之后,电脑太卡了,太乱了。然后就把电脑恢复出厂了,想着项目我已经做好了电脑再怎么折腾都会运行的,可是,等我把软件,环境全部装好之后,就发现好多报错。也不是报错,好多提示,一会是这个库没有安装,一会是python没有解释器。

库没安装,好办,我去安装,这一次我聪明了,做我恢复之前我搜过一个技能,怎么把项目中用到的库导出来,

pip freeze > requirements.txt

这个命令,可以把当前环境或者项目用到的第三方库全部导出来放到一个requirements.txt文件里面,方便下次一次性安装。

那我接下来安装

pip install -r requirements.txt

我安装完了。没有解释器,那我自己配置一下,但是还是提示我没有安装模块,但我我真的是确确实实安装了。

解决方案

最后我解决了,怎么解决的,归根结底还是我环境弄得不对,因为我学习的大数据,老师让我们使用anaconda。因为这个软件我用了半年了,大致有个了解,就是个python的发行版本。这一次直接给电脑安装了anaconda,没有安装python。

先说一下我的问题,我确确实实安装了第三方库,但是我错了,我把环境弄错了,我做的项目和我安装第三方库的不是一个环境。怎么理解呢,我住在这个房间,但是我把东西放在了那个房间。这么一来,我为什么找不到我的东西,因为我放错地方了。而且我百度,还创建好多没用的环境

然后我又安装python、卸载python,安装anaconda,卸载anaconda。来回横跳,就是不行

然后最近又在捣鼓一个东西,这里我大致了解了一些python环境相关的知识。今天,2022,10,31日解决了。今天是万圣节。

我记录一下解决过程

anaconda

介绍

一开接触这个,弄得我一头雾水,现在学习了快一年了,基本明白了。

先看一下百度百科对anaconda的解释

Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpypandas

Miniconda包括Conda、Python

conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换

我用了这么久我来说一下这是什么意思

这是python的升级版,pro版

一大堆的安装好的工具包,就是说在没有使用anaconda的时候,我们使用一个第三方库,都有先pip install一下。是不是觉得很麻烦,我就想过这个问题,有没有什么方法可以不用安装这些库,自动就安装好,我一用pip就会报错。而anaconda对于像数据分析用的numpy、pandas等等这些工具包,不需要我们额外安装。已经带好了

conda是什么事,就是用来管理包的工具,其实和pip一样。我看好多文档,这是conda下载的比较全面,这个我具体不知道。

python,如果你觉得是python的解释器,那就对了一半,还有一半,现在python3.11都出来了,在我们之前安装的时候,就只能安装python的一种版本,但是anaconda不一样,你可以用python的各种版本,3.x、2.x来回切换。

这里就提到了一个虚拟环境,一开始我也是不明白,是这样的

我们现在用多个项目,那我就可以为每一个项目创建一个工作环境,对,虚拟环境也可以理解为工作环境。让这个项目只在属于自己的环境下开发,这时我们就可以每一个工作环境创建不同的python版本。各自版本的第三方库互不干扰。

anaconda,现在我用习惯了,都觉得很方便

因为提供了虚拟环境,所以也不用安装python了,这个里面就已经有了,但是要学会配置。

  • 更新anaconda

    conda update anaconda
    

环境管理

查看anaconda版本

conda -V

注意这个V要大写。这一步也是检测anaconda有没有安装成功的重要方法

查看所有虚拟环境

conda env list

conda info -e

conda info --envs

查看当前有哪些 虚拟环境,这里我要演示一下

(base) PS C:\Users\huan> conda env list
# conda environments:
#
base                  *  D:\anaconda3

base 是环境名称,D:\anaconda3是环境的安装位置

如果是新安装的anaconda,那么默认有一个base环境,

怎么看当前的环境,有两种方法,第一种,在我们列出所有环境扽时候,会有一个星号*这就是当前环境。

第二种,我们看这里(base) PS C:\Users\huan> ,其中(base) 就是我们选择的环境

创建环境

conda create -n <env_name> <python=version>
  • <env_name>:环境名称

  • <version:python>:的版本

  • 举例

    conda create -n test python=3.11创建一个虚拟环境,名字是test,用的是最新的python。3.11

    会有一个提示,输入y即可。Proceed ([y]/n)?y

激活当前环境

conda activate <env_name>

刚才创建了个test环境,那我就选择这个环境。 conda activate test

怎么检查python的安转版本是否正确。

(test) PS C:\Users\huan> python
Python 3.11.0 | packaged by conda-forge | (main, Oct 25 2022, 06:12:32) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

也可以通过这里查看环境有没有切换成功:(test) PS C:\Users\huan>(test)

在命令行输入python。Python 3.11.0就是python的版本。

输入python后,会进入python的环境,但是现在用不到python。所以exit()退出

(test) PS C:\Users\huan> python --version
Python 3.11.0

刚刚搜索,这样也可以查看python版本

python --version

退出环境

conda deactivate

复制环境

conda create --clone <old_env_name> -n <new_env_name>
  • <old_env_name>:被复制的环境名

  • <new_env_name>:新环境的名

  • 举例

    conda create --clone test -n test_new复制test环境并且重新命名为test_new

删除环境

conda remove --name <env_name> --all

在删除环境时,一定要先退出要删除的环境,conda deactivate

注意,在删除环境时,会有一个防误删操作,有一个提示

Proceed ([y]/n)? y

如果要删除,输入y。

环境删除后,但没有完全删除,要把安装环境的那个文件夹手动删除,否则会影响下一次安装一个相同名称的环境

分享环境

  • 打包

    conda env export > environment.yml
    
  • 下载

    conda env create -f environment.yml
    

这个就可以进行跨设备分享环境,我看文章说是有一些大佬会在GitHub上分享环境,那么我们如果看见.yml后缀的文件,那么一定是anaconda的环境分享,我们就可以安装

但是这个格式好像并不是conda环境的专属格式

conda包管理

更新conda

conda update conda

查看当前环境已经安装的包

conda list

安装包

  • 为指定环境安装包

    conda install --name <env_name> <package_name>
    

    conda install --name test pandas,为test环境安装pandas包,但我现在并不需要在test环境,有可能我在base环境

  • 为当前环境安装包

    conda install <package_name=version>
    

    conda install pandas,我要给那个环境安装pandas包,那我必须要在那个环境里面

可以安装包的指定版本

卸载包

  • 卸载指定环境的包

    conda remove --name <env_name> <package_name>
    

    conda remove --name test pandas,卸载test环境下的pandas包,

  • 卸载当前环境的包

    conda remove <package_name>
    

    conda remove pandas卸载pandas包

更新包

  • 更新单独包

    conda update <package_name>
    
  • 更新全部包

    conda update --all
    

搜索包

  • 精确查找

    conda search --full-name <package_full_name>
    
  • 模糊查找

    conda search package_name
    

conda换源

查看镜像源

查看当前设置了哪些镜像源

conda config --show channels

Windows

  • 命令行方式

    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
    conda config --set show_channel_urls yes
    
  • 修改配置文件

    这是一个官方教程:anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

    先是执行这段命令conda config --set show_channel_urls yes,会在用户目录下生成一个.condarc的配置文件。

    channels:
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
      - defaults
    show_channel_urls: true
    

    吧这段内容复制到那个文件。

    然后就可以了。

Linux

  • 命令

    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
    conda config --set show_channel_urls yes
    
  • 修改配置文件

    配置文件是~/.condarc,要用vim打开,即vim ~/.condarc

    复制下面的文件

    show_channel_urls: true
    channels:
      - https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
      - https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
      - https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
      - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
      - https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
      - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
      - defaults
    

这个命令和Windows的命令是一样的,但是配置文件就不一样了。

镜像源恢复

conda config --remove-key channels

pip的一些使用

虽然我已经好久不用pip了,但是这个作为一开始接触python的来说,这是一个重点,而且在我的印象里,pip的更新速度非常快,在我一开始学习pip的时候,每次安装第三方库时,总是说提示需要升级pip,每一次我都是问人,一点不会。

现在熟悉了,也记录一下

pip相关命令

  • 查看pip版本

    pip --version
    
  • 更新pip

    pip install --upgrade pip
    

    python -m pip install --upgrade pip
    
  • 查看帮助

    pip -h
    

    pip -help
    

安装包

  • 直接安装包

    pip install <package_name[==version]>
    

    pip install numpy 安装numpy库

    也可以安装指定的版本,例如:pip install numpy=1.8.2, 如果没有指定的版本,会报错。

  • 安装whl格式的包

    pip install <XXX.wh>
    

    pip install pandas-1.5.2-cp39-cp39-win_amd64.whl安装pandas库,但是注意安装的pandas库是一个pandas-1.5.2-cp39-cp39-win_amd64.whl文件,后缀名为.whl

    因为有些时候并不能很顺利的直接安装包,可能这个包已经停用了,也可能因为网络问题,所以我们就需要手动下载包,然后安装

    .whl文件,python wheel文件,本身是就是一个压缩包。可以理解为是特殊的压缩包,只有pip可以识别,我也了解不多

    提供一个下载python wheel文件的链接,Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)

查看包

  • 查看已经安装包

    pip list 
    
  • 查看包信息

    pip show <package_name>
    

    例如:pip show pandas会显示包的名称、版本、简介等等

  • 查看包详细信息

    pip show -f <package_name>
    

两种查看包的方式,但是-f的比较全面

搜索包

pip的搜索包好像被禁用了,如果使用的话需要下载。

 pip install pip_search

然后可以搜索包

 pip_search <package_name>

例如 pip_search pandas,搜索pandas包

更新包

  • 查看可更新的包

    pip list -o
    
  • 更新包

    pip install --upgrade <package_name>
    

    pip install --upgrade zipp 更新zipp包

卸载包

pip uninstall <package_name>

pip uninstall numpy卸载numpy

下载包

pip download <package_name>

pip download numpy,下载numpy包,但是并不安装,下载的是wheel文件,

导出与导入

  • 导出

    pip freeze > requirements.txt
    
  • 导入

    pip install -r requirements.txt
    

这个很常见,导出当前环境的所有包,是一个txt文件,然后可以在重新安装。我在上面也说到了我用的这个方法。

但是我现在更推荐直接分享环境。

pip换源

因为安装的库基本上都来自国外,因此我们下载就会非常慢。单号的是有国内的镜像源,

conda也是这个道理,但是我还没有找到解决方法。

阿里云源: http://mirrors.aliyun.com/pypi/simple/

中国科技大学源: https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣(douban) 源:http://pypi.douban.com/simple/

清华大学源: https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学源: http://pypi.mirrors.ustc.edu.cn/simple/

以上是一些镜像

  • 临时换源

    pip install <> -i <url>
    

    pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/ 用清华大学的源下载numpy

  • 永久换源

    pip config set global.index-url <url>
    

    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple更换清华大学的原

    但是这种换源方式会有提示,不过已经换源了。

    Writing to C:\Users\huan\AppData\Roaming\pip\pip.ini
    

    这是那个提示信息,应该是让你写进pip.ini这个文件。打开这个文件

    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    

    就是这么一段内容,应该是在index-url = 输入镜像源

到这里,pip的一些常用命令我就写完了。如果是初学者建议还是用pip安装,pip好像不能管理环境。

问题解决

前面说是我环境的问题

我是用anaconda+pycharm写的程序,所以现在的问题是怎么在pycharm里面切换环境。

首先,我们应该要知道我们安装环境,那么环境安装到了哪里

(base) PS E:\huan\桌面> conda env list
# conda environments:
#
base                  *  D:\anaconda3
new                      D:\anaconda3\envs\new
test                     D:\anaconda3\envs\test

conda env list 这个命令我们现在已经很熟悉了,那就是查看当前的环境。

其实已经很直白了,左边显示的环境名称,右边显示的是环境安装的位置。

test环境为例,那么环境的安装位置就是D:\anaconda3\envs\test

我们可以直接进入这个文件夹,往下翻会发现一个python.exe的应用程序,

新项目

我们可以在创建项目的时候直接指定python的环境。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rHOTa4H2-1671702660657)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220101105366.png)]

在创建一个新项目时,会弹出这个界面,一开始我是稀里糊涂的一顿瞎填,反正不影响我写代码就行,现在我明白了。

在这个界面,先是对这个项目命名,然后是两个关键的选项

那就是创建新的环境还是使用已有的环境。我们肯定选择已有的环境,

如果之前有过环境,那么点击那个倒三角,会出现上一个项目的环境。

我们点击左边的Add Interpret(添加新环境)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3VSLMc3D-1671702660659)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220101634412.png)]

在这里选择第一个,Add local Interpret…,会出现下面的界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXy1fMMv-1671702660659)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220102225024.png)]

因为我们用的是anaconda里的环境,所以选择左侧的Conda Environment,然后选择环境的目录,

test环境,安装位置就是D:\anaconda3\envs\test 注意,选择环境下的·python.exe文件,完成配置

Make available to all projects:如果勾选,那就是以后所有的项目都用这个环境,看情况,我不会勾选的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lxe76geY-1671702660660)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220102802283.png)]

这样,配置完成

对已有项目配置

就像我这种情况,这个项目我已经有了,但是他的环境错了,我该怎么办

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e08I6DhS-1671702660660)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220102948052.png)]

这是我们创建的新项目,我们对这个项目换一个环境。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kIGPgPXl-1671702660660)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220103223465.png)]

打开设置,快捷键Ctrl+Alt+S,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0grzq7m-1671702660661)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220103611925.png)]

选择Project XXX选项下的Python Interpret。

可以点击倒三角选择已经用过的环境,也可以添加新的环境。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jtZSXKQi-1671702660661)(C:\Users\huan\AppData\Roaming\Typora\typora-user-images\image-20221220103918181.png)]

那么又到达了这个界面。

总结

这是一篇踩坑记录,本来是早就完成了,结果一直放倒了现在。

我觉得可以记录一下。尤其是conda的命令,

通过写这篇文章,我对python的环境又有一定的了解,所以,这波不亏。

好了,我的学习笔记到此结束。

里面肯定有许许多多的bug,欢迎大家指出!毕竟这样成长更快。

也感谢大家可以看到这样,如果帮到了你,是我的荣幸。

谢谢大家!