为什么要虚拟环境
根据实际开发需求,我们会不断的更新或卸载项目中依赖的Python类库,直接对我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,并且当我们同时开发多个项目的时候,可能每个项目依赖的同一个Python库的版本还不一样,就会造成版本冲突,管理相当混乱。而虚拟环境独立于真实环境存在,并且可以同时拥有多个虚拟环境,每个虚拟环境都可以安装不同的类库、不同版本的类库,对项目的依赖和版本的控制有着非常重要的作用。
Python3管理虚拟环境
Python3提供的命令python3 -m venv
可以对虚拟环境进行管理,在使用该命令之前需要安装该命令,其中3.8是当前服务器中Python的版本。
sudo apt-get update
sudo apt-get install -y python3.8-venv
如果对命令不清楚,可以使用python3 -m venv -h
来查看帮助。
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip]
[--prompt PROMPT]
ENV_DIR [ENV_DIR ...]
Creates virtual Python environments in one or more target directories.
positional arguments:
ENV_DIR A directory to create the environment in.
optional arguments:
-h, --help show this help message and exit
--system-site-packages
Give the virtual environment access to the system site-packages dir.
--symlinks Try to use symlinks rather than copies, when symlinks are not the default for the
platform.
--copies Try to use copies rather than symlinks, even when symlinks are the default for the
platform.
--clear Delete the contents of the environment directory if it already exists, before environment
creation.
--upgrade Upgrade the environment directory to use this version of Python, assuming Python has been
upgraded in-place.
--without-pip Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by
default)
--prompt PROMPT Provides an alternative prompt prefix for this environment.
Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin
directory.
创建虚拟环境
Python3可以通过命令来创建一个虚拟环境,需要指定虚拟环境的创建路径EVN_DIR
。
python3 -m venv EVN_DIR
下面来创建一个虚拟环境pyspark
。
python3 -m venv /home/wux_labs/pyspark
激活虚拟环境
虚拟环境创建完成后,要想使用已创建的虚拟环境,包括在虚拟环境中安装类库、使用虚拟环境的类库等,需要先将环境激活,激活过程使用命令:
source /home/wux_labs/pyspark/bin/activate
激活完成后,可以看到命令行前面的环境标志:
此时,对Python的操作都是基于当前虚拟环境pyspark
的,包括安装依赖库等,不会影响其他环境。
sudo apt-get install -y python3-pip
pip list
虚拟环境的其他命令
- 解除虚拟环境激活
以下命令会解除当前环境的激活状态。
deactivate
- 删除虚拟环境
要删除一个虚拟环境,只需要删除虚拟环境对应的文件夹即可。
rm -rf pyspark
Anaconda3管理虚拟环境
Anaconda可以通过命令conda env
来对虚拟环境进行管理。其语法如下:
usage: conda-env [-h] {create,export,list,remove,update,config} ...
positional arguments:
{create,export,list,remove,update,config}
create Create an environment based on an environment file
export Export a given environment
list List the Conda environments
remove Remove an environment
update Update the current environment based on environment file
config Configure a conda environment
其中最常用的有:
- create 创建虚拟环境
- list 列出已有的虚拟环境
- remove 移出虚拟环境
也可以直接使用conda create
命令进行虚拟环境的创建。创建命令是:
conda create --name env_name python=x.x
--name
可简写为-n
即:
conda create -n env_name python=x.x
创建虚拟环境
可以通过conda create
命令来创建一个虚拟环境。
conda create -n pyspark python=3.9
其创建过程中会输出类似以下的日志:
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.3
latest version: 22.11.1
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /home/wux_labs/anaconda3/envs/pyspark
added / updated specs:
- python=3.9
The following packages will be downloaded:
package | build
---------------------------|-----------------
_openmp_mutex-5.1 | 1_gnu 21 KB
ca-certificates-2022.10.11 | h06a4308_0 124 KB
certifi-2022.9.24 | py39h06a4308_0 154 KB
ld_impl_linux-64-2.38 | h1181459_1 654 KB
libffi-3.4.2 | h6a678d5_6 136 KB
libgcc-ng-11.2.0 | h1234567_1 5.3 MB
libgomp-11.2.0 | h1234567_1 474 KB
libstdcxx-ng-11.2.0 | h1234567_1 4.7 MB
ncurses-6.3 | h5eee18b_3 781 KB
openssl-1.1.1s | h7f8727e_0 3.6 MB
pip-22.3.1 | py39h06a4308_0 2.7 MB
python-3.9.15 | h7a1cb2a_2 25.0 MB
readline-8.2 | h5eee18b_0 357 KB
setuptools-65.5.0 | py39h06a4308_0 1.1 MB
sqlite-3.40.0 | h5082296_0 1.2 MB
tk-8.6.12 | h1ccaba5_0 3.0 MB
tzdata-2022g | h04d1e81_0 114 KB
wheel-0.37.1 | pyhd3eb1b0_0 33 KB
xz-5.2.8 | h5eee18b_0 429 KB
zlib-1.2.13 | h5eee18b_0 103 KB
------------------------------------------------------------
Total: 50.0 MB
The following NEW packages will be INSTALLED:
_libgcc_mutex pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu
ca-certificates pkgs/main/linux-64::ca-certificates-2022.10.11-h06a4308_0
certifi pkgs/main/linux-64::certifi-2022.9.24-py39h06a4308_0
ld_impl_linux-64 pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1
libffi pkgs/main/linux-64::libffi-3.4.2-h6a678d5_6
libgcc-ng pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1
libgomp pkgs/main/linux-64::libgomp-11.2.0-h1234567_1
libstdcxx-ng pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1
ncurses pkgs/main/linux-64::ncurses-6.3-h5eee18b_3
openssl pkgs/main/linux-64::openssl-1.1.1s-h7f8727e_0
pip pkgs/main/linux-64::pip-22.3.1-py39h06a4308_0
python pkgs/main/linux-64::python-3.9.15-h7a1cb2a_2
readline pkgs/main/linux-64::readline-8.2-h5eee18b_0
setuptools pkgs/main/linux-64::setuptools-65.5.0-py39h06a4308_0
sqlite pkgs/main/linux-64::sqlite-3.40.0-h5082296_0
tk pkgs/main/linux-64::tk-8.6.12-h1ccaba5_0
tzdata pkgs/main/noarch::tzdata-2022g-h04d1e81_0
wheel pkgs/main/noarch::wheel-0.37.1-pyhd3eb1b0_0
xz pkgs/main/linux-64::xz-5.2.8-h5eee18b_0
zlib pkgs/main/linux-64::zlib-1.2.13-h5eee18b_0
Proceed ([y]/n)? y
Downloading and Extracting Packages
python-3.9.15 | 25.0 MB | ######################################################################### | 100%
pip-22.3.1 | 2.7 MB | ######################################################################### | 100%
tzdata-2022g | 114 KB | ######################################################################### | 100%
openssl-1.1.1s | 3.6 MB | ######################################################################### | 100%
zlib-1.2.13 | 103 KB | ######################################################################### | 100%
libffi-3.4.2 | 136 KB | ######################################################################### | 100%
ncurses-6.3 | 781 KB | ######################################################################### | 100%
ca-certificates-2022 | 124 KB | ######################################################################### | 100%
libgcc-ng-11.2.0 | 5.3 MB | ######################################################################### | 100%
readline-8.2 | 357 KB | ######################################################################### | 100%
tk-8.6.12 | 3.0 MB | ######################################################################### | 100%
wheel-0.37.1 | 33 KB | ######################################################################### | 100%
certifi-2022.9.24 | 154 KB | ######################################################################### | 100%
xz-5.2.8 | 429 KB | ######################################################################### | 100%
sqlite-3.40.0 | 1.2 MB | ######################################################################### | 100%
_openmp_mutex-5.1 | 21 KB | ######################################################################### | 100%
libstdcxx-ng-11.2.0 | 4.7 MB | ######################################################################### | 100%
setuptools-65.5.0 | 1.1 MB | ######################################################################### | 100%
libgomp-11.2.0 | 474 KB | ######################################################################### | 100%
ld_impl_linux-64-2.3 | 654 KB | ######################################################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate pyspark
#
# To deactivate an active environment, use
#
# $ conda deactivate
查看虚拟环境
虚拟环境创建完成后,可以使用命令conda env list
查看当前系统中存在的虚拟环境。
$ conda env list
# conda environments:
#
base * /home/wux_labs/anaconda3
pyspark /home/wux_labs/anaconda3/envs/pyspark
可以看到当前环境中除了默认的base
外,还有我们刚创建的虚拟环境pyspark
。
激活虚拟环境
虚拟环境创建完成后,要想使用已创建的虚拟环境,包括在虚拟环境中安装类库、使用虚拟环境的类库等,需要先将环境激活,按照安装日志的最后输出的提示,可以使用conda activate pyspark
来激活pyspark
虚拟环境。
conda activate pyspark
激活完成后,可以看到命令行前面的环境标志:
(pyspark) wux_labs@wux-labs-vm:~$
此时,对Python的操作都是基于当前虚拟环境pyspark
的,包括安装依赖库等,不会影响其他环境。
虚拟环境的其他命令
- 解除虚拟环境激活
以下命令会解除当前环境的激活状态,并切换回base环境。
conda deactivate
- 删除虚拟环境
以下命令用于删除一个已有的虚拟环境。
conda env remove -n pyspark