深入浅析pycharm中 Make available to all projects的含义
作者:pfm685757 发布时间:2023-08-26 00:59:06
一、为什么要进行包管理?
python中的三方包琳琅满目,提供了各种各样的功能,使得我们免于自己去手写很多代码。比如,我们在测试接口的时候,我们用到了request,我们在测试前端页面的时候,我们用到了webdriver的包,移动UI自动化测试我们用到了airtest的包,诸如此类,不胜枚举。于是,我们在“天长地久”的使用过程中,积累的三方包越来越多,具体有多少,大家可以在命令行执行pip list看一下,数量可能超出自己的想象哦。那么现在,领导给你一个任务,让你开发一个项目,开发完之后,部署到公共的服务器上面。对于这个场景的包管理,我认为有不少人是这么做的:先在本地开发完成,然后使用pip freeze >requirements.txt生成依赖包列表文件。然后将代码放到服务器上之后,继续使用pip install -r requirements.txt在服务器上将依赖包安装好。当然,你的代码跑的66的。但是,在这个项目之前,你可能已经做了很多其他的项目,那些项目也有很多当前项目用不到的依赖包,如果不考虑环境隔离,按照上面的方式去做,当前项目的依赖包就不仅仅是当前项目的依赖包了。也就是说你当前的项目可能只需要10个三方包,你可能装了100个,严重浪费了时间和空间。另外,你的A项目使用django 1.8,另外一个B项目使用django 2.1,怎么实现呢?这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。
综上,包管理要解决的痛点就是:
1、不必要的包的安装,浪费时间
2、项目之间的依赖包隔离
二、怎么做
1、命令行 先安装虚拟环境模块
pip3 install virtualenv # 安装virtualenv
进入项目目录,创建python虚拟环境
cd haima_api
virtualenv --no-site-packages myvenv # myenv是虚拟环境名字,随便取
这样我们就创建好了haima_api项目的虚拟环境,参数--no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来。
激活虚拟环境
source myvenv/bin/activate
激活之后,命令行最前面会加上一个标识。如下。
这个时候,在命令行下面执行pip install安装后的包就只会安装到刚刚创建的虚拟环境下,只和当前的项目挂钩,与其他项目无关了。
2、使用pycharm
我们开发的时候,更多会使用到pycharm这个ide,新建项目的时候选择虚拟环境即可
pycharm使用虚拟环境创建项目
inherit global site-packages:勾选上的话代表创建的新项目需要copy一份全局包到虚拟环境。
Make available to all projects:勾选上,表示,当在虚拟环境下安装包的时候,copy一份到全局。
前面文章中一只提到了全局包和虚拟环境里的包,在此解释一下他们的存放位置:
全局包存放在python安装目录下的\Lib\site-packages子目录里。
虚拟环境包安装在关联的项目目录下面的\${虚拟环境名}\Lib\site-packages子目录里
三、项目部署时批量导包
在当前虚拟环境下,通过pip freeze > requirements.txt(名字随意)
在目标服务器上执行,pip install requirements.txt即可
综上,python项目间的包管理就是这么easy,当你要同时开发多个项目的时候,这个是必不可少的。
来源:https://blog.csdn.net/pfm685757/article/details/108590680


猜你喜欢
- 引言在观察OpenCV中某个函数在不同参数的情况下,所得到的效果的时候,我之前是改一次参数运行一次,这样做起来操作麻烦,效率低下。为了更便捷
- 思路步骤:创建一个可以序列化的类去数据库取数据交给序列化的类处理把序列化的数据返回前端操作流程:# 安装模块pip install djan
- 接着上篇的内容,这里实现一个交易记录链,废话不多说,先看图:跟之前的逻辑类似,但也有少许不同,这里多了一个payloadhash,以及对pa
- 记录了MySQL 5.7.19 winx64解压缩版安装教程,具体内容如下系统环境:Win7 x64软件准备:mysql 5.7.19 wi
- 如下所示:解读: transpose( ) 方法的参数是一个 由 轴编号(轴编号自0 开始) 序列构成的 元组。开始时,数组的轴编号序列是默
- 1、pyqtgraph库数据可视化效果还不错,特别是窗体程序中图像交互性较好;安装也很方便,用 pip 安装。2、在Python中新建一个
- hanxiaolian 为了躲避 lake2 ASP站长管理助手而写.. 一.绕过lake2 Asp木马扫描的小马 代码如下:<%&n
- 本文实例讲述了C#操作SQLite数据库方法。分享给大家供大家参考,具体如下:SQLite介绍SQLite is a software li
- 1.下载pyinstaller并解压(可以去官网下载最新版):https://github.com/pyinstaller/pyinstal
- 基于上一篇文章,这篇文章是关于使用coverage来实现代码覆盖的操作实例,源代码在上一篇已经给出相应链接。本篇文章字用来实现代码覆盖的源代
- 本文介绍机器学习中的Logistic回归算法,我们使用这个算法来给数据进行分类。Logistic回归算法同样是需要通过样本空间学习的监督学习
- 概述从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类
- 以前有过一篇类似的文章, 讲的比较简单只有三个插件而已, 所以这篇文章将全持续更新.jQuery UI 大名顶顶, 不用介绍, 它的各个控件
- 用户管理是绝大部分Web网站都需要解决的问题。用户管理涉及到用户注册和登录。用户注册相对简单,我们可以先通过API把用户注册这个功能实现了:
- clear()方法将删除字典中的所有项目(清空字典)语法以下是clear()方法的语法:dict.clear()参数
- 本文实例为大家分享了js实现弹幕特效的具体代码,供大家参考,具体内容如下此处使用HBuilder编译,最简单的弹幕效果,希望各位前辈不吝指教
- 本文将研究 ES6 的 for ... of 循环。旧方法在过去,有两种方法可以遍历 javascript。首先是经典的 for i 循环,
- 一、前奏在谈回调函数之前,先看下下面两段代码:不妨猜测一下代码的结果。function say (value) {  
- 代码如下:'个人代码风格注释(变量名中第一个小写字母表表示变量类型) 'i:为Integer型; 's:为Strin
- 本文实例讲述了Python使用dict.fromkeys()快速生成一个字典。分享给大家供大家参考,具体如下:>>> re