探索Python虚拟环境:优化代码开发与管理的利器

在这里插入图片描述

前言

Python虚拟环境是一个强大而灵活的工具,它可以帮助我们管理项目的依赖包、隔离不同项目的开发环境,并优化代码的开发过程。本文将介绍Python虚拟环境的概念、用法和好处,并引导您逐步使用它来提高代码开发的效率。

什么是Python虚拟环境

Python虚拟环境是Python解释器的一个独立副本,它可以在同一台计算机上同时存在多个独立的Python开发环境。每个虚拟环境都有自己独立的Python解释器和安装的第三方包,这样可以实现项目之间的隔离。

为什么需要虚拟环境

在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.10。所有第三方的包都会被pip安装到Python3的site-packages目录下。
如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办?
这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。venv就是用来为一个应用创建一套“隔离”的Python运行环境。

虚拟环境的好处

  • 隔离项目环境
    通过创建独立的虚拟环境,我们可以确保不同项目间的依赖包不冲突,同时减少项目间可能出现的兼容性问题。
  • 方便扩展和管理
    通过虚拟环境,我们可以方便地安装、更新和删除项目所需的依赖包,而不会影响其他项目。
  • 保持干净的开发环境
    虚拟环境可以帮助我们保持开发环境的干净,减少不必要的依赖和冗余的包。

python常用的虚拟环境技术

  1. venv
    venv是Python 3中自带的模块,用于创建和管理虚拟环境。通过运行以下命令可以创建一个新的虚拟环境:
  • 创建虚拟环境的命令
    使用windows doc命令切换到某个路径下,然后执行(请注意python是windows环境变量中配置的版本)
python -m venv ./myvenv
  • 激活虚拟环境
    windows在myevnv目录下Scripts\activate.bat
    执行该脚本即可激活
  • pycharm引入
    在这里插入图片描述
    在这里插入图片描述
    此时电脑磁盘myvenv中自动创建出如下目录和文件:
    在这里插入图片描述
  1. anaconda
  • 创建python版本为3.x.xx,名字为conda_env的虚拟环境
conda create --name conda_env python=3.x.xx

这里有的小伙伴可能会出现如下错误:

(base) C:\Users\root>conda create --name conda_env python=3.7.14
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - python=3.7.14

Current channels:

  - https://repo.anaconda.com/pkgs/main/win-64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/r/win-64
  - https://repo.anaconda.com/pkgs/r/noarch
  - https://repo.anaconda.com/pkgs/msys2/win-64
  - https://repo.anaconda.com/pkgs/msys2/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.

这可能是因为没有可用的渠道提供该特定版本的Python。
解决思路:

  1. 更新Anaconda运行的Conda软件包管理器
conda update conda

如果更新Conda后还是不能找到所需版本的Python,那可能是因为该Python版本不是默认提供的。
2. 使用conda search python查看可用的Python版本列表

