首页 > 编程知识 正文

python创建一个虚拟环境,python虚拟环境打包

时间:2023-05-06 17:53:27 阅读:181236 作者:4919

Python之所以强大,除了语言本身的特性外,更重要的是它拥有无处不在的第三方库。 强大的软件库使开发人员可以将精力集中在业务上,而不会避免制造车轮的浪费。 但是,由于许多软件库形成了复杂的依赖关系,Python2和Python3的长期纷争给使用Python开发的项目带来了很多麻烦,所以Python使用虚拟环境工具纯粹依赖于项目今天我们来介绍Python虚拟环境

一些概念Python虚拟环境涉及许多概念和工具,会困扰和妨碍使用,所以首先要了解一些概念和相关的工具

python版本python版本是python解析器本身的版本。 Python3与Python2不兼容,两大阵营之争由来已久,部分软件库需要设置两个版本的Python,同时开发者需要在一个环境中部署不同版本的Python,开发与梅因此,nodejs的nvm之类的版本管理器Pyenv出现了,可以创建相互隔离的Python环境,可以轻松地在环境中切换Python版本,但与Python虚拟环境没有太大关系

python软件包库软件源是一个库,可以在python第三方软件库的集合或市场上分发、下载和管理软件包。 其中,pypi(pythonpackageindex ) https://pypi.org/是官方指定的软件包库,根据其上的pip工具搜索、下载和安装软件包。 为了提高下载速度,世界上有很多Pypi的镜像服务器,国内也有多个软件资源。 例如,蚂蚁的软件来源如下。

3358 mirrors.a liyun.com/pypi/simple /还有其他软件源,例如正确进行科学计算的anaconda软件源

https://repo.anaconda.com/

pythonpackmanager软件包源中的软件包数量巨大且版本多样,因此需要利用pip、conda、Pipenv、Poetry等软件源代码管理工具

pip是最常用的软件包管理工具,使用pip install packagename命令格式安装软件包。 pypi软件包源中的conda经常作为科学计算领域的软件包管理工具,功能丰富且功能强大,使用了Anaconda repository和Anaconda Cloud。 conda不仅支持pytonda;除了软件包管理外,还可以提供相互隔离的软件环境。 Pipenv是悲伤月饼Reitz于2017年1月发布的Python依赖管理工具,目前由PyPA维护。 Pipenv可以自动管理虚拟环境和依赖文件。 它还提供了一系列命令和选项,用于实现各种依存关系和环境管理相关的操作。 Poetry与Pipenv类似,是Python虚拟环境和依赖管理工具,还提供打包和发布等打包管理功能。 可以将其视为Pipenv和Flit等工具的超集。 这样,就可以使用Poetry同时管理Python库和Python程序。 许多软件包管理工具不仅提供基本的软件包管理功能,还提供虚拟环境构建、程序管理等功能

Python虚拟环境python APP应用程序可以支持所有的python APP应用程序,因为经常需要使用一些软件包的第三方软件包或模块,并且需要依赖于特定的软件包或库版本在许多情况下,不同python APP应用所依赖的版本会发生冲突,无法满足其中一个,也无法运行另一个。 解决这个问题的方法是虚拟环境。 虚拟环境是一个包含特定Python解析器和某些软件包的自包含目录,每个APP应用程序可以使用不同的虚拟环境,从而解决了互依关系冲突,并且只需在虚拟环境中安装与APP应用程序相关的软件包或模块即可轻松部署

虚拟环境原理构建虚拟环境并不是一种新技术主要利用操作系统中环境变量和进程之间环境隔离的特性

操作系统环境变量为程序提供信息,可以创建信息交换介质,进程可以共享操作系统内的环境变量,并为进程指定环境变量。 其中,PATH是重要的环境变量,为操作系统和程序提供可执行文件的访问路径。 例如,将程序a.exe写入并存储在D:MyProgram中。 在命令行中运行a.exe时,将显示“找不到程序a.exe”消息。 如果将D:MyProgram的路径添加到PATH环境变量中,并输入a.exe,操作系统将从PATH提供的路径中逐一查找,以便找到系统。 这个时候,你能找到。 Linux和MacOS具有相似的特性,功能比Windows更丰富。

