zoukankan      html  css  js  c++  java
  • python笔记41-虚拟环境virtualenv

    前言

    如果你是一个python初学者,我是不建议你搞python虚拟环境的,我看到很多python的初学者同学,使用最新版的pycharm,新建一个工程时候默认就是venu虚拟环境。
    然后在使用cmd里面pip安装第三方包的时候,在工程里面死活导入不成功,搞的开始怀疑人生。(你给他讲这是虚拟环境venu,他会一脸懵逼!)

    那么什么情况下会用到虚拟环境呢?

    如果你已经使用python写了一个项目的自动化测试代码了,然后你开始写第二个项目,第三个项目。。。。当你写的项目越来越多时候,
    你会发现python使用pip安装的第三方包会越来越多,并且你会在安装第三方包的时候踩坑,比如不同的python版本匹配不同的pytest包,或者django1和django2差异又很大。
    这时候你会发现我需要同时安装2个版本的包,对比差异性,或者同时开发多个项目,很显然一套环境已经不能满足我们的需求了。

    于是需要有多套python环境,也就是需要学会使用虚拟环境了!virtualenv在windows和linux上安装是有一些差异的。

    windows安装virtualenv

    virtualenv 是用来创建 Python 的虚拟环境的库,虚拟环境能够独立于真实环境存在,并且可以同时有多个互相独立的 Python 虚拟环境,
    每个虚拟环境都可以营造一个干净的开发环境,对于项目的依赖、版本的控制有着非常重要的作用。

    虚拟环境有什么意义?

    打个比喻,你正在使用django2.1开发一个项目,这时候你看到github上有个开源的django项目,但是是基于django1.8写的,在你本机环境运行会有问题。
    那我总不能把现在的卸载,重新安装一个吧,那会影响你开发的代码,于是,这个问题就可以使用一个虚拟环境来解决。
    使用 virtualenv 来创建一个只给这个项目运行的开发环境,既可以保证项目的正常运行,也方便了之后移植项目。

    安装 virtualenv 跟安装一般的 Python 库是一样的操作,直接使用 pip 命令就行了

    pip install virtualenv

    C:Usersdell>pip install virtualenv
    Collecting virtualenv
      Downloading https://files.pythonhosted.org/packages/f7/69/1ad2d17560c4fc60170056dcd0a568b83f3453a2ac91155af746bcdb9a07/virtualenv-16.7.4-py2.py3-none-any.whl (3.3MB)
         |████████████████████████████████| 3.3MB 364kB/s
    Installing collected packages: virtualenv
    Successfully installed virtualenv-16.7.4
    

    安装完成后使用virtualenv --version查看版本

    C:Usersdell>virtualenv --version
    16.7.4
    

    创建虚拟环境

    安装成功之后,我们就可以创建虚拟环境了:virtualenv project_name,比如我要在d盘的soft目录下创建一个python的虚拟环境名称为py36_yoyo

    virtualenv py36_yoyo

    D:soft>virtualenv py36_yoyo
    Using base prefix 'e:\python36'
    New python executable in D:softpy36_yoyoScriptspython.exe
    Installing setuptools, pip, wheel...
    done.
    

    从上面运行日志看出,它是基于我e盘里面的python36版本拷贝的一个虚拟环境,也就是之前pip是哪个python环境安装的,那虚拟环境默认就是这个python的环境。

    激活虚拟环境

    虚拟环境已经创建好了,那我们如何激活使用呢?cd到py36_yoyo下的Scripts目录,里面有个activate.bat文件直接输入activate指令激活

    D:softpy36_yoyo>cd Scripts
    
    D:softpy36_yoyoScripts>dir
    2019/08/28  23:30    <DIR>          .
    2019/08/28  23:30    <DIR>          ..
    2019/08/28  23:30             2,299 activate
    2019/08/28  23:30               872 activate.bat
    2019/08/28  23:30             1,755 activate.ps1
    2019/08/28  23:30             1,151 activate.xsh
    2019/08/28  23:30             1,517 activate_this.py
    2019/08/28  23:30               512 deactivate.bat
    2019/08/28  23:30           102,775 easy_install-3.6.exe
    2019/08/28  23:30           102,775 easy_install.exe
    2019/08/28  23:30           102,757 pip.exe
    2019/08/28  23:30           102,757 pip3.6.exe
    2019/08/28  23:30           102,757 pip3.exe
    2019/08/28  23:28           100,504 python.exe
    2019/08/28  23:28            52,888 python3.dll
    2019/08/28  23:28         3,555,992 python36.dll
    2019/08/28  23:28            98,968 pythonw.exe
    2019/08/28  23:30           102,753 wheel.exe
    
    D:softpy36_yoyoScripts>activate
    
    (py36_yoyo) D:softpy36_yoyoScripts>
    

    当看到前面出现(py36_yoyo)说明进入了虚拟环境了,接着就可以使用里面的pip安装第三方包了,如安装pytest环境

    (py36_yoyo) D:softpy36_yoyoScripts>pip install pytest==3.6.3

    安装成功后接下来就可以写一段pytest的测试代码测试是否成功了

    pytest代码运行

    新建一个test_h.py文件,写入pytest测试脚本

    import pytest
    
    # ** 作者:上海-悠悠 QQ交流群:717225969**
    def test_one():
        print("正在执行----test_one")
        x = "this"
        assert 'h' in x
    
    def test_two():
        print("正在执行----test_two")
        x = "hello"
        assert x
    
    def test_three():
        print("正在执行----test_three")
        a = "hello"
        b = "hello world"
        assert a in b
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_h.py"])
    

    运行结果

    (py36_yoyo) D:softpy36_yoyoScripts>pytest -s D:soft	est_h.py
    ================================================= test session starts =================================================
    platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.8.0, pluggy-0.6.0
    rootdir: D:soft, inifile:
    collected 3 items
    
    ....	est_h.py 正在执行----test_one
    .正在执行----test_two
    .正在执行----test_three
    .
    
    ============================================== 3 passed in 0.06 seconds ===============================================
    
    (py36_yoyo) D:softpy36_yoyoScripts>
    

    使用deactivate退出虚拟环境

    deactivate

    当一个项目开发完成后,所需要的依赖包可以用上一篇讲到的freeze导出依赖包python笔记40-环境迁移freeze生成requirements.txt

    linux上虚拟环境

    linux上的虚拟环境使用和window上有一点点差异,大体上差不多。linux上默认的是python2.7环境,如果想使用python3.6的虚拟环境,可以把python3.6的Script里面的pip3设置软连接。
    然后使用pip3安装virtualenv

    pip3 install virtualenv

    [root@yoyo ~]# pip3 install virtualenv
    Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
    Collecting virtualenv
      Downloading http://mirrors.aliyun.com/pypi/packages/f7/69/1ad2d17560c4fc60170056dcd0a568b83f3453a2ac91155af746bcdb9a07/virtualenv-16.7.4-py2.py3-none-any.whl (3.3MB)
         |████████████████████████████████| 3.3MB 2.3MB/s 
    Installing collected packages: virtualenv
    Successfully installed virtualenv-16.7.4
    [root@yoyo ~]# virtualenv --version
    -bash: virtualenv: command not found
    

    如果使用virtualenv --version查看版本号显示-bash: virtualenv: command not found,那就找到virtualenv,添加软连接

    [root@yoyo ~]# find / -name virtualenv
    /var/lib/docker/overlay2/458b85f365c18adb23606b6011c10c3af1e03babe3a7e7d839a12ee90f3d2bc2/diff/opt/rh/rh-python36/root/usr/bin/virtualenv
    /usr/local/python3/bin/virtualenv
    
    [root@yoyo ~]# ln /usr/local/python3/bin/virtualenv /usr/bin
    

    接着创建虚拟环境,venv是虚拟环境名称,可以取任意名称

    virtualenv --no-site-packages venv

    [root@yoyo ~]# virtualenv --no-site-packages venv
    Using base prefix '/usr/local/python3'
    New python executable in /root/venv/bin/python3.6
    Also creating executable in /root/venv/bin/python
    Please make sure you remove any previous custom paths from your /root/.pydistutils.cfg file.
    Installing setuptools, pip, wheel...
    done.
    
    

    激活虚拟环境cd到/venv/bin/目录,执行source activate激活虚拟环境

    [root@yoyo ~]# cd ./venv/bin/
    [root@yoyo bin]# source activate
    (venv) [root@yoyo bin]# 
    
    

    退出虚拟环境使用deactivate

    (venv) [root@yoyo bin]# deactivate
    [root@yoyo bin]# 
    
    
  • 相关阅读:
    设计模式(5)>模板方法
    设计模式(2)>工厂方法模式
    分支限界>装载问题
    解决Oracle 11g在用EXP导出时,空表不能导出
    设计模式(7)>观察者模式
    算法>并行算法
    设计模式(15)>桥接模式
    设计模式(9)>迭代器模式
    设计模式(11)>建造者模式
    设计模式(17)>中介者模式
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11427362.html
Copyright © 2011-2022 走看看