Loading channels: done
# Name                       Version           Build  Channel
python                        2.7.13     h1b6d89f_16  pkgs/main
python                        2.7.13     h9912b81_15  pkgs/main
python                        2.7.13     hb034564_12  pkgs/main
python                        2.7.14     h2765ee6_18  pkgs/main
python                        2.7.14     h3e68818_15  pkgs/main
python                        2.7.14     h4084c39_22  pkgs/main
python                        2.7.14     h4a10d90_30  pkgs/main
python                        2.7.14     h4a10d90_31  pkgs/main
python                        2.7.14     h59f5a59_20  pkgs/main
python                        2.7.14     h819644d_16  pkgs/main
python                        2.7.14     h8c3f1cb_23  pkgs/main
python                        2.7.15      h2880e7c_2  pkgs/main
python                        2.7.15      h2880e7c_3  pkgs/main
python                        2.7.15      h2880e7c_4  pkgs/main
python                        2.7.15     hcb6e200_15  pkgs/main
python                        2.7.15      hcb6e200_5  pkgs/main
python                        2.7.15      hcb6e200_7  pkgs/main
python                        2.7.15      he216670_0  pkgs/main
python                        2.7.16      hcb6e200_0  pkgs/main
python                        2.7.17      h930f6bb_0  pkgs/main
python                        2.7.18      hcb6e200_0  pkgs/main
python                        2.7.18      hfb89ab9_0  pkgs/main
python                         3.5.4     h1357f44_23  pkgs/main
python                         3.5.4     hc495aa9_21  pkgs/main
python                         3.5.4     hd3c4935_11  pkgs/main
python                         3.5.4     hdec4e59_20  pkgs/main
python                         3.5.4     hedc2606_15  pkgs/main
python                         3.5.5      h0c2934d_0  pkgs/main
python                         3.5.5      h0c2934d_1  pkgs/main
python                         3.5.5      h0c2934d_2  pkgs/main
python                         3.5.6      he025d50_0  pkgs/main
python                         3.6.2     h09676a0_15  pkgs/main
python                         3.6.2     h6679aeb_11  pkgs/main
python                         3.6.3      h210ce5f_2  pkgs/main
python                         3.6.3      h3389d20_0  pkgs/main
python                         3.6.3      h3b118a2_4  pkgs/main
python                         3.6.3      h9e2ca53_1  pkgs/main
python                         3.6.4      h0c2934d_2  pkgs/main
python                         3.6.4      h0c2934d_3  pkgs/main
python                         3.6.4      h6538335_0  pkgs/main
python                         3.6.4      h6538335_1  pkgs/main
python                         3.6.5      h0c2934d_0  pkgs/main
python                         3.6.6      hea74fb7_0  pkgs/main
python                         3.6.7      h33f27b4_0  pkgs/main
python                         3.6.7      h33f27b4_1  pkgs/main
python                         3.6.7      h9f7ef89_2  pkgs/main
python                         3.6.8      h9f7ef89_0  pkgs/main
python                         3.6.8      h9f7ef89_1  pkgs/main
python                         3.6.8      h9f7ef89_7  pkgs/main
python                         3.6.9      h5500b2f_0  pkgs/main
python                        3.6.10      h9f7ef89_0  pkgs/main
python                        3.6.10      h9f7ef89_1  pkgs/main
python                        3.6.10      h9f7ef89_2  pkgs/main
python                        3.6.12      h5500b2f_2  pkgs/main
python                        3.6.13      h3758d61_0  pkgs/main
python                         3.7.0      hea74fb7_0  pkgs/main
python                         3.7.1      h33f27b4_3  pkgs/main
python                         3.7.1      h33f27b4_4  pkgs/main
python                         3.7.1      h8c8aaf0_6  pkgs/main
python                         3.7.1      he44a216_5  pkgs/main
python                         3.7.2      h8c8aaf0_0  pkgs/main
python                         3.7.2     h8c8aaf0_10  pkgs/main
python                         3.7.2      h8c8aaf0_2  pkgs/main
python                         3.7.3      h8c8aaf0_0  pkgs/main
python                         3.7.3      h8c8aaf0_1  pkgs/main
python                         3.7.4      h5263a28_0  pkgs/main
python                         3.7.5      h8c8aaf0_0  pkgs/main
python                         3.7.6      h60c2a47_2  pkgs/main
python                         3.7.7 h60c2a47_0_cpython  pkgs/main
python                         3.7.7      h60c2a47_2  pkgs/main
python                         3.7.7      h81c818b_4  pkgs/main
python                         3.7.9      h60c2a47_0  pkgs/main
python                        3.7.10      h6244533_0  pkgs/main
python                        3.7.11      h6244533_0  pkgs/main
python                        3.7.13      h6244533_0  pkgs/main
python                        3.7.13      h6244533_1  pkgs/main
python                        3.7.15      h6244533_0  pkgs/main
python                        3.7.15      h6244533_1  pkgs/main
python                        3.7.16      h6244533_0  pkgs/main
python                         3.8.0      hff0d562_0  pkgs/main
python                         3.8.0      hff0d562_1  pkgs/main
python                         3.8.0      hff0d562_2  pkgs/main
python                         3.8.1      h5fd99cc_1  pkgs/main
python                         3.8.1 h5fd99cc_8_cpython  pkgs/main
python                         3.8.1 he1778fa_7_cpython  pkgs/main
python                         3.8.2      h5fd99cc_0  pkgs/main
python                         3.8.2     h5fd99cc_11  pkgs/main
python                         3.8.2     he1778fa_13  pkgs/main
python                         3.8.3      he1778fa_0  pkgs/main
python                         3.8.3      he1778fa_2  pkgs/main
python                         3.8.5      h5fd99cc_1  pkgs/main
python                         3.8.5      he1778fa_0  pkgs/main
python                         3.8.8      hdbf39b2_4  pkgs/main
python                         3.8.8      hdbf39b2_5  pkgs/main
python                        3.8.10      hdbf39b2_7  pkgs/main
python                        3.8.11      h6244533_1  pkgs/main
python                        3.8.12      h6244533_0  pkgs/main
python                        3.8.13      h6244533_0  pkgs/main
python                        3.8.13      h6244533_1  pkgs/main
python                        3.8.15      h6244533_1  pkgs/main
python                        3.8.15      h6244533_2  pkgs/main
python                        3.8.15      h82bb817_0  pkgs/main
python                        3.8.16      h1aa4202_4  pkgs/main
python                        3.8.16      h6244533_2  pkgs/main
python                        3.8.16      h6244533_3  pkgs/main
python                        3.8.17      h1aa4202_0  pkgs/main
python                        3.8.17      h6244533_0  pkgs/main
python                         3.9.0      h6244533_2  pkgs/main
python                         3.9.0      h8aef87e_1  pkgs/main
python                         3.9.1      h6244533_2  pkgs/main
python                         3.9.2      h6244533_0  pkgs/main
python                         3.9.4      h6244533_0  pkgs/main
python                         3.9.5      h6244533_3  pkgs/main
python                         3.9.6      h6244533_0  pkgs/main
python                         3.9.6      h6244533_1  pkgs/main
python                         3.9.7      h6244533_1  pkgs/main
python                        3.9.11      h6244533_1  pkgs/main
python                        3.9.11      h6244533_2  pkgs/main
python                        3.9.12      h6244533_0  pkgs/main
python                        3.9.13      h6244533_1  pkgs/main
python                        3.9.13      h6244533_2  pkgs/main
python                        3.9.15      h6244533_0  pkgs/main
python                        3.9.15      h6244533_1  pkgs/main
python                        3.9.15      h6244533_2  pkgs/main
python                        3.9.16      h1aa4202_3  pkgs/main
python                        3.9.16      h6244533_0  pkgs/main
python                        3.9.16      h6244533_1  pkgs/main
python                        3.9.16      h6244533_2  pkgs/main
python                        3.9.17      h1aa4202_0  pkgs/main
python                        3.9.17      h6244533_0  pkgs/main
python                        3.10.0      h96c0403_3  pkgs/main
python                        3.10.0      hbb2ffb3_0  pkgs/main
python                        3.10.0      hbb2ffb3_1  pkgs/main
python                        3.10.0      hbb2ffb3_2  pkgs/main
python                        3.10.3      hbb2ffb3_5  pkgs/main
python                        3.10.4      hbb2ffb3_0  pkgs/main
python                        3.10.6      hbb2ffb3_0  pkgs/main
python                        3.10.6      hbb2ffb3_1  pkgs/main
python                        3.10.8      h966fe2a_1  pkgs/main
python                        3.10.8      hbb2ffb3_0  pkgs/main
python                        3.10.9      h966fe2a_0  pkgs/main
python                        3.10.9      h966fe2a_1  pkgs/main
python                        3.10.9      h966fe2a_2  pkgs/main
python                       3.10.10      h966fe2a_2  pkgs/main
python                       3.10.11      h966fe2a_2  pkgs/main
python                       3.10.11      he1021f5_3  pkgs/main
python                       3.10.12      h966fe2a_0  pkgs/main
python                       3.10.12      he1021f5_0  pkgs/main
python                        3.11.0      h966fe2a_2  pkgs/main
python                        3.11.0      h966fe2a_3  pkgs/main
python                        3.11.2      h966fe2a_0  pkgs/main
python                        3.11.3      h966fe2a_0  pkgs/main
python                        3.11.3      he1021f5_1  pkgs/main
python                        3.11.4      h966fe2a_0  pkgs/main
python                        3.11.4      he1021f5_0  pkgs/main

