首页 文章 精选 留言 我的

精选列表

搜索[Bot管理],共10000篇文章
优秀的个人博客,低调大师

基于Tablestore的共享汽车管理平台

前言 目前出行市场主要分为传统和新兴两个阵营:私家车、公共交通、出租车和长租车为传统出行提供服务,共享单车、网约车以及分时租赁共享汽车则是最近几年兴起的出行方式。_图1 出行方式分析_出行者往往是在成本和出行便捷之间权衡选择出行方式。从出行距离来看,在0~10公里以内,共享单车、网约车以及出租车兼具了低成本以及灵活性两个优势,所以往往是出行者的首选。超过100公里以上,私家车以及长租车则会显现其便捷性。但是在10~100公里之间,则存在一个出行服务真空市场。另外,在一二线城市中,10公里以上的出行需求还是非常大的,加上近几年国家的政策导向,国内出现了很多共享汽车租赁平台。按照罗兰贝格估算,2025年有600万辆分时租赁汽车,每辆车每天3-4单,日订单量约2000万单。这个行业还是具备很大的潜力。本文主要介绍如何基于Tablestor

优秀的个人博客,低调大师

SSM+maven实现答题管理系统(二)

好的,现在我们来实现删除模板(model表删除记录)的功能,删除功能不难做,主要我们这次实现的是批量删除功能。 一.思路整理 首先我们删除模板是根据模板的id来删除的,不管是单项删除还是批量删除,我们这里使用layui获取当前行的功能就能获取模板的id 其次不管单项删除还是批量删除,只要将id放入数组中,后端对数组进行遍历,就能达到单项删除/批量删除 二.代码实现 思路实现以后,我们上代码。 View层: var id_array = []; //获取选中行 // 获取选中行 这里我们可以选择删除 这里的id_array是一个隐藏的值 device对应device_id user对应code survry对应model_id table.on('checkbox(test)', function(obj) { //监听复选框 if (obj.type == 'all') { if (obj.checked == true) { var data = table.cache.dataCheck; //批量操作的表格复选框 id_array = []; for (var l = 0; l < data.length; l++) { id_array.push(data[l].model_id); } console.log(id_array); } else { id_array = []; } } else { if (obj.checked == true) { id_array.push(obj.data.model_id); console.log(id_array); } else { var index = id_array.indexOf(obj.data.model_id); id_array.splice(index, 1); console.log(id_array); } } }); $('#btn-delete-all').click(function() { //删除全部通过一个获取选中行的值,来删除 layer.confirm('您确定要删除这些数据吗?', function(index) { //打开正在加载中弹出层 layer.msg('加载中', { icon: 16, shade: 0.01, time: '9999999' }); var url = "survey/del_model"; var data = { model_id: id_array //这里将当前的model_id传到后端 } $.post(url, data, function(data) { layer.close(layer.index); //关闭正在加载中弹出层 console.log(id_array); if (data.code == 1) { layer.msg(data.msg, { icon: 6 }); location.reload(); } else { layer.msg(data.msg, { icon: 5 }); } }, "json"); }); }); 首先对数据表格进行监听,如果数据表格的当前行被选中,则往id_array数组中push一个id,有多少个,push多少个,而后我们将数组用ajax上传,键名为model_id. Controller层: //返回数据用responseBody //删除model @RequestMapping(value="Index/survey/del_model") @ResponseBody public Map<String,Object> delModel(HttpServletRequest req) throws IOException { String[] arr = req.getParameterValues("model_id[]");//前端传来的modelId int code; String msg; // if(arr!=null) // return api.returnJson(3,arr[0]); for (int i = 0; i < arr.length; i++) { List<Choose> is_answer=chooseService.findChooseByModelId(arr[i]); if (!is_answer.isEmpty()) { return api.returnJson(3,"抱歉,题目已经被作答,无法删除"); } continue; } //如果没有 那么当前选中模板的题目都没有被答过 作级联删除 删除模板表 删除题目表 删除选项表(根据model查出Qsn 再根据qsnId删除Option) int is_del=modelService.deleteModelByIds(arr);//删除模板表 for (int i = 0; i <arr.length ; i++) { int is_del_qsn=qsnService.deleteModel2Qsn(arr[i]);//删除题目表 List<Qsn> qsnList=qsnService.findQsnList(arr[i]);//得到题目 System.out.println(qsnList); for (int j = 0; j <qsnList.size() ; j++) {//删除选项表 int isDelOptions=detailService.deleteOptionsByQsnId(qsnList.get(j).getQsnId()); } } //先查询模板下的题目list 然后遍历list,根据item.id 即qsnId来删除 // String[] is_del_option 还缺删除选项表的逻辑 if (is_del!=0){ code=1; msg="success"; }else { code=2; msg="fail"; } return api.returnJson(code,msg); } 这里进行说明一下,区别于tp5,我们使用httpservlet.request的getParameterValues()方法来获取前端传入的array数组 Service层: modelService: package com.sl.example.service; import com.sl.example.pojo.Model; import java.util.List; public interface ModelService { public List<Model> findAllModel(); public int deleteModelById(String modelId); public int deleteModelByIds(String[] arr); public int InsertModel(Model model); public Model selectModelById(String modelId); } modelServiceImpl: package com.sl.example.service; import com.sl.example.dao.ModelMapper; import com.sl.example.pojo.Model; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @Service("modelService") @Transactional public class ModelServiceImpl implements ModelService{ @Resource private ModelMapper modelMapper; @Override public List<Model> findAllModel() { return modelMapper.selectAllModel(); } @Override public int deleteModelById(String modelId) { return modelMapper.deleteByPrimaryKey(modelId); } @Override public int deleteModelByIds(String[] arr) { return modelMapper.deleteByIds(arr); } @Override public int InsertModel(Model model) { return modelMapper.insertSelective(model); } @Override public Model selectModelById(String modelId) { return modelMapper.selectByPrimaryKey(modelId); } } 将DAO层也贴出来: package com.sl.example.dao; import com.sl.example.pojo.Model; import java.util.List; public interface ModelMapper { int deleteByPrimaryKey(String modelId); int deleteByIds(String[] list); int insert(Model record); int insertSelective(Model record); Model selectByPrimaryKey(String modelId); List<Model> selectAllModel(); int updateByPrimaryKeySelective(Model record); int updateByPrimaryKey(Model record); } 对应的ModelMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.sl.example.dao.ModelMapper" > <resultMap id="BaseResultMap" type="com.sl.example.pojo.Model" > <constructor > <idArg column="model_id" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="name" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="time" jdbcType="DATE" javaType="java.util.Date" /> <arg column="create_name" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="rmk2" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="rmk3" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="rmk4" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="rmk5" jdbcType="VARCHAR" javaType="java.lang.String" /> </constructor> </resultMap> <sql id="Base_Column_List" > model_id, name, time, create_name, rmk2, rmk3, rmk4, rmk5 </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select <include refid="Base_Column_List" /> from t_gr_qsn_model where model_id = #{modelId,jdbcType=VARCHAR} </select> <select id="selectAllModel" resultMap="BaseResultMap" resultType="java.util.List"> select <include refid="Base_Column_List" /> from t_gr_qsn_model </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > delete from t_gr_qsn_model where model_id = #{modelId,jdbcType=VARCHAR} </delete> <delete id="deleteByIds" parameterType="java.util.Arrays"> delete from t_gr_qsn_model where model_id in <foreach collection="array" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach> </delete> <insert id="insert" parameterType="com.sl.example.pojo.Model" > insert into t_gr_qsn_model (model_id, name, time, create_name, rmk2, rmk3, rmk4, rmk5) values (#{modelId,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{time,jdbcType=DATE}, #{createName,jdbcType=VARCHAR}, #{rmk2,jdbcType=VARCHAR}, #{rmk3,jdbcType=VARCHAR}, #{rmk4,jdbcType=VARCHAR}, #{rmk5,jdbcType=VARCHAR}) </insert> <insert id="insertSelective" parameterType="com.sl.example.pojo.Model" > insert into t_gr_qsn_model <trim prefix="(" suffix=")" suffixOverrides="," > <if test="modelId != null" > model_id, </if> <if test="name != null" > name, </if> <if test="time != null" > time, </if> <if test="createName != null" > create_name, </if> <if test="rmk2 != null" > rmk2, </if> <if test="rmk3 != null" > rmk3, </if> <if test="rmk4 != null" > rmk4, </if> <if test="rmk5 != null" > rmk5, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides="," > <if test="modelId != null" > #{modelId,jdbcType=VARCHAR}, </if> <if test="name != null" > #{name,jdbcType=VARCHAR}, </if> <if test="time != null" > #{time,jdbcType=DATE}, </if> <if test="createName != null" > #{createName,jdbcType=VARCHAR}, </if> <if test="rmk2 != null" > #{rmk2,jdbcType=VARCHAR}, </if> <if test="rmk3 != null" > #{rmk3,jdbcType=VARCHAR}, </if> <if test="rmk4 != null" > #{rmk4,jdbcType=VARCHAR}, </if> <if test="rmk5 != null" > #{rmk5,jdbcType=VARCHAR}, </if> </trim> </insert> <update id="updateByPrimaryKeySelective" parameterType="com.sl.example.pojo.Model" > update t_gr_qsn_model <set > <if test="name != null" > name = #{name,jdbcType=VARCHAR}, </if> <if test="time != null" > time = #{time,jdbcType=DATE}, </if> <if test="createName != null" > create_name = #{createName,jdbcType=VARCHAR}, </if> <if test="rmk2 != null" > rmk2 = #{rmk2,jdbcType=VARCHAR}, </if> <if test="rmk3 != null" > rmk3 = #{rmk3,jdbcType=VARCHAR}, </if> <if test="rmk4 != null" > rmk4 = #{rmk4,jdbcType=VARCHAR}, </if> <if test="rmk5 != null" > rmk5 = #{rmk5,jdbcType=VARCHAR}, </if> </set> where model_id = #{modelId,jdbcType=VARCHAR} </update> <update id="updateByPrimaryKey" parameterType="com.sl.example.pojo.Model" > update t_gr_qsn_model set name = #{name,jdbcType=VARCHAR}, time = #{time,jdbcType=DATE}, create_name = #{createName,jdbcType=VARCHAR}, rmk2 = #{rmk2,jdbcType=VARCHAR}, rmk3 = #{rmk3,jdbcType=VARCHAR}, rmk4 = #{rmk4,jdbcType=VARCHAR}, rmk5 = #{rmk5,jdbcType=VARCHAR} where model_id = #{modelId,jdbcType=VARCHAR} </update> </mapper> 我们来试验一下。 1.gif 成功啦,下一节我们讲对应某一套题目模板下的题目的增删。

