python3环境搭建(python的沙盒环境virtualenv)
目录(?)[+]
事前準備 Linux Windows Virtualenv - Virtual Python Environment builder 安裝 使用方法 I. 建立虛擬環境 II. 啟動虛擬環境 III. 退出虛擬環境 IV. 在虛擬環境安裝新的 Python 套件 V. 從程式中指定使用虛擬環境的函數庫 延伸套件:Virtualenvwrapper I. 安裝 II. 使用方法 Pythonbrew 安裝 編譯前準備 使用方法 I. 列出可安裝的版本 II. 安裝新的版本 III. 清理安裝時產生的檔案 IV. 列出所有已安裝的版本 V. 切換已安裝的版本 VI. 批次在不同版本下測試 VII. 移除已安裝的版本 VIII. 與 Virtualenv 的整合 IX. Buildout X. 自我更新 參考資料VirtualEnv用于在一台机器上创建多个独立的python运行环境 ,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装 。
使用 VirtualEnv 的理由:
隔离项目之间的第三方包依赖 ,如A项目依赖django1.2.5,B项目依赖django1.3 。 为部署应用提供方便 ,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。使用说明:
安装: sudo easy_install virtualenv
建立新的运行环境:virtualenv <env-name>
进入相应的独立环境:source <env-path>/bin/activate
最近无意中看到一本书《Python Testing Cookbook》 ,正好我们项目最近要提高测试质量 ,就 ”翻“来看看 。书中介绍了一些方便的工具 ,比如virtualenv 。
通过virtualenv可以方便的创建一个隔离的python环境 ,即所谓的沙盒 。沙盒的好处包括: 解决库之间的版本依赖 ,比如同一系统上不同应用依赖同一个库的不同版本 。 解决权限限制 ,比如你没有root权限 。 尝试新的工具 ,而不用担心污染系统环境 。当然 ,virtualenv还是需要安装到系统环境的,通过easy_install 。然后就可以创建沙盒了:
$virtualenv 沙盒名(比如mysandbox)
这个命令会创建一个目录mysandbox ,沙盒的所有内容都在该目录下 。在mysandbox/bin目录下有个定制的python解释器 ,它会优先使用mysandbox/lib/pythonX.X/site-packages目录下的库 。通过该解释器安装的库都放在上述目录中。
为了方便使用,virtualenv在mysandbox/bin目录下还提供了两个脚本:
$source mysandbox/bin/activate : 启用指定的沙盒 。其实只是改变环境变量PATH中python的路径 。你会注意到控制台的前缀变成了 (mysandbox)$ ,提示你已经进入该沙盒环境。
$source mysandbox/bin/deactivate : 关闭指定的沙盒 。
之前说到沙盒的解释器会优先查找沙盒的site-packages目录 ,如果找不到,就会查找系统的site-packages目录 。我们可以在创建沙盒时加入参数--no-site-packages来禁止它查找系统的目录。
virtualenv的作者还无私地推荐了另一个强大的沙盒工具 zc.buildout 。
”I strongly recommend anyone doing application development or deployment use one of these tools.“作者是 Mosky Virtualenv 和 Pythonbrew 都是可以創造虛擬(獨立)Python 環境的工具 ,只是虛擬(獨立)標的不同 。
Virtualenv 可以隔離函數庫需求不同的專案 ,讓它們不會互相影響 。在建立並啟動虛擬環境後 ,透過 pip 安裝的套件會被放在虛擬環境中 ,專案就可以擁有一個獨立的環境 。
簡而言之 ,Virtualenv 可以幫你做到:
在沒有權限的情況下安裝新套件 不同專案可以使用不同版本的相同套件 套件版本升級時不會影響其他專案Pythonbrew 則可以在家目錄中安裝多個 Python ,並迅速地切換版本;也可以在指定的 Python 版本下批次測試你的 Python 程式;另外更整合了 Virtualenv 。
這篇文章會詳細介紹這兩個工具 ,讓你在多人開發及多版本開發的環境中更得心應手 。
事前準備
Python 的 package 通常會上傳至 PyPI ,有很多工具都可以從 PyPI 安裝 package 。下面會使用 easy_install 這個工具(由 setuptools 提供)來安裝 Virtualenv 和 Pythonbrew 。
01. Linux如果不知道 easy_install 或還沒安裝 setuptools ,在 Debian/Ubuntu 可以用下列指令安裝:
$ sudo apt-get install python-setuptools在 Fedora/CentOS/Redhat/openSUSE,則可以使用:
$ su - # yum install python-setuptools 02. Windows在 Windows 則可以從 setuptools 的頁面找到 *.exe 格式的安裝檔案 。安裝完後 ,可以在 C:\PythonX.Y\Scripts\(X.Y 是 Python 的版本)下找到 easy_install.exe。記得把這個路徑放進 Windows 環境變數中的 PATH 。
接著就可以輕鬆安裝任何在 PyPI 的 Python Package 囉 。
Virtualenv - Virtual Python Environment builder
01. 安裝Pythonbrew 已整合了 Virtualenv ,如果不想額外安裝一個套件,也可以不要裝 Virtualenv。
如果需要安裝 ,請於命令列模式下輸入下列指令:
# easy_install virtualenv 02. 使用方法 I. 建立虛擬環境請於命令列模式下輸入下列指令:
$ virtualenv [指定虛擬環境的名稱]例如下列指令會建立名為 "ENV" 的虛擬環境:
$ virtualenv ENV預設在建立虛擬環境時 ,會依賴系統環境中的 site packages,如果想完全不依賴系統的 packages ,可以加上參數 --no-site-packages 來建立虛擬環境:
$ virtualenv --no-site-packages [指定虛擬環境的名稱]II. 啟動虛擬環境
請先切換當前目錄至建立的虛擬環境中 。前例中 ,建立名稱為 "ENV" ,則:
$ cd ENV接著 ,啟動虛擬環境:
$ source bin/activate在 Windows 環境中則改用:
> \path\to\env\Scripts\activate.bat然後就可以注意到 ,在 shell 提示字元的最前面多了虛擬環境的名稱提示:
(ENV) ...$ III. 退出虛擬環境請於命令列模式下輸入下列指令:
$ deactivate就可以回到系統原先的 Python 環境 。
IV. 在虛擬環境安裝新的 Python 套件Virtualenv 在安裝時會附帶 pip 這個 Python 的套件安裝工具 ,當虛擬環境被啟動時 ,由它安裝的 package 會出現在虛擬環境的資料夾中 ,用法是:
(ENV)...$ pip install [套件名稱]如果系統也有安裝 pip ,請特別注意是否已經啟動虛擬環境,否則套件會被安裝到系統中 ,而非虛擬環境裡。
如果想要避免 pip 在沒有進入虛擬環境時被使用 ,可以在 ~/.bashrc 加上:
export PIP_REQUIRE_VIRTUALENV=true要求 pip 一定要在虛擬環境中執行 。
也可以用下面的設定,讓系統的 pip 自動使用啟動中的虛擬環境 。
export PIP_RESPECT_VIRTUALENV=true避免意外將套件安裝至系統環境 。
V. 從程式中指定使用虛擬環境的函數庫無法從 Shell 啟動虛擬環境的情況 ,像是使用 mod_python 或 mod_wsgi ,這時可以在 Python 的程式中加上:
activate_this = /path/to/env/bin/activate_this.py execfile(activate_this, dict(__file__=activate_this))來使用安裝在虛擬環境中的 packages 。
03. 延伸套件:VirtualenvwrapperVirtualenvwrapper 是一個 Virtualenv 的 extension,可使虛擬環境的管理變得更容易 。
詳細來說 ,Virtualenvwrapper 提供下述功能:
將所有的虛擬環境整合在一個目錄下 。 管理(新增 、移除 、複製)所有的虛擬環境 。 可以使用一個命令切換虛擬環境 。 Tab 補全虛擬環境的名字 。 每個操作都提供允許使用者自訂的 hooks。 可撰寫容易分享的 extension plugin 系統 。 I. 安裝請於命令列模式下輸入下列指令:
# easy_install virtualenvwrapper II. 使用方法於 $WORKON_HOME製作虛擬環境:
$ mkvirtualenv [-i package] [-r requirements_file] [virtualenv options] ENVNAME列出所有的虛擬環境:
$ lsvirtualenv [-b] [-l] [-h]-b 是簡短模式;-l 是詳細模式(預設);-h 是印出 help 資訊 。
移除虛擬環境:
$ rmvirtualenv ENVNAME複製虛擬環境:
$ cpvirtualenv ENVNAME TARGETENVNAME啟動虛擬環境:
$ workon [environment_name]如果只輸入 workon ,則會列出所有的虛擬環境。
離開虛擬環境一樣是使用 deactivate 。
可以使用下面的設定來告訴 pip Virtualenv 的路徑 。
export PIP_VIRTUALENV_BASE=$WORKON_HOMEVirtualenvwrapper 的功能當然不只如此 ,更多功能可以參考 Virtualenvwrapper 的官方文件。
Pythonbrew
01. 安裝Pythonbrew 是個比較新的專案 ,雖然比較新 ,卻非常完整 。它也有整合上面介紹的 Virtualenv 。可以用類似 Virtualenvwrapper 的方式來操作 Virtualenv 。
安裝方式與 Virtualenv 一樣 ,只要輸入下面的指令就可以了:
# easy_install $ pythonbrewPythonbrew 官方有推薦的安裝方式 ,但這篇教學為求一致性 ,就不額外介紹了 ,可以參考 pythonbrew/README.rst 。
對於 Windows 的使用者,很可惜地 ,Pythonbrew 暫時沒有支援 Windows 的計畫 (#6: Windows Support? - Issues - utahta/pythonbrew - GitHub) 。所以 Windows 暫時還沒辦法使用 Pythonbrew 囉 。
經過 easy_install 的安裝後 ,還需要在 shell 執行:
$ pythonbrew_install才會把初始的設定檔和資料夾配置進你的家目錄 。接著要修改 ~/.bashrc 的配置:
$ echo "source ~/.pythonbrew/etc/bashrc" >> ~/.bashrc這樣就算安裝完全囉 。
Pythonbrew 使用 curl 來抓取資料,如果你的系統沒有 ,請記得安裝 。Ubuntu 上可以使用這行指令:
$ sudo apt-get install curl 02. 編譯前準備因為 Pythonbrew 採取下載 tarball ,並編譯、安裝的方法,所以我們要先為系統準備好編譯 Python 所需的套件。
也因為許多 Linux 發行版都已打包 Python ,所以我們可以偷懶一點 ,用已經打包好的套件來解決編譯所需的相依性 。在 Ubuntu/Debian 上 ,可以透過:
$ sudo apt-get build-dep python2.7來安裝所有編譯 Python 2.7 所需的套件 。雖然已經能夠安裝得相當完整 ,但還是缺少了 gdbm 這個 module ,如果需要的話 ,可以透過:
$ sudo apt-get build-dep python-gdbm來安裝編譯 gdbm 所需的套件。
註:bsddb185 、linuxaudiodev 、ossaudiodev 、sunaudiodev 等是按以上方式安裝後 ,仍會缺少的 module 。其中 ossaudiodev(Open Sound System)在隨 Ubuntu 發布的 Python 中有提供 ,列出來讓大家參考 。
Fedora/CentOS/Redhat/openSUSE 則可以使用 yum-builddep 這個指令。
03. 使用方法Pythonbrew 的操作不外乎安裝 、移除 、列出及使用新的 Python 版本 ,下面是依照初次使用時所需的指令順序來介紹 。
I. 列出可安裝的版本首先我們用 list --know 列出可以安裝的 Python 版本:
$ pythonbrew list --know接著利用 install VERSION 來下載並編譯 Python 到本機,除了接 Python 的版本編號以外 ,也可以接 Python 的 tarball 路徑或網址來安裝;也能調整編譯 Python 的選項 。下面是一些例子:
$ pythonbrew install 2.7.2 $ pythonbrew install --verbose 2.7.2 $ pythonbrew install --force 2.7.2 $ pythonbrew install --no-test 2.7.2 $ pythonbrew install --configure="CC=gcc_4.1" 2.7.2 $ pythonbrew install --no-setuptools 2.7.2 $ pythonbrew install http://www.python.org/ftp/python/2.7/Python-2.7.2.tgz $ pythonbrew install /path/to/Python-2.7.2.tgz $ pythonbrew install /path/to/Python-2.7.2 $ pythonbrew install 2.7.2 3.2 III. 清理安裝時產生的檔案下載的 Python tarball 會放在 ~/.pythonbrew/dists/ 下;而編譯則會在 ~/.pythonbrew/build/ 下進行 。如果想清理這兩個目錄 ,可以使用:
$ pythonbrew cleanup IV. 列出所有已安裝的版本安裝好之後,可以使用 list 命令列出所有已安裝的 Python 版本:
$ pythonbrew list後面有打星號的 ,就是現在正在使用的 Python 版本 。
V. 切換已安裝的版本可以使用 switch 來切換預設的 Python 版本:
$ pythonbrew switch VERSION如果只想在當前的 shell 下切換 ,可以使用 use:
$ pythonbrew use VERSION要切換回預設的環境時,使用 off:
$ pythonbrew off就會返回系統環境的 Python 了 。
VI. 批次在不同版本下測試最重要的是 ,可以用系統內所有安裝過的 Python 版本 ,或指定的 Python 版本來測試自己的程式!
$ pythonbrew py test.py # 使用所有有安裝的版本 $ pythonbrew py -v test.py # 詳細輸出 $ pythonbrew py -p 2.7.2 -p 3.2 test.py # 指定特定的版本 VII. 移除已安裝的版本若想移除已經安裝的 Python ,則可以使用 uninstall:
$ pythonbrew uninstall 2.7.2 $ pythonbrew uninstall 2.7.2 3.2 VIII. 與 Virtualenv 的整合要注意 Pythonbrew 中所提供的 Virtualenv ,是基於 Pythonbrew 中所安裝的 Python(置於 ~/.pythonbrew/venvs/Python-VERSION/ 下) 。在不使用 Pythonbrew 的情況下 ,無法使用附屬於 Pythonbrew 的 venv 功能 。
Pythonbrew 提供了和 Virtualenvwrapper 類似的功能 ,只是沒有像 Virtualenvwrapper 那麼完整的 plugin 系統 。所有在 Pythonbrew 中的 Virtualenv 指令都以 venv 作為第一個副命令 。
$ pythonbrew venv create [指定虛擬環境的名稱] $ pythonbrew venv list $ pythonbrew venv use [指定虛擬環境的名稱] $ pythonbrew venv delete [指定虛擬環境的名稱]離開虛擬環境一樣是使用 deactivate。
IX. Buildout如果有使用 Buildout 這個工具 ,也可以透過 Pythonbrew 來執行:
$ pythonbrew buildout $ pythonbrew buildout -p 2.6.6 # 指定版本最後 ,Pythonbrew 有內建更新自己的指令:
$ pythonbrew update $ pythonbrew update --master $ pythonbrew update --developVirtualenv 和 Pythonbrew 就介紹到這邊 ,如果想獲得更多資訊,可以多多參考它們的官網哦 。祝大家玩得愉快 。
參考資料
www.virtualenv.org utahta/pythonbrew - GitHub setuptools - PyPI pip - PyPI virtualenvwrapper documentaion Building Python and more on missing modules - Stack Overflow创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!