此时可以清楚的看到可以安装的python版本中根本没有3.7.14,可以换一个版本进行安装。
有个人说,我就要3.7.14,其它都不要。好吧,那你可以尝试添加其他渠道来获取所需的Python版本。你可以搜索可用的渠道,然后使用conda install -c <channel_name> python=命令来安装指定版本的Python。

  • 激活、禁用 Python 环境
 conda activate env_name
conda deactivate
  • 安装和管理项目所需要的库
conda activate env_name ## 激活当前环境,使用pip命令就是给当前环境安装所需要的包
pip install xxx
  • 列出可用环境
conda info --envs或者codna env list

(base) C:\Users\root>conda info --envs
# conda environments:
#
conda_env                C:\Users\root\.conda\envs\conda_env
base                  *  D:\data\anaconda

有的人会说,你这个虚拟环境能不能不要安装到C盘的默认路径了啊,可以更换磁盘吗?

是的,conda create --name <env_name> python=<version>命令可以创建一个指定版本的Python虚拟环境,并且你也可以指定安装的目录位置。

要指定虚拟环境的安装目录,可以使用--prefix参数,后面跟上你想要指定的目录路径。例如:

conda create --name <env_name> python=<version> --prefix=/path/to/installation/directory

在这个命令中,将/path/to/installation/directory替换为你想要安装虚拟环境的目录路径。