优秀的个人博客,低调大师

我来悟微服务(3)-需求管理

无限合并 最近工作上接到一个需求模块:关于账号自动合并的问题。简化来讲,手机1和邮箱1是一个账号,手机1和邮箱2请求过来创建账号时,由于手机号相同,自动合并为一个账号。手机3和邮箱2再过来请求创建账号,由于邮箱相同,自动合并为一个账号。手机3和邮箱4过来请求创建账号时,又因为手机号相同,再次合并为一个账号……假如是个访问量很大并且又这么巧的时候,就类似于无限合并了。实际上可能仅会出现几笔,不会这样无限循环下去。但我是一个容易多想的人。账号合并,又关联着和账号相关的数据的迁移,从我个人的角度来说,这样没有边界防御的需求,我内心是拒绝的,但还没想好更好的办法,暂且如此了。 这个话题联想到微服务,微服务能解决这种问题么?很遗憾,微服务并不是想象中的那么强大。账号合并本质上可以做成一个微服务,但微服务并不能解决这种业务问题。 我认识的微服务是为了方便水平扩展,方便使用体验异构技术,方便快速试错,方便部署,能最终实现高可用高并发。你了解再多的微服务知识,也不是用于解决此类业务问题。 对于此类业务问题,一般方式是判断需求是否合理?不合理的需求可以适当拒绝掉。 再着看是谁提的?如果是普通客户,尽量用其他更简便容易维护的方式代替。如果是金主或上层领导派发需求,那就只能在总结风险的基础上,一步一步往前看吧。 第三看需求是否通用,通用化的解决方案一般是更易理解,更适合推广。定制化得需求是耗时耗力的。 第四判断影响范围,如果是个高风险,又耗时又要牵扯很多旧业务,你敢动么?谨慎谨慎再谨慎。 需求判断阶段完毕,下面说说规避风险 第一,清晰的标注需求影响边界,改动后要及时单元测试或人工测试。你改的任何一行代码都有可能引发一个隐藏的碧游鸡。 第二,不要盲目动刀,一定要分析需求。对需求茫然的情况下,盲目码砖,你会很累的。更有甚者,需求本身只是显示了冰山一角,还有广大的未知冰山底层埋藏。如果不能提前发现,你的时间会越来越短,要做的事反而越来越多。这是一种失控。有时候失控是可预知但必须迎难而上的。有时候又可以轻易靠几句话轻易甩锅的。这本来也是一种修炼。 第三,人员分配。对合作的项目成员要有必要的了解,擅长的人做擅长的事。 第四,会议纪要。有时候频繁地会议是少不了的,有营养的思路应该记录下来方便实践。有疑问应及时去讨论,不要想当然。想当然是最浪费时间的事情。 这些事情和微服务无关。但这些功能最终可以称为一个微服务。这可以理解为微服务开发过程如何识别需求,开发需求的思路。 微服务来源于生活高于生活。 首发简书:https://www.jianshu.com/p/ab4f11fb4e77 作者:从此启程/范存威 出处:http://www.cnblogs.com/fancunwei/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。如文章对您有用,烦请点个推荐再走,感谢! 本博客新开通打赏,鼠标移到右侧打赏浮动处,即可赏博主点零花钱,感谢您的支持!