Python虚拟环境就是利用这一特性构建的。 激活虚拟环境时,激活脚本会将当前命令行程序的PATH更改为虚拟环境。 这样,执行命令将在修改后的PATH中进行搜索,避免原始PATH可以检测到的命令,从而实现Python环境的隔离。

在命令提示符前进行特殊标记,例如:以便开发人员可以方便地区分当前环境是否为虚拟环境,以及是否为虚拟环境

Python虚拟环境

创建

p>virtualenv 工具

在 python3.3 之前,只能通过 virtualenv 创建虚拟环境,首先需要安装 virtualenv

pip install virtualenv

安装完后,在当前目录下创建一个名为 myvenv 的虚拟环境:

virtualenv --no-site-packages myvenv

参数 --no-site-packages 的意思是创建虚拟环境时,不复制主环境中安装的第三方包,也就是创建一个 “干净的” 虚拟环境

virtualenv 还有很多参数,用于不同的使用场景,例如:

-p: 用于指定 Python 解析器,就是安装好的 Python 应用程序,默认为当前环境中的 Python--no-pip:不需要安装 pip,默认为安装--clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建

venv 模块

Python3.3 之后,可以用模块 venv 代替 virtualenv 工具,好处是不用单独安装,3.3 及之后的版本,都可以通过安装好的 Python 来创建虚拟环境:

python -m venv myvenv

可以在当前目录创建一个名为 myvenv 的虚拟环境

venv 有些参数,不过相比 virtualenv 少了些,这里简单介绍几个:

--without-pip: 不需要安装 pip,默认为安装--clear:如果创建虚拟环境的目录已经有了其他虚拟环境,清楚重建

因为 venv 是依附于一个 Python 解析器创建的,所以不需要指定 Python 解释器版本

激活

虚拟环境创建好后,需要激活才能在当前命令行中使用,可以理解成将当前命令行环境中 PATH 变量的值替换掉

通过 virtualenv 和 模块 venv 创建的虚拟环境,激活方式是一样的,即运行激活脚本

Windows 系统中,激活脚本路径是 <myvenv>Scriptsactivate.bat,如果是 powershell 命令行,脚本换成 Activate.ps1 , 注意将 <myvenv> 换成你自己的虚拟环境目录Linux 系统中,激活脚本路径是 <myvenv>/开心的柠檬/activate,默认脚本没有执行权限,要么设置脚本为可执行,要么用 source 命令执行,例如$ source myvenv/开心的柠檬/activate

激活后,可以在命令行中看到虚拟环境标记,如上图

打印 PATH,命令如下:

Linux 下:

echo $PATH

Windows 下

echo %PATH%

可以看到创建的虚拟环境脚本目录被加载了最前面

退出

退出虚拟环境很简单,只需要执行 deactivate 命令就行,这个命令也在虚拟环境的脚本目录下,因为激活时,将脚本目录设置到 PATH 中了,所以可以直接使用

退出虚拟环境相当于将 PATH 恢复成原来的

与开发工具配合

虽然通过激活脚本,很容易切换到虚拟环境,但是在实际开发中,还是不够方便,而且现在很多开发工具,特别是提供 Python 解析环境的开发工具,都可以和虚拟环境配合,在开发过程中几乎无感,对开发工作是很大的帮助

Visual Studio Code

VS Code 是个后起之秀,功能强大且具有丰富的插件资源,无疑是这两年发展最快的综合开发工具。现在的版本配置 Python 虚拟环境很简单,只需要选择一个 Python 解释器就好了

同时按下 Ctrl+Shift+P, 在弹出的命令窗口中输入 "解析器",然后在下拉列表中选择 "Python:选择解析器",这里会缓存一些已经创建好的解析器,如果没有想要的,可以选择 "Enter interpreter path" 来选择解析器路径,即已经创建好的虚拟环境脚本文件夹中的 Python 程序,就可以创建一个新的解析器

 

