在之前写过一篇关于虚拟环境使用的文章,但是还没有好好的介绍一下 Python 的用户环境,原因是自己一直没遇到要使用 用户环境 的使用场景,所以就一直懒得写。恰巧这两天,自己遇到了一个使用用户环境的体验可以完爆虚拟环境的案例,就拿出来分享一下。

1. 我的使用背景

公司有数以万计的服务器,为了对实现对访问记录进行集中管理以及出于安全考虑,每台服务器都有访问限制,必须使用公司的跳板机才能登陆。

每个公司的员工在跳板机上都有自己的用户、 家目录,对于很多需要 root 权限的操作,是高度受限制的。

比如我现在我要在跳板机上实现远程登陆大批量的机器进行一些维护工作,当然我这里使用的还是 Python 来实现,这个 Python 脚本里有一些依赖库(比如 之前介绍过的 paramiko 这个神器),在跳板机上中并没有安装。

做为普通用户的你,是没有权限安装第三方包的。

问题就来了,我如何才能在跳板机中使用 paramiko 这个包呢?

2. 为何不使用虚拟环境?

既然不能对全局的 Python 环境进行更改,那我完全可以自己再创建一个环境,只要这个环境里事先装好 paramiko 这个包不就好了。

因此,使用虚拟环境是一种解决方案,但它并不是一个完美的解决方案。

原因有以下几点:

1、 创建虚拟环境的过程,步骤较多,比较复杂。这里的复杂是相对于我后面要使用的用户环境而言。

2、 虚拟环境是包含一整个 Python 解释器,存在大量与系统重复的包,size比较大,并不轻便。

3、 使用 console 模式调试的话,进入很不方便

就算你不使用 console 模式,你调用脚本的方式,也会很奇怪,你得这样

如果你不想使用这样,可以给这个脚本加个可执行权限,并在脚本的第一行指定你的解释器,省去了一点点麻烦,可即便如此,我仍然感觉很别扭。

你可能会问我:为什么不使用 virtualenv + virtualenvwrapper ,这样可以使用 workon 进入虚拟环境。

原因是跳板机里的都是很古老的包,你看上面的 Python 还是 2.7.5 呢,所以你所说的那些工具通通没有。

3. 用户环境原理

这里要介绍的这种方案(用户环境),可能很多人都没有使用过,甚至没有听过,它算是一个冷门但是非常好用的功能。

操作之前 ,先简单介绍一下它。

先提一个问题,Python 在查找导入包时,如果我们多个路径都有这个包,那 Python 如何确定应该从哪个路径进行导入呢?

答案是, 搜索导入路径是有优先级的,你可以通过 sys.path 进行查看。

可以看到路径 /home/wangbm/.local/lib/python2.7/site-packages 是优先于 /usr/lib64/python2.7/site-packages 路径的。

这就是 用户环境 的原理,只要我们将包装在自己家目录下,就可以优先于全局环境中进行查找。

使用起来,可以做到用户无感知,跟使用原生的全局环境并没有区别。

4. 具体操作方法

创建一个用户环境,并安装上你所需要的包,一条命令就能搞定,这可比虚拟环境简单方便多了。

那么怎么操作呢?

只要你在使用 pip 安装包时,加上 --user 参数,pip 就会将其安装在当前用户的 ~/.local/lib/python2.x/site-packages 下,而其他用户的 python 则不会受影响。

$ pip install --user pkg

这里要注意的是,不能使用这种方式,亲测它会将包装到全局环境下,具体原因我还没有深究。

$ python -m pip install --user pkg

为了让你理解这个过程,我这里来举个例子,并且验证其是否可以做到用户隔离。

有了这个思路,我就可以先在其他机器(前提自己必须拥有管理员权限 )上,创建一个用户环境,并且安装上 paramiko 这个包。

然后将这个用户环境,压缩拷贝至跳板机自己的家目录下的 .local/lib 目录下并解压。

然后直接使用 python 进入 console 模式,现在已经可以直接使用 paramiko 这个包了。

python 首次登陆outlook 脚本_记Python“用户环境”的一次完美应用相关推荐

  1. python 首次登陆outlook 脚本_Python 黑魔法,执行任意代码都会自动念上一段 平安经...

    最近的"平安经"可谓是引起了不小的风波啊. 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG. 为此,明哥今天分享一个 Python 的黑魔法,教你如何在 ...

  2. python怎么写游戏脚本_用PYTHON做一个简单的游戏脚本(基础,详细)

    引言 这段时间迷上了玩点点点的小游戏,但是某些重复的环节着实无聊,就想着能不能用PYTHON做一个游戏脚本,不过为了熟悉需要做脚本的各个模块,于是打算在4399上找一个比较像的游戏做个脚本练练手,后来 ...

  3. python自动导出数据脚本_使用python生成一个导出数据库的bat脚本文件的示例代码...

    这篇文章分享使用python生成一个导出数据库的bat脚本文件的示例代码 实例如下:# 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库 ...

  4. python批量拷贝数据脚本_使用python来玩转ensp~3-写个批量备份配置文件脚本

    目录回顾: 根据前面所学习的知识,可以远程登录设备下发命令等,现在已经可以转化为生产力了哈,今天小Q要实现的就是一个批量备份配置的小东西, 小Q通过学习产品文档了解到,可以通过以下四种方法进行备份配置 ...

  5. python自动发outlook邮件_使用python自动发邮件(163、QQ、outlook邮箱)

    import smtplib fromemail.mime.text import MIMEText fromemail.utils import formataddr fromdatetime im ...

  6. python自动点击脚本_用Python实现鼠标自动点击

    前言: 最近玩某页游时遇到一个重复任务,需要不停的接/交任务道具,数量巨大又十分麻烦,想去网上下脚本又找不到合适的,于是整了一个可以实现鼠标自动点击的小玩意.因为我之前没有任何编程基础,这两天自学又走 ...

  7. python编写网页游戏脚本_用Python脚本做一些网页游戏中力所能及的自动化任务

    下面是一段自动登录360传奇霸业游戏的脚本: from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyK ...

  8. python写自动答题脚本_编写Python脚本拉取优学院答案

    上个月审计了云班课和优学院的前端代码,实现了强制修改视频进度和获取选择题答案的功能.但是单个发包效率太低了,昨晚开始着手写了一个脚本,早上修改了一下,基本功能写出来了.考虑到风险,这个脚本是获取答案, ...

  9. python做按键精灵脚本_使用Python实现一个按键精灵 | 蓝士钦

    @HANK1998 其实,你这个代码,还有一个问题,鼠标键盘动作回放时,顺序会乱,线程同步问题,做不到鼠标动作和键盘动作交叉执行.,,我能力不太够了,,学的不深,不知道这个问题你解决没??? ---- ...

最新文章

  1. windows server服务器上部署java+tomcat网站域名配置
  2. FolderBrowserDialog(文件夹浏览对话框)
  3. 【Leaflet】鼠标提取坐标
  4. 阅读器xodo_佐道Xodo——手机最佳pdf阅读器
  5. PyTorch基础-Dropout和正则化-05
  6. 你被人工智能给忽悠了吗?原来我们曾经认为的都是假的
  7. IIS 启动不了(服务没有及时响应启动或控制请求)解决
  8. CentOS 7 上搭建 Nacos Cluster 集群
  9. c语言ax2bxc0,c语言程序用函数怎么输出ax2bxc=0?用C语言编号一个程序, 爱问知识人...
  10. 一刀两断划分子网例子
  11. 【概念理论】不存在的NOIP2016
  12. 应用程序无法正常启动(0x000007b)或者找不到dll文件(以vcruntime140d.dll为例)的原因原理分析和解决方法(亲测已解决)
  13. ios 纯代码怎么适配ipad_iOS屏幕适配(纯代码)
  14. 【Android】debug 状态下其签名文件 debug.keystore 相关(如何获得该文件,其密码,获取其sha1、MD5等)
  15. Java——判断回文
  16. java 表达式 日期加减_jdk8获取当前时间|时间加减|java8时间格式化|时间处理工具|时间比较|线程安全的时间处理方法...
  17. 北大自考计算机及应用,北大自考计算机哪个专业好
  18. 阅读笔记:Exploiting High-Level Semantics for NR Image Quality Assessment of Realistic Blur Image
  19. Jenkins DingTalk 钉钉通知插件
  20. VMware ESXi安装window10方法

热门文章

  1. Python多进程及多参数的处理方法
  2. 数据分析案例:亚洲国家人口数据计算
  3. python中的元组及注意事项
  4. 探索性数据分析EDA及数据分析图表的选择
  5. c语言基本数据类型常量,C语言基础学习基本数据类型-变量和常量
  6. iBeacon 初探
  7. 灵活强大的构建系统Gradle
  8. 没错,继事理图谱后,我们又搞事情了:数地工场自然语言处理语义开放平台正式对外发布!
  9. PHP 将Base64图片保存到 Sae storage
  10. [AH2017/HNOI2017] 大佬