优秀的个人博客,低调大师

Mac上使用Jenv管理多个JDK版本

使用Java时会接触到不同的版本。大多数时候我在使用Java 8,但是因为某些框架或是工具的要求,这时不得不让Java 7上前线。一般情况下是配置JAVA_HOME,指定不同的Java版本,但是这需要人为手动的输入。如果又要选择其他版本,就需要对JAVA_HOME重新进行设置。终于,我发现了JEnv。 正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友。使用简单的命令就可以在不同的Java版本之间进行切换。如果你使用过rbenv,你会发现JEnv就如同rbenv的Java版一样。 基本使用: 在Mac OS下使用Homebrew安装JEnv: > brew install jenv 安装成功后需要进行一下简单的配置,让它可以起作用: > echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile > echo 'eval "$(jenv init -)"' >> ~/.bash_profile 好了,JEnv已经安装好了,让我们来看一下它找见哪个Java版本了: > jenv versions * system (set by /Users/bxpeng/.jenv/version) 它只找到了系统默认的Java,*表示当前选择的版本。尽管我已经下载了其他版本的Java,但是它并不会自动发现 和rbenv不同的是,JEnv不能自己安装任何版本的Java,所以需要我们手动安装好之后再用JEnv指向它们。 安装Java 7,可以在Oracle进行下载.它将安装到/Library/Java/JavaVirtualMachines/下; 安装Java 8,可以在Oracle进行下载.它将安装到/Library/Java/JavaVirtualMachines/下。 使用jenv add将Java 7、Java 8加入jenv中: > jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/ 1.7 added 1.7.0.71 added oracle64-1.7.0.71 added > jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/ 1.8 added 1.8.0.25 added oracle64-1.8.0.25 added 现在运行jenv versions会显示: > jenv versions * system (set by /Users/bxpeng/.jenv/version) 1.7 1.7.0.71 oracle64-1.7.0.71 1.8 1.8.0.25 oracle64-1.8.0.25 对于多余的版本使用jenv remove可以从jEnv中去掉不需要的Java版本: > jenv remove 1.6 JDK 1.6 removed 整理后,再运行jenv versions会显示: > jenv versions * system (set by /Users/bxpeng/.jenv/version) 1.7.0.71 1.8.0.25 选择一个Java版本,运行jenv local,例如: > jenv local 1.8.0.25 > java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) OK,我们已经成功地指定了某文件夹中local的Java版本。我们也可以运行jenv global设置一个默认的Java版本,运行jenv which java显示可执行的Java的完整路径。 你也可以在特定的文件夹下使用.java-version文件来设定Java的版本。当我需要在Project中使用Java 7时,仅仅需要把1.7.0.71作为内容保存在.java-version文件中,当进入该文件夹时,JEnv会自动地帮助我设定local的Java的版本。

