python-virtualenv

http://www.nowamagic.net/academy/detail/1330228
http://www.nowamagic.net/academy/detail/1330231
http://www.lxweimin.com/p/3abe52adfa2b

virtualenv

官網: https://virtualenv.pypa.io/en/stable/
在Python的開發環境的最常用的方法是使用 virtualenv 包。 Virtualenv是一個用來創建獨立的Python環境的包。簡單地說,你可以為每個項目建立不同的/獨立的Python環境,你將為每個項目安裝所有需要的軟件包到它們各自獨立的環境中, 最重要的是:在沒有權限的情況下安裝新套件

安裝:

pip install virtualenv

使用:

mkdir nowamagic_venv
virtualenv --distribute nowamagic_venv
virtualenv  -p  /usr/local/bin/python3.4 ENV3.4  # 指定版本的python環境
virtualenv -p /usr/bin/python2.7 ENV2.7

New python executable in /Users/fengxiang01/test/envtest_env/bin/python2.7
Also creating executable in /Users/fengxiang01/test/envtest_env/bin/python

-distribute (15版本已廢棄)選項使virtualenv使用新的基于發行版的包管理系統而不是 setuptools 獲得的包。 你現在需要知道的就是 --distribute 選項會自動在新的虛擬環境中安裝 pip ,這樣就不需要手動安裝了

文件下面出現四個文件:


屏幕快照 2017-05-19 16.35.49.png

打開bin可以發現virtualenv自動在這個虛擬環境中部署了一套package:

屏幕快照 2017-05-19 16.38.31.png
  • activate:這個virtualenv的激活文件
  • pip:這個virtualenv的獨立pip
  • python:python解釋器的一個副本
  • lib/python2.7:所有的新包會被存在這

激活環境:

cd nowamagic_venv
source bin/activate    #  激活

部署環境可以用:

 # 在系統環境
 pip freeze > requirment.txt
 cd nowamagic_venv
 source bin/activate
 pip install -r requirment.txt # 根據requirment.txt生成相同的環境

virtualenv拷貝了Python可執行文件的副本,并創建一些有用的腳本和安裝了項目需要的軟件包,你可以在項目的整個生命周期中安裝/升級/刪除這些包。 它也修改了一些搜索路徑,例如PYTHONPATH,以確保:

  • 當安裝包時,它們被安裝在當前活動的virtualenv里,而不是系統范圍內的Python路徑。
  • 當import代碼時,virtualenv將優先采取本環境中安裝的包,而不是系統Python目錄中安裝的包。

這樣,不同的項目可以使用一套不同版本的package而互不影響,同時又能共享一些系統的paceage

virtualenv  --no-site-packages  env  # 已廢棄, 默認如此, 選項的virtualenv就不會讀取系統包
virtualenv --system-site-packages env  # 和上面的相反的意思
virtualenv –clear  # 清空非root用戶的安裝 并從頭開始創建環境

最后離開虛擬環境:

deactivate     # 離開虛擬環境

virtualenvwrapper

virtualenvwrapper 是一個建立在 virtualenv 上的工具,通過它可以方便的創建/激活/管理/銷毀虛擬環境,沒它的話進行上面的操作將會相當麻煩。 可以通過下面命令安裝 virtualenvwrapper 。

配置:.bashrc添加:

export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

新建/激活/關閉/刪除虛擬空間需要執行下面的命令:

mkvirtualenv nowamagic_venv
workon nowamagic_venv: 切換虛擬環境
workon nowamagic_venv
deactivate
rmvirtualenv nowamagic_venv

workon:列出虛擬環境列表
lsvirtualenv:同上
mkvirtualenv nowamagic_venv:新建虛擬環境
workon nowamagic_venv:切換虛擬環境
cdvirtualenv: 切換到當前虛擬環境目錄
cdsitepackages: site-packages目錄
toggleglobalsitepackages:控制環境是否使用global site-packages
rmvirtualenv  nowamagic_venv:刪除虛擬環境
deactivate nowamagic_venv: 離開虛擬環境
virtualenv --relocatable  nowamagic_venv   生成可打包環境(把絕對地址改為相對地址,線下環境下開發完連同所有依賴打包到線上環境)
cpvirtualenv env1 env3 復制虛擬環境

Tab補全在virtualenvwrapper中是可用的。更多信息可以前往 virtualenvwrapper 的首頁:http://www.doughellmann.com/projects/virtualenvwrapper/

關于離線打包部署

virtualenv --relocatable nowamagic_venv 生成可打包環境(把絕對地址改為相對地址

--relocatable 官方的說法currently has a number of issues, and is not guaranteed to work in all circumstances. It is possible that the option will be deprecated in a future version of virtualenv.

再打包壓縮的前用此命令, 遷移到新環境后, 還需要修改 env/python2.7/orig-prefix.txt, 這個文件記錄了所依賴的系統python版本的前綴, 這個需要改為新環境的python位置, 但是如果有C++的動態鏈接庫的依賴就很棘手了


PS:

今天開始用虛擬環境的時候, 出現個問題, pip新包一直提示: requirement already satisfied virtualenv in /library/python/2.7/site-packages, 一看pip list,系統的都添加進來了(virtualenv的版本是15, 默認--no-site-packages), 查看sys.path, /usr/local/lib/python2.7/site-packages路勁都加進來了, 找了半天原因, 終于參考下面解決, 之前在etc/profile 中設置過全局的PYTHONPATH, 刪掉解決

https://virtualenv.pypa.io/en/stable/userguide/#making-environments-relocatable

注意: virtualenv 是包的管理工具, 其依賴的還是指定的系統python版本

####### 遷移虛擬環境時,

遇到一個問題
Cannot find libpython2.7.so.1.0
這是由于系統無法找到動態庫的路徑導致的
修改 /etc/ld.so.conf 文件加入python庫的路徑
在/etc/ld.so.conf中加入新行/usr/local/lib
(libpython2.7.so.1.0 的位置,不一定是這個位置 locate libpython2.7.so.1.0 查找)
然后 run ldconfig
參考:
https://stackoverflow.com/questions/20842732/libpython2-7-so-1-0-cannot-open-shared-object-file-no-such-file-or-directory

http://www.ithao123.cn/content-622257.html

** 如果沒有權限修改/etc/ld.so.conf, 那也可以,就是export一個全局變量LD_LIBRARY_PATH,然后運行程序的時候就會去這個目錄中找library。一般來講這只是一種臨時的解決方案,在沒有權限或臨時需要的時候使用。

參考: http://blog.csdn.net/unix21/article/details/12119861

還有一個問題是 注意 activate 中的VIRTUAL_ENV 的地址需要重新配置

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容