这样,虚拟环境将被安装在指定的目录中,而不是默认的环境目录。确保目录存在并且你具有适当的权限来在该目录中安装虚拟环境。

  • 移除虚拟环境
conda remove --name <env_name> --all
(base) C:\Users\root>conda remove --name conda_env --all

Remove all packages in environment C:\Users\root\.conda\envs\conda_env:


## Package Plan ##

  environment location: C:\Users\root\.conda\envs\conda_env


The following packages will be REMOVED:

  ca-certificates-2023.05.30-haa95532_0
  certifi-2022.12.7-py37haa95532_0
  openssl-1.1.1v-h2bbff1b_0
  pip-22.3.1-py37haa95532_0
  python-3.7.11-h6244533_0
  setuptools-65.6.3-py37haa95532_0
  sqlite-3.41.2-h2bbff1b_0
  vc-14.2-h21ff451_1
  vs2015_runtime-14.27.29016-h5e58377_2
  wheel-0.38.4-py37haa95532_0
  wincertstore-0.2-py37haa95532_2


Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(base) C:\Users\root>conda env list
# conda environments:
#
base                  *  D:\data\anaconda


(base) C:\Users\xue.chuan>
  1. virtualenv
  • 安装virtualenv
    virtualenv 是一个通过创建独立的 Python 环境来管理 Python 应用程序包的工具。
pip install virtualenv
  • 创建和激活虚拟环境
    在需要进行开发的目录中执行以下命令来创建一个 Python 环境
virtualenv env_name

其中 env_name 是新Python环境的名称。在创建好 Python 环境后再在命令行中使用以下命令激活环境:

source env_name/bin/activate
  • 安装和管理项目所需的库
    在虚拟环境激活后,使用 pip 安装所需的 Python 库
pip install xxx
  • 退出虚拟环境
    使用以下命令来退出虚拟环境
deactivate

导出和导入虚拟环境

有时候,我们需要将当前的虚拟环境分享给其他开发人员或者迁移到其他机器上。我们可以使用以下命令将当前的虚拟环境导出为一个压缩文件:

pip freeze > requirements.txt

然后,我们可以使用以下命令将该压缩文件导入到其他机器上:

pip install -r requirements.txt

这将会自动安装虚拟环境中所需的依赖包。

后记

Python虚拟环境是提高代码开发效率和管理依赖包的利器。通过使用虚拟环境,我们能够实现依赖包的隔离和项目环境的管理,保持开发环境的清洁和稳定。希望本文能够帮助读者理解和使用Python虚拟环境,并在项目开发中获得更好的体验。

参考文献

venv

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值