优秀的个人博客,低调大师

使用virtualenvwrapper模块管理python虚拟环境

1.pip安装virtualenvwrapper [root@localhost ~]# pip install virtualenvwrapper # 安装virtualenvwrapper [root@localhost ~]# pip list | grep virtualenvwrapper virtualenvwrapper (4.8.2) 2.配置环境变量 [root@localhost ~]# find / -name virtualenvwrapper.sh # 查找virtualenvwrapper.sh所有的目录 /usr/bin/virtualenvwrapper.sh [root@localhost ~]# mkdir .virtualenvs # 创建虚拟环境的存放目录 [root@localhost ~]# vi .bashrc # 编辑家目录下的.bashrc文件,在文件末尾添加下面的两行内容 export WORKON_HOME=$HOME/.virtualenvs source /usr/bin/virtualenvwrapper.sh [root@localhost ~]# source .bashrc # 重新加载.bashrc文件,使配置立即生效 virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkproject virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkproject virtualenvwrapper.user_scripts creating /root/.virtualenvs/initialize virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkvirtualenv virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkvirtualenv virtualenvwrapper.user_scripts creating /root/.virtualenvs/prermvirtualenv virtualenvwrapper.user_scripts creating /root/.virtualenvs/postrmvirtualenv virtualenvwrapper.user_scripts creating /root/.virtualenvs/predeactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/postdeactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/preactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/postactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/get_env_details 3.使用 mkvirtualenv 命令创建虚拟环境 [root@localhost bin]# mkvirtualenv env27 # 创建env27虚拟环境,创建完成后切换到env27虚拟环境 New python executable in /root/.virtualenvs/env27/bin/python2 Also creating executable in /root/.virtualenvs/env27/bin/python Installing setuptools, pip, wheel...done. virtualenvwrapper.user_scripts creating /root/.virtualenvs/env27/bin/predeactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env27/bin/postdeactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env27/bin/preactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env27/bin/postactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env27/bin/get_env_details (env27) [root@localhost bin]# pip list # 列出env27虚拟环境下所有模块 Package Version ---------- ------- pip 10.0.1 setuptools 40.0.0 wheel 0.31.1 (env27) [root@localhost bin]# python # 进入env27虚拟环境的python解释器 Python 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> exit() (env27) [root@localhost bin]# pip install -i https://pypi.douban.com/simple django==1.11.6 # 在env27虚拟环境中安装1.11.6版本的Django Looking in indexes: https://pypi.douban.com/simple Collecting django==1.11.6 Downloading https://pypi.doubanio.com/packages/82/33/f9d2871f3aed5062661711bf91b3ebb03daa52cc0e1c37925f3e0c4508c5/Django-1.11.6-py2.py3-none-any.whl (6.9MB) 100% |████████████████████████████████| 7.0MB 468kB/s Collecting pytz (from django==1.11.6) Downloading https://pypi.doubanio.com/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB) 100% |████████████████████████████████| 512kB 521kB/s Installing collected packages: pytz, django Successfully installed django-1.11.6 pytz-2018.5 (env27) [root@localhost bin]# pip list # 列出env27虚拟环境下所有模块 Package Version ---------- ------- Django 1.11.6 pip 10.0.1 pytz 2018.5 setuptools 40.0.0 wheel 0.31.1 (env27) [root@localhost bin]# pip list | grep Django Django 1.11.6 (env27) [root@localhost bin]# deactivate # 退出env27虚拟环境 4.安装指定python版本的虚拟环境 [root@localhost ~]# mkvirtualenv env36 -p /usr/local/python3/bin/python3.6 # 指定python解释器路径创建env36虚拟环境 Running virtualenv with interpreter /usr/local/python3/bin/python3.6 Using base prefix '/usr/local/python3' New python executable in /root/.virtualenvs/env36/bin/python3.6 Also creating executable in /root/.virtualenvs/env36/bin/python Installing setuptools, pip, wheel...done. virtualenvwrapper.user_scripts creating /root/.virtualenvs/env36/bin/predeactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env36/bin/postdeactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env36/bin/preactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env36/bin/postactivate virtualenvwrapper.user_scripts creating /root/.virtualenvs/env36/bin/get_env_details (env36) [root@localhost ~]# python # 打开env36虚拟环境中的python解释器 Python 3.6.5rc1 (default, Jul 12 2018, 22:57:46) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() (env36) [root@localhost ~]# pip list # 列出env36虚拟环境下安装的所有模块 Package Version ---------- ------- pip 10.0.1 setuptools 40.0.0 wheel 0.31.1 (env36) [root@localhost ~]# pip install -i https://pypi.douban.com/simple django # 在env36虚拟环境中安装最新版本的Django:2.0.7 Looking in indexes: https://pypi.douban.com/simple Collecting django Downloading https://pypi.doubanio.com/packages/ab/15/cfde97943f0db45e4f999c60b696fbb4df59e82bbccc686770f4e44c9094/Django-2.0.7-py3-none-any.whl (7.1MB) 100% |████████████████████████████████| 7.1MB 472kB/s Collecting pytz (from django) Downloading https://pypi.doubanio.com/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB) 100% |████████████████████████████████| 512kB 622kB/s Installing collected packages: pytz, django (env36) [root@localhost ~]# pip list # 列出env36虚拟环境下安装的所有模块 Package Version ---------- ------- Django 2.0.7 pip 10.0.1 pytz 2018.5 setuptools 40.0.0 wheel 0.31.1 也可以使用 --python 指定python解释器的方式创建虚拟环境,完整命令如下: mkvirtualenv env36 --python /usr/local/python3/bin/python3.6 5.使用 lsvirtualenv 命令列出所有虚拟环境 (env36) [root@localhost ~]# lsvirtualenv -b # 以简短方式列出当前系统中所有的虚拟环境 env27 env36 (env36) [root@localhost ~]# lsvirtualenv -l # 以长格式方式列出当前系统中所有的虚拟环境 env27 ===== env36 ===== (env36) [root@localhost ~]# lsvirtualenv -h # 显示当前命令的帮助信息 lsvirtualenv [-blh] -b -- brief mode -l -- long mode -h -- this help message 6.使用 workon 命令切换虚拟环境 (env36) [root@localhost ~]# deactivate # 退出env36虚拟环境 [root@localhost ~]# workon env27 # 进入env27虚拟环境 (env27) [root@localhost ~]# pip list # 列出env27虚拟环境下安装的所有模块 Package Version ---------- ------- Django 1.11.6 pip 10.0.1 pytz 2018.5 setuptools 39.1.0 wheel 0.31.1 (env27) [root@localhost ~]# workon env36 # 进入env36虚拟环境 (env36) [root@localhost ~]# pip list # 列出env36虚拟环境下安装的所有模块 Package Version ---------- ------- Django 2.0.7 pip 10.0.1 pytz 2018.5 setuptools 40.0.0 wheel 0.31.1 (env36) [root@localhost ~]# 7.使用 deactivate 命令注销当前虚拟环境 (env36) [root@localhost ~]# deactivate # 退出env36虚拟环境 [root@localhost ~]# workon env27 # 进入env27虚拟环境 (env27) [root@localhost ~]# python # 打开env27虚拟环境的python解释器 Python 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> exit() (env27) [root@localhost ~]# deactivate # 退出env27虚拟环境 [root@localhost ~]# 8.使用 cpvirtualenv 命令复制虚拟环境 [root@localhost ~]# workon env36 # 进入env36虚拟环境 (env36) [root@localhost ~]# cpvirtualenv env36 env36_bak # 复制env36虚拟环境为env36_bak Copying env36 as env36_bak... (env36_bak) [root@localhost ~]# python # 打开env36_bak虚拟环境的python解释器 Python 2.7.5 (default, Aug 4 2017, 00:39:18) # python解释器为2.7.5版本 [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> exit() (env36_bak) [root@localhost ~]# pip list # 列出env36_bak虚拟环境下安装的所有模块 Package Version ---------- ------- Django 2.0.7 pip 10.0.1 pytz 2018.5 setuptools 40.0.0 wheel 0.31.1 (env36_bak) [root@localhost ~]# cpvirtualenv env27 env27_bak # 复制env27虚拟环境为env27_bak Copying env27 as env27_bak... (env27_bak) [root@localhost ~]# python # 打开env27_bak虚拟环境的python解释器 Python 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> exit() (env27_bak) [root@localhost ~]# 在上面的命令结果里,使用cpvirtualenv命令复制得到新的虚拟环境env36_bak,python解释器版本为python2.7.5,是CentOS7系统内置的python版本 但是使用pip list命令列出env36_bak虚拟环境里安装的Django是2.0.7版本的,这是env36虚拟环境里安装的Django版本。 通过查阅官方文档,官方文档上指明了cpvirtualenv命令不完美,使用cpvirtualenv命令需要注意 9.使用 cdsitepackages 命令进入到当前环境的site-packages目录 使用lssitepackages命令列出当前环境中site-packages内容 (env27_bak) [root@localhost ~]# cdsitepackages # 进入到env27_bak虚拟环境的site-packages目录 (env27_bak) [root@localhost site-packages]# lssitepackages # 列出env27_bak虚拟环境中site-packages内容 easy_install.py pip pkg_resources setuptools-40.0.0.dist-info wheel-0.31.1.dist-info easy_install.pyc pip-10.0.1.dist-info setuptools wheel (env27_bak) [root@localhost site-packages]# workon env36 # 切换到env36虚拟环境 (env36) [root@localhost site-packages]# cdsitepackages # 进入env36虚拟环境的site-packages目录 (env36) [root@localhost site-packages]# lssitepackages # 列出env36虚拟环境中site-packages内容 django pip-10.0.1.dist-info pytz-2018.5.dist-info wheel-0.31.1.dist-info Django-2.0.7.dist-info pkg_resources setuptools easy_install.py __pycache__ setuptools-40.0.0.dist-info pip pytz wheel (env36) [root@localhost site-packages]# python # 打开env36虚拟环境的python解释器 Python 3.6.5rc1 (default, Jul 12 2018, 22:57:46) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() (env36) [root@localhost site-packages]# 10.使用 rmvirtualenv 命令删除环境 (env36) [root@localhost site-packages]# lsvirtualenv -b # 列出当前系统中所有的虚拟环境 env27_bak env27 env36_bak env36 (env36) [root@localhost site-packages]# rmvirtualenv env36_bak # 删除env36_bak虚拟环境 Removing env36_bak... (env36) [root@localhost site-packages]# rmvirtualenv env27_bak # 删除env27_bak虚拟环境 Removing env27_bak... (env36) [root@localhost site-packages]# lsvirtualenv -b # 列出当前系统中所有的虚拟环境 env27 env36 (env36) [root@localhost site-packages]# 11.使用 wipeenv 命令卸载虚拟环境内所有第三方包 (env36) [root@localhost site-packages]# pip list # 列出env36虚拟环境下所有模块 Package Version ---------- ------- Django 2.0.7 pip 10.0.1 pytz 2018.5 setuptools 40.0.0 wheel 0.31.1 (env36) [root@localhost site-packages]# wipeenv # 卸载env36虚拟环境内所有第三方包 Uninstalling packages: Django==2.0.7 pytz==2018.5 Uninstalling Django-2.0.7: Successfully uninstalled Django-2.0.7 Uninstalling pytz-2018.5: Successfully uninstalled pytz-2018.5 (env36) [root@localhost site-packages]# pip list # 列出env36虚拟环境下所有模块 Package Version ---------- ------- pip 10.0.1 setuptools 40.0.0 wheel 0.31.1 (env36) [root@localhost site-packages]# lsvirtualenv -b # 列出当前系统中所有的虚拟环境 env27 env36 (env36) [root@localhost site-packages]# workon env27 # 切换到env27虚拟环境 (env27) [root@localhost site-packages]# pip list # 列出env27虚拟环境下所有模块 Package Version ---------- ------- Django 1.11.6 pip 10.0.1 pytz 2018.5 setuptools 39.1.0 wheel 0.31.1 (env27) [root@localhost site-packages]# wipeenv # 卸载env27虚拟环境内所有第三方包 Uninstalling packages: Django==1.11.6 pytz==2018.5 Uninstalling pytz-2018.5: Successfully uninstalled pytz-2018.5 Uninstalling Django-1.11.6: Successfully uninstalled Django-1.11.6 (env27) [root@localhost site-packages]# pip list # 列出env27虚拟环境下所有模块 Package Version ---------- ------- pip 10.0.1 setuptools 39.1.0 wheel 0.31.1 (env27) [root@localhost site-packages]# deactivate # 退出env27虚拟环境

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册