当前位置: 首页 > 后端技术 > Python

虚拟环境的创建与使用

时间:2023-03-26 00:58:53 Python

本篇笔记内容均摘自慕课网Jack老师的课程笔记,并非原版Pipenv管理Python虚拟环境2020年5月更新:很多同学反映有pipenv的问题太多了,后来我也发现了确实,建议大家直接弃坑。管理Python项目环境的方式有很多种,virtualenv是最好的,简单稳定。对于本课程的后续章节,学生可以直接使用virtualenv。坚持使用pipenv的同学建议多搜索几篇文章学习理解它的命令。一、pipenv简介简单来说,pipenv是一个封装了pip和virtualenv的便携工具。它会自动为您的项目创建和管理virtualenv,并在安装/卸载包时在Pipfile中添加/删除包。使用pipenv管理python环境虚拟环境的优点:无需单独使用pip和virtualenv,合并在一起时无需管理requirements.txt,版本号、hash值、包依赖自动生成pipenvinstallxxx安装包到Pipfile和Pipfile.lock时生成,可以手动编辑区分开发环境和生产环境使用Hash检查安装的包,有利于主动暴露安全问题使用最新版本减少组件过时带来的安全风险可以使用图形2.安装pipenv首先确保你已经正确安装了python3和pip3[root@shiyanlou~]#python3-VPython3.7.2[root@shiyanlou~]#pip3-Vpip19.0.1from/usr/local/python3/lib/python3.7/site-packages/pip(python3.7)[root@shiyanlou~]#然后pip3在linux下安装pipenv,Mac下brewinstallpipenv[root@shiyanlou~]#pip3installpipenv查看索引:http://mirrors.aliyun.com/pypi/simple/收集pipenv下载http://mirrors.aliyun.com/pypi/packages/13/b4/3ffa55f77161cff9a5220f162670f7c5eb00df52e00939e203f601b0f579/pipenv-2018.11.26-py3-none-any.whl(5.2MB)100%|███████████████████████████████|5.2MB4.0MB/s已满足要求:/usr/local/python3/lib/python3.7/site-packages中的certifi(来自pipenv)(2018.11.29)已满足要求:/usr/local/python3/lib/python3.7/site-packages中的setuptools>=36.2.1(来自pipenv)(40.6.2)已满足要求:pip>=9.0.1在/usr/local/python3/lib/python3.7/site-packages(来自pipenv)(18.1)要求已经满足:virtualenvin/usr/local/python3/lib/python3.7/site-packages(来自pipenv)(16.2.0)已经满足要求:virtualenv-clone>=0.2.5in/usr/local/python3/lib/python3.7/site-packages(frompipenv)(0.4.0)安装收集的包:pipenv成功安装pipenv-2018.11.26[root@shiyanlou~]#pipenv依赖psutil、virtualenv-clone、pew、certifi、urllib3、chardet、requests、mccabe、pyflakes、pycodestyle、flake8等第三方模块,pipenv有一个非常漂亮的彩色终端界面3.pipfile和Pipfile.lockPipfile,简洁显示项目环境和依赖包[[source]]name="pypi"url="https://mirrors.aliyun.com/pypi/simple/"#指定国内pip源,否则会变慢verify_ssl=true[dev-packages]#开发环境[packages]#生产环境requests="*"#*表示最新版本django="*"[requires]python_version="3.7"#python版本文件。lock,详细记录环境依赖,使用Hash算法保证其完整对应{"_meta":{"hash":{"sha256":"d737a1ef2f8b591f86cd0fa6a8cb48918f742d60df2a394ebc3d23aff4748999"},"pipfile-spec":6,"requires":{"python_version":"3.7"},"sources":[{"name":"pypi","url":"https://pypi.org/simple","verify_ssl":true}]},"default":{"certifi":{"hashes":["sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7","sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033"],"version":"==2018.11.29"},"chardet":{"hashes":["sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae","sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"],"version":"==3.0.4"},"django":{"hashes":["sha256:a32c22af23634e1d11425574dce756098e015a165be02e4690179889b207c7a8","sha256:d6393918da830530a9516bbbcbf7f1214c3d733738779f06b0f649f49cc698c3"],"index":"pypi","version":"==2.1.5"},"idna":{"hashes":["sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407","sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"],"version":"==2.8"},"pytz":{"hashes":["sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9","sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"],"version":"==2018.9"},"requests":{"hashes":["sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e","sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"],"index":"pypi","version":"==2.21.0"},"urllib3":{"hashes":["sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39","sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22"],"version":"==1.24.1"}},"develop":{}}4.虚拟环境管理4.1创建虚拟环境,进入项目文件夹直接安装,安装pipenv需要的包,在当前文件夹下创建一个虚拟环境生成Pipfile和Pipfile.lock[root@shiyanlou~]#cdmyproject/[root@shiyanloumyproject]#pipenvinstallrequests为这个项目创建一个virtualenv...Pipfile:/root/myproject/PipfileUsing/usr/local/python3/bin/python3.7(3.7.2)tocreatevirtualenv...?Creatingvirtualenvironment...Alreadyusinginterpreter/usr/local/python3/bin/python3.7使用基本前缀'/usr/local/python3'在/root/.local/share/virtualenvs/myproject-zKJX12a5/bin/python3.7中创建新的python可执行文件也在/root/.local/share/中创建可执行文件virtualenvs/myproject-zKJX12a5/bin/pythonInstallingsetuptools,pip,wheel...done.?成功创建虚拟环境环境!Virtualenvlocation:/root/.local/share/virtualenvs/myproject-zKJX12a5CreatingaPipfileforthisproject…Inst所有请求...?安装成功未找到Pipfile.lock,正在创建...锁定[dev-packages]依赖项...锁定[packages]依赖项...?成功!更新了Pipfile.lock(444a6d)!从Pipfile.lock(444a6d)安装依赖项…▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉5/5—00:00:04要激活此项目的virtualenv,请运行pipenvshell。或者,使用pipenvrun在vi??rtualenv中运行命令。[root@shiyanloumyproject]#ll-altotal12drwxr-xr-x.2rootroot39Jan3114:09。博士-xr-x---。17rootroot4096Jan3114:08..-rw-r--r--.1rootroot153Jan3114:09Pipfile-rw-r--r--。1rootroot1914Jan31Jan3114:09Pipfile.lock[root@shiyanloumyproject]#如果需要指定python版本$pipenv--three#一般指python版本$pipenv--python3.7#或者,具体指到某个python版本$pipenv--python#或者,具体指python4.2在某个位置进入/退出/删除虚拟环境[root@shiyanloumyproject]#pipenvshell#回车虚拟环境在虚拟环境中启动子shell…。/root/.local/共享/virtualenvs/myproject-zKJX12a5/bin/activate[root@shiyanloumyproject]#./root/.local/share/virtualenvs/myproject-zKJX12a5/bin/activate(myproject)[root@shiyanloumyproject]#exit#退出虚拟环境exit[root@shiyanloumyproject]#pipenv--rm#删除整个环境Removingvirtualenv(/root/.local/share/virtualenvs/myproject-zKJX12a5)...[root@shiyanloumyproject]#有几点需要注意:平时安装和卸载包的时候不需要进入退出先虚拟环境,直接在工程文件中安装/卸载xxx即可。退出虚拟环境,不要停用。请使用exit,否则pipenv下次进入会报如下错误[root@shiyanloumyproject]#pipenvshellShellforUNKNOWN_VIRTUAL_ENVIRONMENTalreadyactivated没有采取任何措施来避免嵌套环境。[root@shiyanloumyproject]#pipenv--rm不会删除生成的Pipfile和Pipfile.lock4.3管理开发环境通常会有一些Python包只在你的开发环境中需要,在生产环境中不需要,例如单元测试包Pipenv使用--dev标志来区分两种环境。换句话说,-dev参数可帮助您区分同一虚拟环境中的开发环境和非开发环境。$pipenvinstall--devpytest在虚拟环境中运行命令,使用运行参数,提供要运行的命令:$pipenvrunpythonmanage.pyrunserver这将使用与当前虚拟环境关联的Python解释器来执行命令。或者干脆执行脚本:$pipenvrunpythonyour_script.py如果不想每次运行Python都输入那么多字符,可以在shell中设置别名,例如:$aliasprp="pipenvrunpython》冻结Pipfile,相当于打包输出项目使用的第三方库列表,类似于在virtualenv中生成requirements.txt文件。通过更新Pipfile.lock冻结库名称及其版本及其依赖项列表。需要使用lock参数:[root@shiyanloumyproject]#pipenvlockLocking[dev-packages]dependencies...Locking[packages]dependencies...?成功!更新了Pipfile.lock(748999)![root@shiyanloumyproject]#定位项目路径,虚拟环境,Python解释器,显示依赖,卸载包[root@shiyanloumyproject]#pipenv--where#定位项目路径/root/myproject[root@shiyanloumyproject]#pipenv--venv#定位虚拟环境/root/.local/share/virtualenvs/myproject-zKJX12a5[root@shiyanloumyproject]#pipenv--py#定位Python解释器/root/.local/share/virtualenvs/myproject-zKJX12a5/bin/python[root@shiyanloumyproject]#pipenvgraph#showdependenciesatomicwrites==1.2.1attrs==18.2.0Django==2.1.5-pytz[required:Any,installed:2018.9]more-itertools==5.0.0-6[要求:>=1.0.0,<2.0.0,安装:1.12.0]py==1.7.0requests==2.21.0-certifi[要求:>=2017.4.17,安装:2018.11。29]-chardet[要求:>=3.0.2,<3.1.0,安装:3.0.4]-idna[要求:>=2.5,<2.9,安装:2.8]-urllib3[要求:>=1.21.1,<1.25,installed:1.24.1][root@shiyanloumyproject]#pipenvuninstall--all#UninstallallpackagesUn-installingall[dev-packages]and[packages]…找到12个已安装的包,正在清除...正在卸载Django-2.1.5:成功卸载Django-2.1.5...稍微...环境现在已清除并焕然一新![root@shiyanloumyproject]#4.4有个大坑等你跳pipenv有个缺点,lock不稳定,耗时长,安装包的时候记得加上--skip-lock,然后pipenv最后开发完成提交仓库时加锁,希望以后的版本可以优化。[root@shiyanloumyproject]#pipenvinstalldjango--skip-lockInstallingdjango...?InstallationSucceededInstallingdependenciesfromPipfile...▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉2/2—00:00:02[root@shiyanloumyproject]#5.常用命令汇总pipenv有以下选项:$pipenvUsage:pipenv[OPTIONS]COMMAND[ARGS]...Options:--where显示工程文件路径--venv显示虚拟环境中实际文件路径--py显示虚拟环境Python解释器的路径--envs显示虚拟环境的选项变量--rm删除虚拟环境--bare最小输出--completion完整输出--man显示帮助页面--three/--two使用Python3/2创建虚拟环境(注意安装的Python版本)--pythonTEXT指定一个Python版本作为虚拟环境安装源--site-packages自带安装的第三方库原始的Python解释器--jumbotron一个复活节彩蛋,有效。--version版本信息-h,--help帮助信息pipenv可以使用的命令参数:命令:check检查安全漏洞图显示当前依赖图信息install安装虚拟环境或第三方库lock锁定并生成打开Pipfile.lock文件在编辑器中查看库run在虚拟环境中运行命令shell输入虚拟环境卸载卸载库更新卸载所有当前六、在线练习Pipenvplayground是官方在线练习网站:https://rootnroll.com/d/pipenv/,太棒了!【文章参考】Python快速入门最新最流行的pipenv虚拟环境Pipenv:PythonDevWorkflowforHumans