上一篇我們說(shuō)了python虛擬環(huán)境的安裝, 這一篇我們就來(lái)介紹一下這個(gè)虛擬環(huán)境. 下面舉例是在Mac系統(tǒng)下:
在我們虛擬環(huán)境安裝成功之后, 我們進(jìn)入終端查看
xxzxdeMacBook-Pro:Code xxzx$ cd ~/
xxzxdeMacBook-Pro:~ xxzx$ ls -a
. .gitbook .sogouinput
.. .gitconfig .ssh
.CFUserTextEncoding .gitflow_export .viminfo
.DS_Store .gitignore_global .virtualenvs
.ShadowsocksX-NG .hgignore_global Applications
.Trash .ipython Desktop
.bash_history .itmstransporter Documents
.bash_profile .kingsoft Downloads
.bash_profile.pysave .mysql_history Library
.bash_sessions .netrc Movies
.bashrc .node-gyp Music
.cocoapods .npm Pictures
.codeintel .npmrc Public
.config .oracle_jre_usage bin
.cups .pyenv test2
.gem .python_history workspaces
.gemrc .rediscli_history
xxzxdeMacBook-Pro:~ xxzx$
我們可以看到, 在當(dāng)前文件夾下有個(gè) . virtualenvs 的文件夾, 這個(gè)文件夾是隱藏文件夾. 我們通過(guò)ls -a命令列出包含隱藏文件的內(nèi)容 , 我們接著進(jìn)入到這個(gè)文件夾下查看
xxzxdeMacBook-Pro:~ xxzx$ cd .virtualenvs/
xxzxdeMacBook-Pro:.virtualenvs xxzx$ ls
Code postmkvirtualenv test10
ENV2.7 postrmvirtualenv test11
Flask_py2 preactivate test2
get_env_details predeactivate test5
initialize premkproject test6
postactivate premkvirtualenv test7
postdeactivate prermvirtualenv test8
postmkproject syf_py3 test9
xxzxdeMacBook-Pro:.virtualenvs xxzx$
這里面的內(nèi)容就是我們通過(guò)mkvirtualenv xxx創(chuàng)建得到的, 會(huì)自動(dòng)幫我們創(chuàng)建名稱(chēng)為xxx的文件夾, 這時(shí)候我們隨便找一個(gè)文件夾進(jìn)入查看
xxzxdeMacBook-Pro:.virtualenvs xxzx$ cd Flask_py2/
xxzxdeMacBook-Pro:Flask_py2 xxzx$ ls
bin lib
include pip-selfcheck.json
我們看到有個(gè)bin的文件夾, 這個(gè)里面放的都是可執(zhí)行的二進(jìn)制文件. 我們可以看下:
xxzxdeMacBook-Pro:Flask_py2 xxzx$ cd bin/
xxzxdeMacBook-Pro:bin xxzx$ ls
activate pip python
activate.csh pip3 python-config
activate.fish pip3.6 python3
activate_this.py postactivate python3.6
easy_install postdeactivate wheel
easy_install-3.6 preactivate
get_env_details predeactivate
xxzxdeMacBook-Pro:bin xxzx$
我們可以看到這里面有一些我們熟悉的python3
,pip3
. 我們?cè)诮K端敲python3 ..
的時(shí)候用的就是這些python解釋器.
xxzxdeMacBook-Pro:bin xxzx$ workon
Code Flask_py2 test10 test2 test6 test8
ENV2.7 syf_py3 test11 test5 test7 test9
xxzxdeMacBook-Pro:bin xxzx$ workon Flask_py2
(Flask_py2) xxzxdeMacBook-Pro:bin xxzx$ python3
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
上面我們使用workon
+tab
+tab
命令查看當(dāng)前有哪些虛擬環(huán)境, 當(dāng)我們使用workon
+<虛擬環(huán)境名>
進(jìn)入到這個(gè)虛擬環(huán)境中的時(shí)候. 當(dāng)前我們無(wú)論在哪個(gè)文件夾. 都是使用的 當(dāng)前這個(gè)虛擬環(huán)境下的命令. 所以虛擬環(huán)境就是通過(guò)這種方式進(jìn)行隔離安裝包的.
這個(gè)時(shí)候我們回到上層目錄
>>> ^D
(Flask_py2) xxzxdeMacBook-Pro:bin xxzx$ cd ..
(Flask_py2) xxzxdeMacBook-Pro:Flask_py2 xxzx$ ls
bin lib
include pip-selfcheck.json
(Flask_py2) xxzxdeMacBook-Pro:Flask_py2 xxzx$
我們可以看到當(dāng)前還有一個(gè)lib
文件夾. 我們進(jìn)入到這個(gè)文件夾查看
(Flask_py2) xxzxdeMacBook-Pro:Flask_py2 xxzx$ cd lib/
(Flask_py2) xxzxdeMacBook-Pro:lib xxzx$ ls
python3.6
(Flask_py2) xxzxdeMacBook-Pro:lib xxzx$ cd python3.6/
(Flask_py2) xxzxdeMacBook-Pro:python3.6 xxzx$ ls
__future__.py linecache.py
__pycache__ locale.py
_bootlocale.py no-global-site-packages.txt
_collections_abc.py ntpath.py
_dummy_thread.py operator.py
_weakrefset.py orig-prefix.txt
abc.py os.py
base64.py posixpath.py
bisect.py random.py
codecs.py re.py
collections readline.so
config-3.6m-darwin reprlib.py
copy.py rlcompleter.py
copyreg.py shutil.py
distutils site-packages
encodings site.py
enum.py sre_compile.py
fnmatch.py sre_constants.py
functools.py sre_parse.py
genericpath.py stat.py
hashlib.py struct.py
heapq.py tarfile.py
hmac.py tempfile.py
imp.py token.py
importlib tokenize.py
io.py types.py
keyword.py warnings.py
lib-dynload weakref.py
(Flask_py2) xxzxdeMacBook-Pro:python3.6 xxzx$ cd site-packages/
(Flask_py2) xxzxdeMacBook-Pro:site-packages xxzx$ ls
__pycache__ setuptools
easy_install.py setuptools-40.6.2.dist-info
pip wheel
pip-18.1.dist-info wheel-0.32.3.dist-info
pkg_resources
(Flask_py2) xxzxdeMacBook-Pro:site-packages xxzx$
最后我們進(jìn)入到site-packages
這個(gè)目錄下. 簡(jiǎn)單看一下
(Flask_py2) xxzxdeMacBook-Pro:site-packages xxzx$ pip install flask==0.10.1
Collecting flask==0.10.1
Downloading https://files.pythonhosted.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz (544kB)
100% |████████████████████████████████| 552kB 1.2MB/s
Collecting Werkzeug>=0.7 (from flask==0.10.1)
Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
100% |████████████████████████████████| 327kB 1.1MB/s
Collecting Jinja2>=2.4 (from flask==0.10.1)
Downloading https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126kB)
100% |████████████████████████████████| 133kB 1.3MB/s
Collecting itsdangerous>=0.21 (from flask==0.10.1)
Using cached https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->flask==0.10.1)
Downloading https://files.pythonhosted.org/packages/da/fc/2979c425ad23d528d6ac2e1f3efdc28e572fa1e1fbd5a75171cbdd7ddaa5/MarkupSafe-1.1.0-cp36-cp36m-macosx_10_6_intel.whl
Building wheels for collected packages: flask
Running setup.py bdist_wheel for flask ... done
Stored in directory: /Users/xxzx/Library/Caches/pip/wheels/e1/f2/be/1c4f307a41aad7e632f79c0242a2714ecde24b663da3519665
Successfully built flask
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 flask-0.10.1 itsdangerous-1.1.0
(Flask_py2) xxzxdeMacBook-Pro:site-packages xxzx$ ls
Flask-0.10.1.dist-info markupsafe
Jinja2-2.10.dist-info pip
MarkupSafe-1.1.0.dist-info pip-18.1.dist-info
Werkzeug-0.14.1.dist-info pkg_resources
__pycache__ setuptools
easy_install.py setuptools-40.6.2.dist-info
flask werkzeug
itsdangerous wheel
itsdangerous-1.1.0.dist-info wheel-0.32.3.dist-info
jinja2
(Flask_py2) xxzxdeMacBook-Pro:site-packages xxzx$
上面的命令是在當(dāng)前的虛擬環(huán)境中安裝了flask == 0.10.1
版本. 我們?cè)俨榭? 有沒(méi)有發(fā)現(xiàn)比之前的多了一個(gè)flask
文件夾. 這個(gè)就是我們flask的安裝包內(nèi)容.
通過(guò)上面的查看過(guò)程. 我們可以了解到虛擬環(huán)境的隔離過(guò)程. 所以我們虛擬環(huán)境不同, 對(duì)應(yīng)的安裝工具包就隔離了.
注意
如果我們?cè)谶@個(gè)虛擬環(huán)境中使用了
sudo pip install
這樣的命令. 會(huì)默認(rèn)安裝到系統(tǒng)下面, 而不會(huì)安裝到我們這個(gè)虛擬環(huán)境中
查看當(dāng)前虛擬環(huán)境的安裝包
我們可以通過(guò)pip list
, pip freeze
查看當(dāng)前虛擬環(huán)境的依賴安裝包
(Flask_py2) xxzxdeMacBook-Pro:flask xxzx$ pip list
Package Version
------------ -------
Flask 0.10.1
itsdangerous 1.1.0
Jinja2 2.10
MarkupSafe 1.1.0
pip 18.1
setuptools 40.6.2
Werkzeug 0.14.1
wheel 0.32.3
(Flask_py2) xxzxdeMacBook-Pro:flask xxzx$ pip freeze
Flask==0.10.1
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
Werkzeug==0.14.1
安裝依賴包(須在虛擬環(huán)境中): 依賴就是開(kāi)發(fā)以及程序運(yùn)行需要使用的環(huán)境的集合谆膳。包括軟件却盘、插件等。我們一般會(huì)把需要使用的依賴給保存在一個(gè)文件中忿偷,命名為requirements的txt文件国瓮。如果在其它環(huán)境中要運(yùn)行我們的項(xiàng)目糕簿,直接通過(guò)指令可以一次性安裝所有依賴屈扎。
安裝依賴包(須在虛擬環(huán)境中):
$ pip install -r requirements.txt
生成依賴包(須在虛擬環(huán)境中):
$ pip freeze > requirements.txt
在ipython中測(cè)試安裝是否成功
$ from flask import Flask
我們也可以指定重定向的位置
(Flask_py2) xxzxdeMacBook-Pro:flask xxzx$ pip freeze > ~/Desktop/requirements.txt