virtualenv and why you should use virtual environments

前言

通过pip list 可知通过pip,全局(global)安装的package有哪些:

root@ubuntu:~# pip3.6 list
Package    Version
---------- -------
pip        19.0.3
setuptools 40.6.2
virtualenv 16.4.3
root@ubuntu:~#

安装及使用

然后选择一个位置,新建一个文件夹 vir_env,并新建env1,在这个文件夹中包含了一个基于python3的独立python环境。

  • Using base prefix '/usr/local/python3.6.8’virtualenv 是如何知道使用3.6.8的这个安装包呢?而不是系统自带的3.5或者2.7?
root@ubuntu:~/vir_env# virtualenv env1
Using base prefix '/usr/local/python3.6.8'
New python executable in /root/vir_env/env1/bin/python3.6
Also creating executable in /root/vir_env/env1/bin/python
Installing setuptools, pip, wheel...
done.

安装成功后,现在可以激活这个环境了,需要注意的是,必须每次使用这个环境的时候都要使用这条命令去激活。

root@ubuntu:~# cd vir_env
root@ubuntu:~/vir_env# ls
env1
root@ubuntu:~/vir_env# source env1/bin/activate
(env1) root@ubuntu:~/vir_env#

激活之后,就可以正常安装了。方法一是直接安装

(env1) root@ubuntu:~/vir_env/env1# pip install numpy
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/35/d5/4f8410ac303e690144f0a0603c4b8fd3b986feb2749c435f7cdbb288f17e/numpy-1.16.2-cp36-cp36m-manylinux1_x86_64.whl (17.3MB)
    100% |████████████████████████████████| 17.3MB 467kB/s
Installing collected packages: numpy
Successfully installed numpy-1.16.2

方法二是通过requirements.txt配置文件导入安装(未测试)

$ pip3 install --upgrade -r requirements.txt

安装完成之后,pip list 命令显示的所包含的package和global package是不一样的,故叫做python的独立运行环境。

root@ubuntu:~/vir_env# source env1/bin/activate
(env1) root@ubuntu:~/vir_env# pip list
Package            Version
------------------ -------
attrs              19.1.0
backcall           0.1.0
bleach             3.1.0
cycler             0.10.0
decorator          4.3.2
defusedxml         0.5.0
entrypoints        0.3
ipykernel          5.1.0
ipython            7.3.0
ipython-genutils   0.2.0
ipywidgets         7.4.2
jedi               0.13.3
...

且此时运行which python 命令,可以看出package所关联的地址是这个env1地址下的地址,并不是之前自己手动安装时候的地址。

(env1) root@ubuntu:~/vir_env# which python
/root/vir_env/env1/bin/python
(env1) root@ubuntu:~/vir_env#

导出这些包的名字和版本号,用来在其他项目需要安装的时候使用。
参考
python下使用pip freeze >requirements.txt命令迁移模块
pip list 和 pip freeze

(env1) root@ubuntu:~/vir_env/env1# pip freeze --local >requirments.txt
  • 问题:
    local 只是将env1中安装的package导出,而如果不添加local,则会将env1及global的package均导出?

退出虚拟环境

(py2_env) root@ubuntu:~/vir_env/py2_env# deactivate

指定python版本的虚拟库安装

/usr/bin/python 指向的软链接是python2.7。虚拟环境安装后,读取python版本也是此版本,说明指定python版本安装成功。

root@ubuntu:~/vir_env# virtualenv -p /usr/bin/python py2_env
Running virtualenv with interpreter /usr/bin/python
New python executable in /root/vir_env/py2_env/bin/python
Installing setuptools, pip, wheel...
done.
root@ubuntu:~/vir_env# ls
env1  env3  py2_env
root@ubuntu:~/vir_env# cd py2_env
root@ubuntu:~/vir_env/py2_env# source bin/activate
(py2_env) root@ubuntu:~/vir_env/py2_env# pip list
Package    Version
---------- -------
pip        19.0.3
setuptools 40.8.0
wheel      0.33.1
(py2_env) root@ubuntu:~/vir_env/py2_env# python --version
Python 2.7.12

后记

These envs are for your dependencies and packages and things like that for your project, but not for your project files, you wouldn’t want to go in and start building your project files within your virtual environment, coz you want to be albe to pass these along and throw them away whenever you want.
so you dont want to have all your project files in these virtual environments.
They are really just intended to separate out the packages dependencies and the versions that you are going to use from project project.

引用

本文主要参考下列视频内容,翻译并亲测代码后形成此文,感谢视频作者的无私奉献!

virtualenv and why you should use virtual environments

类似问题的优秀博文推荐

virtualenv
virtualenv用法梳理
虚拟环境简介

  • 虚拟环境简介
    VirtualEnv用于在一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够:
    • 在没有权限的情况下安装新套件
    • 不同应用可以使用不同的套件版本
    • 套件升级不影响其他应用
  • 虚拟环境是在Python解释器上的一个私有复制,你可以在一个隔绝的环境下安装packages,不会影响到你系统中全局的Python解释器。
  • 虚拟环境非常有用,因为它可以防止系统出现包管理混乱和版本冲突的问题。为每个应用程序创建一个虚拟环境可以确保应用程序只能访问它们自己使用的包,从而全局解释器只作为一个源且依然整洁干净去更多的虚拟环境。另一个好处是,虚拟环境不需要管理员权限。

猜你喜欢

转载自blog.csdn.net/Dale1991/article/details/88129675