about
一般的,執行python代碼或者運行python項目,都會使用系統默認的python環境,第三方的包也下載到這個python環境下,那么問題來了,如果有多個python項目,這些項目有的需要python2.7的環境,有的需要python3.6的環境,並且依賴的包也不相同,這個時候時候系統的python環境就不太合適了,因為它就是一個公共的python環境,而各個項目都需要一套獨立、干凈的python環境,該怎么來搞?這個時候,就需要有專門的工具來方便的在原系統的python環境基礎上,創建一個個新的python環境,專門服務不同的項目。
virtualenv用來創建一個"隔離"的Python運行環境,這個python環境也被稱為虛擬環境,一般的,一個虛擬環境只服務一個項目,我們將這個項目用的包等全部下載到這個虛擬環境中,並且能隨時開啟和關閉虛擬環境。
virtualenv本身是一個模塊,所以使用前保證系統(所有系統平台)已經安裝了python環境。
來看看怎么使用吧!
Windows
win10 + python3.6 + virtualenv20.2.1 + virtualenvwrapper-win1.2.6
virtualenv
前提條件,要有一個python環境。
下載
在Windows平台,我們直接使用pip下載即可:
pip install virtualenv
pip install virtualenv==20.2.1
pip install -i https://pypi.doubanio.com/simple/ virtualenv==20.2.1
# 測試否時安裝成功
virtualenv --version
不同版本的命令可能稍有差異,具體的說明可以help一下:
virtualenv --help
usage: virtualenv [--version] [--with-traceback] [-v | -q] [--read-only-app-data] [--app-data APP_DATA] [--reset-app-data] [--upgrade-embed-wheels] [--discovery {builtin}] [-p py] [--creator {builtin,cpython3-win,venv}]
[--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list] [--clear] [--no-vcs-ignore] [--system-site-packages] [--copies] [--no-download | --download] [--extra-search-dir d [d ...]] [--pip version]
[--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel] [--no-periodic-update] [--symlink-app-data] [--prompt prompt] [-h]
dest
optional arguments:
--version display the version of the virtualenv package and its location, then exit
--with-traceback on failure also display the stacktrace internals of virtualenv (default: False)
--read-only-app-data use app data folder in read-only mode (write operations will fail with error) (default: False)
--app-data APP_DATA a data folder used as cache by the virtualenv (default: C:\Users\Anthony\AppData\Local\pypa\virtualenv)
--reset-app-data start with empty app data folder (default: False)
--upgrade-embed-wheels trigger a manual update of the embedded wheels (default: False)
-h, --help show this help message and exit
verbosity:
verbosity = verbose - quiet, default INFO, mapping => CRITICAL=0, ERROR=1, WARNING=2, INFO=3, DEBUG=4, NOTSET=5
-v, --verbose increase verbosity (default: 2)
-q, --quiet decrease verbosity (default: 0)
discovery:
discover and provide a target interpreter
--discovery {builtin} interpreter discovery method (default: builtin)
-p py, --python py interpreter based on what to create environment (path/identifier) - by default use the interpreter where the tool is installed - first found wins (default: [])
creator:
options for creator builtin
--creator {builtin,cpython3-win,venv}
create environment via (builtin = cpython3-win) (default: builtin)
dest directory to create virtualenv at
--clear remove the destination directory if exist before starting (will overwrite files otherwise) (default: False)
--no-vcs-ignore don't create VCS ignore directive in the destination directory (default: False)
--system-site-packages give the virtual environment access to the system site-packages dir (default: False)
--copies, --always-copy try to use copies rather than symlinks, even when symlinks are the default for the platform (default: True)
seeder:
options for seeder app-data
--seeder {app-data,pip} seed packages install method (default: app-data)
--no-seed, --without-pip do not install seed packages (default: False)
--no-download, --never-download
pass to disable download of the latest pip/setuptools/wheel from PyPI (default: True)
--download pass to enable download of the latest pip/setuptools/wheel from PyPI (default: False)
--extra-search-dir d [d ...] a path containing wheels to extend the internal wheel list (can be set 1+ times) (default: [])
--pip version version of pip to install as seed: embed, bundle or exact version (default: bundle)
--setuptools version version of setuptools to install as seed: embed, bundle or exact version (default: bundle)
--wheel version version of wheel to install as seed: embed, bundle or exact version (default: bundle)
--no-pip do not install pip (default: False)
--no-setuptools do not install setuptools (default: False)
--no-wheel do not install wheel (default: False)
--no-periodic-update disable the periodic (once every 14 days) update of the embedded wheels (default: False)
--symlink-app-data not supported - symlink the python packages from the app-data folder (requires seed pip>=19.3) (default: False)
activators:
options for activation scripts
--activators comma_sep_list activators to generate - default is all supported (default: bash,batch,fish,powershell,python,xonsh)
--prompt prompt provides an alternative prompt prefix for this environment (default: None)
config file C:\Users\Anthony\AppData\Local\pypa\virtualenv\virtualenv.ini missing (change via env var VIRTUALENV_CONFIG_FILE)
相關操作
以下命令在終端中執行。
創建虛擬環境
關於系統默認的python環境,如果你的Windows中只裝了一個python,那么這個python環境肯定就是默認的了!但如果你一個系統上配置了多個python環境,也就是多版本共存,那么肯定有個是你默認的python環境。
直接使用virtualenv
創建虛擬環境。
D:\env> virtualenv env1
上例,在D:\env
目錄下,創建一個名為env1
的虛擬化境,這個虛擬環境相當於將系統默認的python環境拷貝了一份,只是沒有拷貝其中的第三方包。
當你的虛擬環境創建成功后,它的主要目錄結構是這樣的,其中我們只關注重要的即可:
D:\env\env1 # env1中的主要目錄和文件
├─Lib # 依賴包目錄,必要的工具
│ └─site-packages # 將來安裝的第三方包也在這個目錄中
│ ├─pip
│ ├─pip-20.2.4.dist-info
│ ├─pkg_resources
│ ├─setuptools-50.3.2.dist-info
│ ├─wheel
│ ├─wheel-0.35.1.dist-info
│ └─_distutils_hack
└─Scripts # 一些可執行程序
├─activate.bat # 啟動虛擬環境
├─deactivate.bat # 關閉虛擬環境
├─python.exe # python解釋器
├─pip.exe # 包管理工具 pip 推薦使用
├─easy_install.exe # 包管理工具 easy_install 用的不多了
└─wheel.exe # 包管理工具 wheel 用的也不是很多,但有機會用上
如果配置了多個python版本,且這個虛擬環境有需要指定的python環境,那么創建時要加參數了:
D:\env> virtualenv --python=python27 env2
--python
參數指定python版本。
使用
開啟虛擬環境:activate
當你創建好了虛擬環境之后,想要使用需要開啟:
D:\env>env1\Scripts\activate.bat
(env1) D:\env>
activate.bat
腳本負責啟動當前的虛擬環境,啟動成功后,命令行前會有個括號包着虛擬環境名,標示接下來的關於python的操作都基於當前虛擬環境。
(env1) D:\env>python -V
Python 3.6.6
(env1) D:\env>pip -V
pip 20.2.4 from D:\env\env1\lib\site-packages\pip (python 3.6)
(env1) D:\env>pip list
Package Version
---------- -------
pip 20.2.4
setuptools 50.3.2
wheel 0.35.1
由上面的示例可以看到,此時的虛擬環境是一個獨立、干凈的python環境。
我們可以在這個虛擬環境中,下載包、運行腳本等等都可以,來下個包試試:
(env1) D:\env>pip install requests
(env1) D:\env>pip list
Package Version
---------- ---------
certifi 2020.11.8
chardet 3.0.4
idna 2.10
pip 20.2.4
requests 2.25.0
setuptools 50.3.2
urllib3 1.26.2
wheel 0.35.1
可以看到成功的將requests
模塊下載到了當前的虛擬環境中。
關閉虛擬環境:
(env1) D:\env>env1\Scripts\deactivate.bat
D:\env>
deactivate.bat
腳本負責退出當前的虛擬環境。退出虛擬環境后,命令行前的括號也沒有了。后續的python操作都使用的系統的python環境了。
刪除虛擬環境
這沒啥好說的,從磁盤的目錄中找到env1
這個虛擬環境(其實也就是個目錄),右鍵刪除即可。
virtualenvwrapper
所有的操作請使用 cmd 終端執行,而不是powershell!
virtualenv最大的缺點就是:每次開啟虛擬環境都要去找到虛擬環境所在的位置,然后啟動activate
,這問題就來了,如果虛擬環境多了,然后記性差的同學又忘記了虛擬環境所在的位置....怎么辦呢?
- 將所有的虛擬環境全部都集中起來放到一個目錄下進行集中管理。
- 使用virtualenvwrapper管理你的虛擬環境。
接下來,我們一起來看看如何使用virtualenvwrapper管理虛擬環境。
關於virtualenvwrapper
virtualenvwrapper是virtualenv的擴展包,豐富了virtualenv的功能,讓我們更加方便的管理虛擬環境。
主要功能
- 將所有的虛擬環境整合到一個目錄下
- 一鍵管理(add、remove、copy)虛擬環境
- 一鍵切換虛擬環境
下載
pip36 install -i https://pypi.doubanio.com/simple virtualenvwrapper-win==1.2.6
當你下載完畢,virtualenvwrapper
包將安裝到你系統python環境的Scripts
目錄中。
現在你可以在新的終端中使用它:
C:\Users\Anthony>virtualenvwrapper
virtualenvwrapper is a set of extensions to Ian Bicking's virtualenv
tool. The extensions include wrappers for creating and deleting
virtual environments and otherwise managing your development workflow,
making it easier to work on more than one project at a time without
introducing conflicts in their dependencies.
virtualenvwrapper-win is a port of Dough Hellman's virtualenvwrapper to Windows
batch scripts.
Commands available:
add2virtualenv: add directory to the import path
cdproject: change directory to the active project
cdsitepackages: change to the site-packages directory
cdvirtualenv: change to the $VIRTUAL_ENV directory
lssitepackages: list contents of the site-packages directory
lsvirtualenv: list virtualenvs
mkproject: create a new project directory and its associated virtualenv
mkvirtualenv: Create a new virtualenv in $WORKON_HOME
rmvirtualenv: Remove a virtualenv
setprojectdir: associate a project directory with a virtualenv
toggleglobalsitepackages: turn access to global site-packages on/off
virtualenvwrapper: show this help message
whereis: return full path to executable on path.
workon: list or change working virtualenvs
返回了virtualenvwrapper
的常用命令。
安裝
默認的,virtualenvwrapper
命令創建的虛擬環境將保存在WORKON_HOME
參數指定的目錄中,即echo %USERPROFILE%
下的Env
目錄中,該WORKON_HOME
保存所有的虛擬環境,由virtualenvwrapper
相關命令集中管理。
當然,我們也可以自行指定WORKON_HOME
的目錄,便於我們查找,只需要在系統變量中添加即可:
variable | path |
---|---|
WORKON_HOME |
D:\env |
這樣,我們可以在D:\env
管理創建的虛擬環境了。
常用操作
-- 創建虛擬環境
mkvirtualenv env1
mkvirtualenv --python=python2 env2
-- 查看所有已創建的虛擬環境
lsvirtualenv
workon # workon也可以切換不同的虛擬環境
-- 啟動/退出虛擬環境
workon env1
deactivate
-- 進入已啟動的虛擬環境目錄
cdvirtualenv
-- 查看已啟動的虛擬環境的 site-packages 目錄中的內容
lssitepackages
-- 刪除已停止運行的虛擬環境
rmvirtualenv env2
Linux
centos7.3 + python3.6 + virtualenv20.2.1 + virtualenvwrapper4.8.4
Linux中也可以使用虛擬環境,套路跟Windows中差不多,也是要提前配置好python環境。
但Linux中可以使用virtualenv和virtualenvwrapper兩個工具來管理虛擬環境。
virtualenv
下載
[root@cs ~]# pip3 install -i https://pypi.doubanio.com/simple/ virtualenv==20.2.1
使用
創建虛擬環境:
[root@cs env]# virtualenv env2
[root@cs env]# virtualenv --python=python27 env2
創建好虛擬環境后,其目錄如下:
/tmp/env/env1
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── activate.ps1
│ ├── activate_this.py
│ ├── activate.xsh
│ ├── easy_install
│ ├── easy_install3
│ ├── easy_install-3.6
│ ├── easy_install3.6
│ ├── pip
│ ├── pip3
│ ├── pip-3.6
│ ├── pip3.6
│ ├── python -> /usr/local/src/python36/bin/python3
│ ├── python3 -> python
│ ├── python3.6 -> python
│ ├── wheel
│ ├── wheel3
│ ├── wheel-3.6
│ └── wheel3.6
├── lib
│ └── python3.6
│ └── site-packages
│ ├── _distutils_hack
│ ├── distutils-precedence.pth
│ ├── easy_install.py
│ ├── pip
│ ├── pip-20.2.4.dist-info
│ ├── pip-20.2.4.virtualenv
│ ├── pkg_resources
│ ├── setuptools
│ ├── setuptools-50.3.2.dist-info
│ ├── setuptools-50.3.2.virtualenv
│ ├── _virtualenv.pth
│ ├── _virtualenv.py
│ ├── wheel
│ ├── wheel-0.35.1.dist-info
│ └── wheel-0.35.1.virtualenv
└── pyvenv.cfg
細心的你可能發現,啟動虛擬環境的activate
腳本在/env1/bin
目錄中(這點跟Windows稍有區別),所以啟動需要這么啟動:
[root@cs env]# source /tmp/env/env1/bin/activate # 使用source啟動虛擬環境
(env1) [root@cs env]# python -V
Python 3.6.8
(env1) [root@cs env]# pip list
Package Version
---------- -------
pip 20.2.4
setuptools 50.3.2
wheel 0.35.1
(env1) [root@cs env]# pip install requests
(env1) [root@cs env]# pip list
Package Version
---------- ---------
certifi 2020.11.8
chardet 3.0.4
idna 2.10
pip 20.2.4
requests 2.25.0
setuptools 50.3.2
urllib3 1.26.2
wheel 0.35.1
(env1) [root@cs env]# deactivate # 退出虛擬環境
[root@cs env]#
跟Windows中另一個區別是,deactivate
命令不再是一個腳本文件,而是一個函數,這個函數寫在activate
腳本中,當activate
腳本啟動時,就添加到shell環境中,稱為了一個變量,所以,我們在虛擬環境中的任何路徑下都可以退出虛擬環境。
刪除
無需多說,rm -rf
命令它不香么!
virtualenvwrapper
關於vitualenvwrapper在Windows部分已經介紹過了,這里直接上干貨!
下載
pip3 install -i https://pypi.doubanio.com/simple virtualenvwrapper==4.8.4
現在,它被下載在你系統python環境中的bin
目錄中,叫做virtualenvwrapper.sh
。
安裝
下載完不能立即使用,而是要做一些基本配置,vim /etc/profile
:
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/src/python36/bin/python3
其中:
WORKON_HOME
保存所有已創建的虛擬環境。VIRTUALENVWRAPPER_PYTHON
是python解釋器的路徑。
完事后,source /etc/profile
。
安裝virtualenvwrapper
:
[root@cs ~]# source /usr/local/src/python36/bin/virtualenvwrapper.sh
[root@cs ~]# virtualenvwrapper # 返回幫助信息
完事了。
常用操作
-- 創建虛擬環境
mkvirtualenv env1
mkvirtualenv --python=python2 env2
-- 查看所有已創建的虛擬環境
lsvirtualenv
workon # workon也可以切換不同的虛擬環境
-- 啟動/退出虛擬環境
workon env1
deactivate
-- 進入已啟動的虛擬環境目錄
cdvirtualenv
-- 查看已啟動的虛擬環境的 site-packages 目錄中的內容
lssitepackages
-- 刪除已停止運行的虛擬環境
rmvirtualenv env2
虛擬環境結合Django實戰
win10
本小節演示使用virtualenvwrapper
創建虛擬環境,並依此虛擬環境創建django項目。
- 創建虛擬環境
env1
:
D:\tmp> mkvirtualenv env1
- 啟動虛擬環境:
D:\tmp>workon env1
(env1) D:\tmp>
- 使用虛擬環境中的pip下載django:
(env1) D:\tmp>pip install -i https://pypi.doubanio.com/simple django
- 使用django命令創建django項目和app:
(env1) D:\tmp>django-admin startproject env_demo1
(env1) D:\tmp>cd env_demo1
(env1) D:\tmp\env_demo1>django-admin startapp app01
- 啟動django項目:
(env1) D:\tmp\env_demo1>python manage.py runserver 127.0.0.1:8888
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 26, 2020 - 15:13:45
Django version 3.1.3, using settings 'env_demo1.settings'
Starting development server at http://127.0.0.1:8888/
Quit the server with CTRL-BREAK.
瀏覽器訪問吧!
虛擬環境在Pycharm中的應用
win10 + python3.6 + pycharm2018.1
現在我們研究虛擬環境在Pycharm中的應用。
Pycharm使用現有的虛擬環境
現在,我們要開發上一小節創建的django項目了。
- 使用pycharm打開
env_demo1
項目根路徑。 file
▶settings
▶project env_demo1
▶project interpreter
-
因為虛擬環境之前創建好了,所以選擇
system interpreter
,然后右側從本地找到虛擬環境中的解釋器即可,完事一路ok。
-
完事,現在就用上了之前創建虛擬環境 env1 了:
愉快的開發吧!
pycharm創建虛擬環境
pycharm集成了virtualenv的環境。
所以,我們可以在pycharm中直接創建虛擬環境。
file
▶settings
▶project env_demo1
▶project interpreter
,點擊設置按鈕選擇add
,配置相關參數即可。
OK了,一個干凈的虛擬環境創建完畢。
pycharm創建django並同時創建虛擬環境
pycharm集成了django開發環境。
所以,我們在使用pycharm創建django項目的時候,可以同時選擇創建一個新的虛擬環境或者選擇現有的虛擬環境或者python環境作用於當前的項目。
來看操作吧!
file
▶new project
▶Django
這就一步到位了.....
但有個問題,django的版本是你系統解釋器的內的django版本,這個沒法改變。
虛擬環境中應用requirements
that's all, see also:
https://virtualenv.pypa.io/en/latest/# | Linux下virtualenv與virtualenvwrapper詳解 | Linux環境下虛擬環境virtualenv安裝和使用 | virtualenvwrapper | 安裝virtualevn