1. 程式人生 > >python虛擬環境安裝和配置

python虛擬環境安裝和配置

python虛擬環境virtualenv

VirtualEnv用於在一臺機器上建立多個獨立的python執行環境,VirtualEnvWrapper為前者提供了一些便利的命令列上的封裝。

Virtualenv是一個非常好的virtual python environment builder,他最大的好處是,可以讓每一個python專案單獨使用一個環境,而不會影響python系統環境,也不會影響其他專案的環境。

Virtualenv可用於建立獨立的Python環境,在這些環境裡面可以選擇不同的Python版本或者不同的Packages,並且可以在沒有root許可權的情況下在環境裡安裝新套件,互相不會產生任何的影響。


為什麼要用virtualenv

- 隔離專案之間的第三方包依賴,如A專案依賴django1.2.5,B專案依賴django1.3。

- 為部署應用提供方便,把開發環境的虛擬環境打包到生產環境即可,不需要在伺服器上再折騰一翻。在伺服器上都不用安裝virtualenv,直接將virtualenv建立的目錄拷貝到伺服器,修改路徑,進行虛擬環境遷移就可以用了

- 還可以用在沒有root許可權的python環境配置上,如果沒有root許可權,可以先自己搞一個virtualenv,再在virtualenv中使用pip安裝。(系統中沒有pip,並且也沒有root許可權使用sudo apt-get安裝)

安裝的庫的位置

env/Lib/site-packages/目錄裡,而不是在系統的python的Lib/site-packages目錄裡,這樣你就知道為什麼虛擬環境是分開的了吧。

Note:virtualenv 建立的虛擬環境與主機的 Python 環境完全無關,你主機配置的庫不能在 virtualenv 中直接使用。你需要在虛擬環境中利用 pip install 再次安裝配置後才能使用。

Virtualenv的安裝

pip安裝virtualenv

pip install virtualenv   #py2安裝

pip3 install virtualenv   #py3安裝,這樣用virtualenv建立的virtualenv預設python版本是py3

這時python3.4.2\Lib\site-packages目錄下會出現兩個新子目錄virtualenv_support、virtualenv-13.1.0.dist-info

[pip]

安裝Virtualenvwrapper

安裝完以後,建立一個虛擬環境,然後在安裝virtualenvwrapper
virtualenv ENV                     #ENV 為環境的名字,可以任意設定,其實就是一個資料夾,在home下的使用者名稱資料夾下可以找到。
source ENV/bin/activate    #這樣進進入了virtualenv的虛擬開發環境。
進入虛擬環境以後命令列最開始的地方會顯示(ENV),代表已經進入了這個環境,然後就可以安裝virtualenvwrapper和Django了

輸入命令列pip install virtualenvwrapper
這裡可以不用sudo,因為在virtualenv裡,不用管理許可權也算是很方便的設計之一。

virtualenvwrapper安裝後,它會把virtualenv列為依賴包,所以會自動安裝。

開啟一個新的shell,輸入mkvirtualenv test 。如果你開啟另外一個shell,則你就不在這個virtualenv中了,你可以通過workon test 來啟動。如果你的工作完成了,可以使用deactivate 來停用。

建立虛擬環境並進入使用

使用virtualenv預設python版本建立虛擬環境

virtualenv --no-site-packages ubuntu_env

就可以在當前目錄建立一個env目錄(虛擬環境名稱,這個資料夾就是儲存 Python 虛擬環境),你會注意到,virtualenv會把python,setuptools和pip給你安裝上。

自定義python版本建立虛擬環境

1. 安裝需要版本的python
2. 指定virtualenv中的python版本
virtualenv --no-site-packages --python=2.7 env

Note:

1. 建立virtualenv虛擬環境之前,系統中必須要安裝有對應版本的python,並且解除安裝之後當前虛擬環境就無效了。系統中可以同時存在python2和python3,通過環境變數中的系統變數path(不是使用者變數)控制cmd或者系統中使用哪個版本的python,哪個版本的路徑在前面就優先使用哪個版本。

2. –no-site-packages表示不包括系統全域性的Python安裝包,這樣會更令環境更乾淨

2. –python=python2.7指定Python的版本未系統已經安裝了的Python2.7

3. env是建立的虛擬環境名稱

4 .沒有安裝python2.7或者使用命令virtualenv --no-site-packages --python=python2.7 env會出現The executable python does notexist 錯誤

