Python - Virtualenv


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項目。

  1. 創建虛擬環境env1
D:\tmp> mkvirtualenv env1
  1. 啟動虛擬環境:
D:\tmp>workon env1
(env1) D:\tmp>
  1. 使用虛擬環境中的pip下載django:
(env1) D:\tmp>pip install -i https://pypi.doubanio.com/simple django
  1. 使用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
  1. 啟動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項目了。

  1. 使用pycharm打開env_demo1項目根路徑。
  2. filesettingsproject env_demo1project interpreter

  1. 因為虛擬環境之前創建好了,所以選擇system interpreter,然后右側從本地找到虛擬環境中的解釋器即可,完事一路ok。

  2. 完事,現在就用上了之前創建虛擬環境 env1 了:

愉快的開發吧!

pycharm創建虛擬環境

pycharm集成了virtualenv的環境。
所以,我們可以在pycharm中直接創建虛擬環境。
filesettingsproject env_demo1project interpreter,點擊設置按鈕選擇add,配置相關參數即可。

OK了,一個干凈的虛擬環境創建完畢。

pycharm創建django並同時創建虛擬環境

pycharm集成了django開發環境。
所以,我們在使用pycharm創建django項目的時候,可以同時選擇創建一個新的虛擬環境或者選擇現有的虛擬環境或者python環境作用於當前的項目。
來看操作吧!
filenew projectDjango

這就一步到位了.....
但有個問題,django的版本是你系統解釋器的內的django版本,這個沒法改變。

虛擬環境中應用requirements

https://www.cnblogs.com/Neeo/articles/10831164.html


that's all, see also:

https://virtualenv.pypa.io/en/latest/# | Linux下virtualenv與virtualenvwrapper詳解 | Linux環境下虛擬環境virtualenv安裝和使用 | virtualenvwrapper | 安裝virtualevn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM