python 首次登陆outlook 脚本_记Python“用户环境”的一次完美应用
在之前寫過一篇關于虛擬環境使用的文章,但是還沒有好好的介紹一下 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“用户环境”的一次完美应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 发送广播_从0系统学An
- 下一篇: 海上瓶子下有东西吗_洗衣液瓶子我从来不扔