進入虛擬環境並激活

Linux(mac os):

. ubuntu_env/bin/activate

pika:/media/pika/files/mine/python_workspace/NLP$d env
Going to /media/pika/files/mine/ENV
pika:/media/pika/files/mine/ENV$. ubuntu_env/bin/activate
(ubuntu_env) pika:/media/pika/files/mine/ENV$d nlp
Going to /media/pika/files/mine/python_workspace/NLP
(ubuntu_env) pika:/media/pika/files/mine/python_workspace/NLP$python
Python 3.4.3 (default, Oct 14 2015, 20:28:29)

windows:

env > Script\activate  (or Script\activate.bat)


mingw(git):

venv >source Scripts/activate


這時會發現,在命令列前面,會多出(env)出來,表示你已經進入了虛擬機器了。現在你可以使用pip install xxx來安裝你想要的庫了。

Note: activate.bat指令碼會設定控制檯環境變數,使得該控制檯以後呼叫的python命令會執行虛擬環境中的python。virtual env啟用後,在任意目錄輸入python, ipython(如果安裝了)都會呼叫virtual env中的命令。

退出虛擬環境

(ubuntu_env) pika:/media/pika/files/mine/ENV/ubuntu_env$deactivate 
pika:/media/pika/files/mine/ENV/ubuntu_env$

Note: deactivate命令可能在virtualenv安裝目錄下。

直接在該環境中使用deactivate命令即可退出


Note: deactivate.bat是還原控制檯環境變數設定

刪除虛擬環境

rm -r venv

直接刪除虛擬環境所在的資料夾venv就刪除了我們建立的venv虛擬環境

linux下virtualenv其它命令

列出虛擬環境列表

workon

也可以使用lsvirtualenv

新建虛擬環境

mkvirtualenv [虛擬環境名稱]

啟動/切換虛擬環境

workon [虛擬環境名稱]

刪除虛擬環境

rmvirtualenv [虛擬環境名稱]

虛擬環境遷移

當需要將虛擬環境env轉移到同一臺電腦的另一個目錄下時

或者當需要將虛擬環境env1遷移或複製到另一個虛擬環境(可能不在同一臺機器上)env2時,首先仍然需要在目的機器上安裝pip和virtualenv,然後採用以下方法之一安裝其他的package:

1.直接將env1裡的檔案全部複製到env2裡,然後修改涉及路徑的檔案。此種方法可能正常使用,但顯然不是好辦法(不過網路不好的時候lz就是用的這個)。

修改的路徑主要是虛擬環境ubuntu_env/bin目錄下的檔案執行程式的路徑:如active, pip, ipython等等(幾乎所有檔案的路徑,不過有的命令你不用的可以不改)。

如將虛擬環境ubuntu_env/bin/active中的路徑修改一下:

其中的VIRTUAL_ENV路徑其實最好修改成現在的絕對路徑VIRTUAL_ENV="/media/pika/files/mine/ENV/ubuntu_env";

將虛擬環境ubuntu_env/bin/pip和pip3和pip3.4中的路徑修改成絕對路徑:#!/home/pipi/ENV/ubuntu_env/bin/python3

注意最好不要將路徑修改成相對路徑。如果修改的ipython執行路徑為相對路徑#!./bin/python3,是相對這個ipython.py執行的路徑,啟用virtual env後如果在另一個目錄下輸入python就會出錯找不到或者直接呼叫系統中的python了,而不是virtual env中的python,而原始的預設路徑使用絕對路徑就可以在virtual env啟用後在任意目錄都可以執行ipython而不出錯!

2. 使用requirements.txt

進入原虛擬環境env1,然後執行pip freeze > requirements.txt將包依賴資訊儲存在requirements.txt檔案中。

最好手動調整一下順序,比如numpy和scipy要在matplotlib前面安裝;另外如果想安裝最新版本的,再將後面的版本號==1.9.1什麼的刪除。

然後進入目的虛擬環境env2,執行pip install -r requirements.txt,pip就會自動從網上下載並安裝所有包。

虛擬環境env2如果是env1的拷貝,最好先pip uninstall -ry requirements.txt,再pip install -r requirements.txt


