走了一些彎路,簡單記錄一下
本文參考以下文章在本地環(huán)境下測試成功
ubuntu16.04
廖雪峰的博客!
Virtualenv的介紹
創(chuàng)建虛擬環(huán)境的時候一些文章用的是virtualenv命令而另一些用的是mvirtualenv
效果是差不多的,區(qū)別在于剛開始安裝了virtualenv一個軟件還要virtualenvwrapper這兩個。下面一一道來
首先要明白的是創(chuàng)建虛擬環(huán)境的作用是什么
- 開發(fā)Python應(yīng)用的時候,會需要不同版本的Python運行環(huán)境。
- 不同的的應(yīng)用對不同版本的庫文件。
- 不同應(yīng)用之間的隔離和不同插件之間的隔離。
- 虛擬環(huán)境可以隨時恢復(fù)隨時刪除。
首先要在宿主環(huán)境里面安裝virtualenv和virtualenvwrapper
sudo pip install virtualenv
sudo pip install virtualenvwrapper
在~/.bashrc文件里面加上:
# 其中#username改成你自己的用戶名,.virtualenv是虛擬環(huán)境的家目錄。
export WORKON_HOME=/home/username/.virtualenv
source /usr/local/bin/virtualenvwrapper.sh
之后創(chuàng)建虛擬環(huán)境的存放路徑
之后source ~/.bashrc
現(xiàn)在我們用-p選項創(chuàng)建一個python3的虛擬環(huán)境,當(dāng)然系統(tǒng)里得先裝好了python3。
mkvirtualenv -p python3 py3env
-p 后面的參數(shù)指定了python3(也有可能要換成python3.2/python3.4,具體要看你系統(tǒng)里面/use/bin/里面的文件是什么名字),如果去掉這個參數(shù),就會使用系統(tǒng)默認(rèn)的python。最后一個參數(shù)py3env是創(chuàng)建的這個環(huán)境的名字。
(py3env) 03:21:35@backbox:06~/.virtualenvs $ l
get_env_details* postmkvirtualenv premkvirtualenv*
initialize postrmvirtualenv* prermvirtualenv*
postactivate preactivate* py3_django/
postdeactivate predeactivate py3env/
postmkproject* premkproject*
這里要說兩點,
####一。有些文章只安裝了$ pip3 install virtualenv
這時候,新建虛擬環(huán)境的時候就需要用$ virtualenv --no-site-packages venv命令。其中 --no-site-packages參數(shù)指定,已經(jīng)安裝到系統(tǒng)Python環(huán)境中的所有第三方包都不會復(fù)制過來??梢缘玫揭粋€相對簡潔的Python環(huán)境。進入這個環(huán)境需要$ source venv/bin/activate
####二。我的本地環(huán)境安裝了Python2.7和Python3.5,$ sudo pip install virtualenv之后需要再$ sudo pip3 install virtualenv么?答案是不需要。
03:23:55@backbox:01~ $ which virtualenv /usr/local/bin/virtualenv
執(zhí)行完了之后,會自動切換到這個新創(chuàng)建的虛擬環(huán)境。我們會發(fā)現(xiàn)命令行提示符會發(fā)生改變,虛擬環(huán)境的名字會加在提示符開頭:
(py3_django) 03:14:28@backbox:181~/django/BookManager $
現(xiàn)在看一下PS1 的值
(py3_django) 03:41:41@backbox:191~/django/BookManager $ echo HelloWorld
HelloWorld
(py3_django) 03:41:58@backbox:192~/django/BookManager $ echo $PS1
(py3_django) \[\e]0;\u@\h: \w\a\]\[\033[1;31;1m\]\t@\h:\[\033[32;00m\]\j\#\[\033[1;37;1m\]\w \[\e[30;00m\]\$
其他一些常用命令:
deactivate # 退出當(dāng)前虛擬環(huán)境
workon [虛擬環(huán)境名稱] # 使用某個虛擬環(huán)境
rmvirtualenv [虛擬環(huán)境名稱] # 刪除某個虛擬環(huán)境
lsvirtualenv # 列出所有虛擬環(huán)境
用pip list 和 pip freeze 命令查看軟件包,這樣,我們就得到了一個不帶任何第三方包的“干凈”的Python運行環(huán)境。
(py3env) 03:17:37@backbox:02~ $ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
setuptools (38.4.0)
wheel (0.30.0)
(py3env) 03:17:46@backbox:03~ $ pip freeze
(py3env) 03:17:53@backbox:04~ $
在虛擬環(huán)境中設(shè)置默認(rèn)命令
有些時候,我們希望在進入虛擬環(huán)境之后執(zhí)行某些命令,或者設(shè)置一些環(huán)境變量。
例如:在django運行的時候,可以通過環(huán)境變量DJANGO_SETTINGS_MODULE來指定配置文件的路徑。
我們可以在虛擬環(huán)境目錄下面創(chuàng)建文件bin/postactivate,并在文件里面寫入:
export DJANGO_SETTINGS_MODULE=config.django.production
這個文件會在每次進入這個虛擬環(huán)境的時候被執(zhí)行,這樣這個參數(shù)就會被設(shè)置了。
除了postactivate以外,其他階段也可以有這樣的設(shè)置,參看:https://virtualenvwrapper.readthedocs.org/en/latest/scripts.html