选择 Python 解析器

如果编辑的是 Python 代码文件,在状态栏中也可以选择和切换解释器,更为方便

 

选择 Python 解析器

Pycharm

Pycharm 应该是功能最好的 Python 开发工具,转为 Python 开发而生,除了基本的开发功能外,还提供项目创建、打包、测试等丰富功能,有很大的市场占有率

创建项目时,在项目创建对话框中,可以创建或者选择已经已有的解析器

 

选择 Python 解析器

选择创建新的解析器时,需要选择创建虚拟环境的工具,如 virtualenv;指定虚拟环境的目录;选择 Python 基础解析器,同 virtualenv 工具的 -p 参数的效果;以及是否要继承基础解析器的第三方库 和 是否将这个虚拟环境作为默认环境,即创建其他项目时默认选择

如果选择已存在的解析器,和 VS Code 差不多,可以选择已经缓存的或者指定解析器的路径

部署虚拟环境

之所以在开发时选择虚拟环境,除了避免库之间的冲突,还有重要的原因是方便部署,因为虚拟环境是独立的,仅包含了项目相关的依赖库,所以部署的效率更高,风险更小

一般部署流程是:

开发完成后,使用 pip freeze > requirements.txt 命令将项目的库依赖导出,作为代码的一部分将代码上传到服务器在服务器上创建一个虚拟环境激活虚拟环境,执行 pip install -r requirements.txt,安装项目依赖

怎么运行项目,需要看项目的具体情况

Web 项目 Web 项目一般使用 Django、Flask 的 Web 开发的提供 Web 服务的项目,部署时需要一个 Web 容器,作为程序的运行环境,容器的配置中都有一个虚拟环境的设置,其实是指定 Python 解析器的路径,将其设置为虚拟环境的目录或者 Python 解析器就可以了,启动时就用使用虚拟环境,并与其他环境隔离。例如 uWSGI 配置文件中 home 参数是用来指定解析器的。服务类项目 服务类项目就是需要以服务的形式长时间运行的,例如之前介绍的 公交闹钟,或者一些定时爬虫之类的,对于 Linux 而言,当前主流的服务方式是 Systemd,是一种比 init 更先进的服务管理工具,在服务脚本中, 设置 ExecStart 执行命令为全路径的虚拟环境的 Python 解析器,服务启动时,使用独立的虚拟环境了。Windows 服务,对于达成 EXE 包的,不需要配置虚拟环境,因为打包时已经考虑了环境问题了,如果是脚本运行的话,需要指定全路径的 Python 解析器单次运行项目 对于一些测试或者实验性质的项目,大多数情况下手动执行,只要在激活的虚拟环境下,或者用特定的 Python 解析器运行就好了,和在开发过程中运行区别不大其他虚拟环境管理工具 virtualenvwrapper:是对 virtualenv 的一个封装,还有针对 vim 用户和 emacs 用户的 扩展,能支持 bash/ksh/zshvirtualenvwrapper-win:针对 Windows batch shell 的 virtualenvwrapperpyenv:用来解决这类问题。它可以安装、卸载、编译、管理多个 python 版本,并随时将其中一个设置为工作环境pyenv-win:针对 Windows 的 pyenv

有兴趣的话可以试用一下

总结

今天主要了解了 Python 虚拟环境的相关概念和工具,并简单描述了实际工作中的一些使用方式,以便能在开发过程中使用。限于篇幅,没法就更多的内容详细展开,需要在实践中多试多用,Just DO It!

参考 https://docs.python.org/3/tutorial/venv.htmlhttp://greyli.com/back-to-virtualenv-venv-and-pip/https://www.jianshu.com/p/dcb281ee564ehttps://blog.csdn.net/SpuerCheng/article/details/81485154

睡前人工智能共享实验室新功能上线啦!

https://www.edu.futurelab.tv/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。