3.pip預設會從pypi伺服器(http://pypi.python.org/simple)下載包的安裝檔案,如果目的機器無法連外網,則可以採用以下辦法:
3.1搭建自己的pypi伺服器。專業的,可以使用第三方的軟體包來搭建一個完整的pypi映象伺服器,參考http://www.worldhello.net/2011/03/14/2357.html。更快速的方法只需要一條命令python -m SimpleHTTPServer即可完成搭建伺服器,具體的目錄結構可參考原pypi伺服器,簡而言之,就是把安裝檔案打包放入目錄即可。搭建好伺服器之後,在目的虛擬環境中,就可以使用pip來安裝了,命令如:pip install -i http://127.0.0.1:8000/ -r requirements.txt
3.2如果你實在不想搭建pypi伺服器,也有辦法。首先將所有包的安裝檔案下載下來,可以手動下載,也可以使用pip,如pip install -d /path/to/save/ -r requirements.txt,然後自己修改requirements.txt檔案,將每一行改成對應的包的安裝檔案的路徑。最後在目的虛擬環境中使用pip安裝,如pip install -r requirements.txt即可。

3.3還有一種途徑,就是pip提供的bundle選項。首先執行pip bundle MyEnv.pybundle -r requirements.txt,將生成一個MyEnv.pybundle檔案,該資料夾包含所有包的安裝檔案(注意必須字尾名必須是.pybundle),預設是重新從pypi伺服器下載安裝檔案的,如果願意,也可以利用3.1中的方法,指定本地的pypi伺服器。然後在目的虛擬環境中執行pip install MyEnv.pybundle即可

所以說,lz還是更喜歡docker中配置的python開發環境。

虛擬環境遷移出錯

方法1虛擬環境遷移後包引入出錯

from scipy import stats

ImportError: liblapack.so.3: cannot open shared object

這時只需要pip install scipy重新安裝一下就ok了。

ImportError: libBLT.2.4.so.8.6: cannot open shared object file: No such file or directory, please install the python3-tk package

也要重新安裝matplotlib

所以最好使用方法2遷移。

Virtualenv中安裝python拓展包

pip安裝時,使用命令pip, pip3, pip3.4都可以,因為virtualenv中安裝的如果是py3則pip對應的就是pip3。
注意,虛擬環境中安裝python拓展包需要先如上進入虛擬環境,不然就安裝在系統的python路徑下了。

virtualenv從requirements.txt中安裝python庫

進入原虛擬環境env1,然後執行pip freeze > requirements.txt將包依賴資訊儲存在requirements.txt檔案中。然後進入目的虛擬環境env2,執行pip install -r requirements.txt,pip就會自動從網上下載並安裝所有包。

requirements.txt:

numpy

pandas

virtualenv中安裝numpy

通過pip install numpy直接安裝numpy!

virtualenv中安裝scipy和matplotlib

You may have to install some extra non-Python dependencies using apt-get.在安裝scipy前,要先在系統中安裝scipy的非python依賴,好像是fortran的。ubuntu16.04出來時已經不用了?

Building Matplotlib requires libpng (and freetype, as well) which isn't a python library, so pipdoesn't handle installing it (or freetype).

sudo apt-get build-dep python-scipy

sudo apt-get -y build-dep matplotlib

(virtualenv) pip install scipy
(virtualenv) pip install matplotlib

windows下virtualenv中安裝pywin32

virtualenv中不能直接用pip install pywin32,否則會出錯:Couldnot find any downloads that satisfy the requirement.  pywin32 No distributions at all foundfor pywin32.

Solution1

啟用virtualenv

執行easy_install http://PATH.TO/EXE/DOWNLOAD

Note: easy_install 太老的話可能出錯:error: c:\users\blah\appdata\local\temp\easy_install-ibkzv7\pywin32-214.win32-py2.6.exe is not a valid distutils Windows .exe

Solution2

如果下載不下來也可以這樣

啟用virtualenv

執行easy_install DOWNLOADED_FILE.exe   e.g. easy_install D:\Downloads\Programming\Python\python3\pywin32-219.win-amd64-py3.4.exe

Solution3(親測有效)

系統中安裝pywin32後,將pywin32.pth複製到virtualenv site-packages並編輯檔案指定相關路徑。[PyWin32 and virtualenv]

> copy D:\python3.4.2\Lib\site-packages\pywin32.pth E:\mine\python_workspace\CrawlerEnv\Lib\site-packages\pywin32.pth

查處檔案內容more E:\mine\python_workspace\CrawlerEnv\Lib\site-packages\pywin32.pth'

# .pth file for the PyWin32 extensions
win32
win32\lib
Pythonwin

將其自改為:

D:\python3.4.2\Lib\site-packages\win32
D:\python3.4.2\Lib\site-packages\win32\lib
D:\python3.4.2\Lib\site-packages\Pythonwin

這樣就可以成功引入,並且可以在pycharm中使用:


virtualenv中安裝rsae

python版本是python3


Note: lz不知道為嘛要先重啟電腦才能安裝成功,否則報錯could not find the version that satisfies the requirement rsa

檢視virtualenv中已經安裝的python包列表

(ubuntu_env) pika:/media/pika/files/mine/python_workspace/ubuntu_env$pip list
numpy (1.10.4)
pip (8.1.1)
py4j (0.9.2)
setuptools (20.3.1)
sh (1.11)
wheel (0.29.0)
(ubuntu_env) pika:/media/pika/files/mine/python_workspace/ubuntu_env$pip freeze
numpy==1.10.4
py4j==0.9.2
scipy==0.17.0
sh==1.11

Note: virtualenv中的pip應該就是pip3預設的。兩種方式還是有一丁丁不同的。

pycharm專案配置虛擬環境

在pycharm中設定專案在virtualenv中執行

首先virtualenv venv建立一個虛擬環境並安裝好相關執行環境

開啟pycharm


下拉框中可以選擇需要的執行環境

如果找不到建立的虛擬環境,可以在右邊設定按鈕中新增一個新的python interpreter, add local選擇建立的虛擬環境venv中的python直譯器(如D:\venv\Scripts\python.exe)就可以了

多個不同python版本共存

我們可以用許多方法讓不同的 Python 版本在系統上共存,例如在 OS X 上,如果使用官方提供的 DMG 版本安裝,那麼自帶的 python2 和新安裝的 python3 是可以共存的。python3 可以使用 python3 來呼叫,甚至 pip 都可以使用 pip3 來呼叫。

1. 自己配置

同時安裝python2和python3,然後在系統變數中修改兩個的順序就可以設定系統中優先使用哪個版本的python

如果是用anaconda安裝的python2,再安裝python3就必須在python3安裝程式中設定不安裝pip,否則安裝程式會出錯,無法安裝成功(所以小編從來都是需要什麼拓展包才安裝,從不用anaconda一次安裝那麼多沒用的東西)。安裝python3成功後,再下載執行get-pip.py檔案安裝pip就ok了

2. pyenv

如果有很多小版本需要共存,pyenv 用來解決這類問題。它可以安裝、解除安裝、編譯、管理多個 python 版本,並隨時將其中一個設定為工作環境。But pyenv 不支援 Windows 系統。[Python多版本共存之pyenv]

3. pywin

Windows 上有一個 pyenv 的替代品,是 pywin 。它用來在多個安裝的 Python 版本之間進行切換(就是在windowns中已經安裝了多個版本的python),也支援 MSYS/MINGW32 。

安裝和使用:

pip install pywin

C:\>pywin genlaunchers
Search for python installations and create batch files in the same directory where pywin is installed.

C:\>pywin # launch first python found in PATH
C:\>pywin -2.7 # launch python 2.7
C:\>pywin setdefault 3.4
    Setting default python for active session to: 3.4
    C:\Python34;C:\Python34\Scripts -- now at front of PATH   #相當於1中的自己配置

C:\>pywin -3.2 test.py  # launch test.py with python 3.2
  C:\Python32


pywin啟動python版本的順序:
Any version specified after a #! in the first 2 lines of the source. The interpreter will be invoked with any additional parameters.examples:
#! python3.3
#! /usr/bin/python2.7 -v
If the environment variable VIRTUAL_ENV is set, use that virtualenv's python.exe.
If the environment variable PYTHONHOME is set, use its python.exe.
If none of the above, fall back to the first python.exe found on the path.
4. Python Launcher for Windows

Python 從3.3版本開始(又是3.3?),在 Windows 系統中自帶了一個 py.exe 啟動工具。如果你是使用 Python.org 官網下載的安裝包安裝的 Python 3.3(或更新版本)環境,那麼可以直接在命令提示符中使用這個工具。py 可以開啟預設的 python 提示符; py -2.7 和 py -3 開啟對應的 Python 版本。

另兩種解決方案

Anaconda

Conda 是 Continuum 公司釋出的 Anaconda 裡邊配備的一個包管理器。Conda 讓你更加方便地安裝和管理各種擴充套件包和執行環境,同時支援 Windows,Mac OS X 以及 Linux。

安裝

~/ENV$ wget http://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86_64.sh

bash Anaconda3-4.1.1-Linux-x86_64.sh

執行安裝時注意不要一直enter,要設定一下anaconda安裝目錄及是否加入使用者預設.bashrc中。

#PREFIX=~/opt/anaconda3

Do you wish the installer to prepend the Anaconda3 install location to PATH in your /home/pipi/.bashrc ? [yes|no]
[no] >>> yes

重啟terminal就可以使用conda安裝了

這樣安裝的python就是使用者獨立的!linux下不同使用者輸入python都是對應自己安裝的anaconda,pip也是。

使用

使用conda安裝python拓展包

Conda支援多種配置選項。修改這些選項最簡單的方法就是使用conda config命令。

Conda 通過使用 SAT 求解器加上一個偽布林約束,來解決包之間的依賴關係。當 Conda 安裝擴充套件包時,它會嘗試查詢和這個包結合在一起能夠使用的那些包的最新版本。更新全部包,就是嘗試安裝每個包,讓 SAT 求解器找到最新可用的版本。conda update –all 可以很容易的實現這一功能。例如,如果你現在安裝了 Python 2.7.4, Nunpy 1.8.0, 和 SciPy 0.14.0, conda update –all 就和 conda install “python>=2.7.4, <3” “numpy>=1.8.0” “scipy>=0.14.0” 的功能一樣(除此之外還包括一些Python的依賴關係,比如 readline 和 OpenSSL)。值得注意的是 conda update –all 不會把 Python 2 升級到 Python 3 。

如果你想把某一個包升級到比 anaconda 元包指定的版本,你可以通過 conda remove anaconda 來移除它。(這會移除元包,裡面不包含任何程式碼。)

conda list –export 和 conda create –file

使用 Conda 可以很簡單地複製環境。

conda list --export conda_list.txt 可以匯出所有你已經安裝好的包,包括版本和編譯字元。你可以把這些儲存在檔案裡。

同時使用 conda install --file conda_list.txt 或者 conda create --file 來安裝同樣的包。

conda clean

使用一段時間之後, Conda 會佔用很多硬碟空間,這是因為它不會自動刪除一些沒用的包。

你可以通過 conda clean -p 來刪除這些沒用的包。這個命令會檢查哪些包沒有在包快取中被硬連結到其他任何地方,並刪除它們。注意,如果你是通過 symlink 等方式或通過一個單獨的檔案系統安裝的包,你就沒有辦法使用這個命令刪除它們,因為它檢測不到它們的存在。

Conda 也會儲存所有下載下來的 tar 包。它們只是為了快取才儲存下來的,是可以被刪除的。你可以通過 conda clean -t刪除它們。

釘包(Pinning Packages)

預設情況下,Conda 會在環境中安裝一個包的最新版本。但是,有時候你可能會想保留某一箇舊版本的包,哪怕你之後安裝的包要依賴這個包的新版本(Conda 預設會升級你已經安裝的包的依賴包)。

例如,假設你在你的環境裡已經安裝了 SciPy 0.13.3, 但是你現在還不想升級到 0.14.0(文章發表時的最新版本),雖然你安裝了其他依賴於 SciPy 的包,比如 Pandas。

為了達到目的,可以在你的環境中的 conda-meta 目錄下建立一個叫 pinned 的檔案。例如,如果你有一個叫做 scipy-0.13 的環境,你可以這麼寫:

$ echo "scipy 0.13.3" > ~/anaconda/envs/scipy-0.13/conda-meta/pinned

pinned 檔案中的每一行都應符合 conda 匹配規則。這就允許一些通用的事情,比如說指定 scipy<0.14。其中以‘#’號開頭的行會被忽略。

它的工作原理是,每次 conda 在你的環境裡安裝擴充套件包時,conda 會把 pinned 檔案裡的每一行內容都附帶傳送給 SAT 求解器,這樣就阻止了那些你不想要的升級。

忽視 pinned 檔案,可以使用conda install --no-pin 。

[學習 Conda 的高階特性(上)]

pyenv

python3自帶了pyvenv

相關推薦

no