在开发Python应用程序时,系统默认的Python版本可能会不兼容这个应用程序, 如果同时开发多个应用程序, 可能会用到好几个版本的python环境, 这种情况下,每个应用可能需要各自拥有一套"独立"的Python运行环境。virtualenv就是用来为一个应用创建一套"隔离"的Python运行环境的工具。virtualenv是python的一个虚拟化环境工具,用来建立一个虚拟的python环境,一个专属于项目的python环境, 用virtualenv 来保持一个干净的环境非常有用, 可以帮助我们在同一台host上创建多套纯净的python解释器环境并实现相互隔离,各个环境下安装的库仅限于自己的环境,不会影响到别人。

动态语言Ruby、Python都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响。例如项目A在基于Python2的环境中运行,而项目B可以在基于Python3的环境中运行。Python通virtualenv工具管理虚拟环境。

简而言之, Virtualenv是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包。Virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够帮助:
-  在没有权限的情况下安装新套件;
-  不同应用可以使用不同的套件版本;
-  套件升级不影响其他应用。
-  隔离项目之间的第三方包依赖
-  在没有权限的情况下安装新的Python软件包
-  还有一个额外的好处:部署应用时,把开发环境的虚拟环境打包到生产环境即可。

virtualenv 安装

  1. [root@kevin-test ~]# cat /etc/redhat-release (本文是在centos7下操作并验证无误)
  2. CentOS Linux release 7.5.1804 (Core)
  3.  
  4. [root@kevin-test ~]# python -V
  5. Python 2.7.5
  6.  
  7. [root@kevin-test ~]# pip -V
  8. -bash: pip: command not found
  9.  
  10. 先来安装pip
  11. [root@kevin-test ~]# yum -y install epel-release
  12. [root@kevin-test ~]# yum install python-pip
  13. [root@kevin-test ~]# pip install --upgrade pip
  14. [root@kevin-test ~]# pip -V
  15. pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
  16.  
  17. 通过pip安装virtualenv
  18. [root@kevin-test ~]# pip install virtualenv
  19. Collecting virtualenv
  20. Downloading https://files.pythonhosted.org/packages/7c/17/9b7b6cddfd255388b58c61e25b091047f6814183e1d63741c8df8dcd65a2/virtualenv-16.1.0-py2.py3-none-any.whl (1.9MB)
  21. 100% |████████████████████████████████| 1.9MB 1.3MB/s
  22. Installing collected packages: virtualenv
  23. Successfully installed virtualenv-16.1.0
  24.  
  25. 测试安装后virtualenv的版本
  26. [root@kevin-test ~]# virtualenv --version
  27. 16.1.0
  28.  
  29. 查看帮助
  30. [root@kevin-test ~]# virtualenv --help
  31. Usage: virtualenv [OPTIONS] DEST_DIR
  32.  
  33. Options:
  34. --version show program's version number and exit
  35. -h, --help show this help message and exit
  36. -v, --verbose Increase verbosity.
  37. -q, --quiet Decrease verbosity.
  38. -p PYTHON_EXE, --python=PYTHON_EXE
  39. The Python interpreter to use, e.g.,
  40. --python=python3.5 will use the python3.5 interpreter
  41. to create the new environment. The default is the
  42. interpreter that virtualenv was installed with
  43. (/usr/bin/python2)
  44. --clear Clear out the non-root install and start from scratch.
  45. --no-site-packages DEPRECATED. Retained only for backward compatibility.
  46. Not having access to global site-packages is now the
  47. default behavior.
  48. --system-site-packages
  49. Give the virtual environment access to the global
  50. site-packages.
  51. --always-copy Always copy files rather than symlinking.
  52. --relocatable Make an EXISTING virtualenv environment relocatable.
  53. This fixes up scripts and makes all .pth files
  54. relative.
  55. --no-setuptools Do not install setuptools in the new virtualenv.
  56. --no-pip Do not install pip in the new virtualenv.
  57. --no-wheel Do not install wheel in the new virtualenv.
  58. --extra-search-dir=DIR
  59. Directory to look for setuptools/pip distributions in.
  60. This option can be used multiple times.
  61. --download Download preinstalled packages from PyPI.
  62. --no-download, --never-download
  63. Do not download preinstalled packages from PyPI.
  64. --prompt=PROMPT Provides an alternative prompt prefix for this
  65. environment.
  66. --setuptools DEPRECATED. Retained only for backward compatibility.
  67. This option has no effect.
  68. --distribute DEPRECATED. Retained only for backward compatibility.
  69. This option has no effect.
  70. --unzip-setuptools DEPRECATED. Retained only for backward compatibility.
  71. This option has no effect.

virtualenv 使用

  1. 现在为某一个工程创建一个虚拟环境, 创建一个独立的Python运行环境,命名为pj_test (这是虚拟环境目录名,目录名可自行自定义)
  2. [root@kevin-test ~]# cd /opt/
  3. [root@kevin-test opt]# mkdir project_test
  4. [root@kevin-test opt]# cd project_test
  5. [root@kevin-test project_test]# virtualenv --no-site-packages pj_test
  6. New python executable in /opt/project_test/pj_test/bin/python2
  7. Also creating executable in /opt/project_test/pj_test/bin/python
  8. Installing setuptools, pip, wheel...
  9. done.
  10.  
  11. 如上命令virtualenv就可以创建一个独立的Python运行环境,这里还加上了参数--no-site-packages (也可以不跟这个参数),这样已经安装到系统Python环境
  12. 中的所有第三方包都不会复制过来,于是就得到了一个不带任何第三方包的"干净"Python运行环境。
  13.  
  14. 上面命令将会在当前的目录中创建一个文件夹pj_test,这个文件夹包含一些Python执行文件,以及pip副本,用于安装其他的packges
  15. 虚拟环境的名字(此例中是pj_test )可以是任意的;若省略名字将会把文件均放在当前目录。
  16.  
  17. [root@kevin-test project_test]# ls
  18. pj_test
  19. [root@kevin-test project_test]# ls pj_test/
  20. bin include lib lib64
  21.  
  22. [root@kevin-test project_test]# yum install -y tree
  23. [root@kevin-test project_test]# tree pj_test/bin
  24. pj_test/bin
  25. ├── activate
  26. ├── activate.csh
  27. ├── activate.fish
  28. ├── activate.ps1
  29. ├── activate_this.py
  30. ├── easy_install
  31. ├── easy_install-2.7
  32. ├── pip
  33. ├── pip2
  34. ├── pip2.7
  35. ├── python -> python2
  36. ├── python2
  37. ├── python2.7 -> python2
  38. ├── python-config
  39. └── wheel
  40.  
  41. [root@kevin-test project_test]# tree pj_test/include/
  42. pj_test/include/
  43. └── python2.7 -> /usr/include/python2.7
  44.  
  45. [root@kevin-test project_test]# tree pj_test/lib| head -3
  46. pj_test/lib
  47. └── python2.7
  48. ├── _abcoll.py -> /usr/lib64/python2.7/_abcoll.py
  49.  
  50. 新建的Python环境被放到当前目录下的pj_test目录。有了pj_test这个Python环境,可以用source激活虚拟环境:
  51. [root@kevin-test project_test]# pwd
  52. /opt/project_test
  53. [root@kevin-test project_test]# ls
  54. pj_test
  55. [root@kevin-test project_test]# cd pj_test/
  56. [root@kevin-test pj_test]# source ./bin/activate
  57. (pj_test) [root@kevin-test pj_test]# python -V
  58. Python 2.7.5
  59.  
  60. 激活虚拟环境, 在虚拟环境里, 任何使用pip安装的包将会放在 venv 文件夹中,与全局安装或其他应用的Python环境完全隔绝开。
  61.  
  62. 如果创建虚拟环境时不选择指定的python版本, 那么虚拟环境创建后默认就是系统默认的python版本.
  63. 比如如果系统还有一个python3.6.1, 路径为: /usr/local/python3/bin/python3
  64. [root@kevin-test pj_test]# /usr/local/python3/bin/python3 -V
  65. Python 3.6.1
  66.  
  67. 则创建虚拟机时选择指定的python版本
  68. [root@kevin-test project_test]# virtualenv --no-site-packages -p /usr/local/python3/bin/python3.6.1 pj_test
  69. [root@kevin-test project_test]# cd pj_test/
  70. [root@kevin-test pj_test]# source ./bin/activate
  71. (pj_test) [root@kevin-test pj_test]# python -V
  72. Python 3.6.1
  73.  
  74. 可以在服务器上提前安装多个版本的python环境, 不同版本的python的二进制路径不一样
  75. 然后在使用virtualenv创建各个项目的虚拟环境时指定不同的python版本, 这样各个项目python解释器环境就实现了相互隔离, 非常纯净!
  76.  
  77. 使用"deactivate" 命令退出或停用虚拟环境:
  78. [root@kevin-test project_test]# cd pj_test/
  79. [root@kevin-test pj_test]# source ./bin/activate
  80. (pj_test) [root@kevin-test pj_test]# python -V
  81. Python 2.7.5
  82. (pj_test) [root@kevin-test pj_test]# deactivate
  83. [root@kevin-test pj_test]#
  84.  
  85. 退出虚拟环境后, 此时就回到了正常的环境,现在pippython均是在系统Python环境下执行。
  86. 退出虚拟环境后, 之前在虚拟环境里的部署的应用程序的使用都不会受到影响!
  87. 完全可以针对每个应用创建独立的Python运行环境,这样就可以对每个应用的Python环境进行隔离。
  88.  
  89. 如果要删除一个虚拟环境, 只需删除它的虚拟目录即可, 比如要删除虚拟环境pj_test, 则:
  90. [root@kevin-test pj_test]# rm -rf /opt/project_test/pj_test/

在虚拟环境安装 Python packages

  1. Virtualenv 附带有pip安装工具,因此需要安装的packages可以直接运行:
  2. (pj_test) [root@kevin-test pj_test]# pip install [套件名称]
  3. (pj_test) [root@kevin-test pj_test]# pip -V
  4. pip 18.1 from /opt/project_test/pj_test/lib/python2.7/site-packages/pip (python 2.7)
  5.  
  6. (pj_test) [root@kevin-test pj_test]# pip install jinja2
  7.  
  8. 安装后, 可以在虚拟环境里找到这个套件
  9. (pj_test) [root@kevin-test pj_test]# ll -d /opt/project_test/pj_test/lib/python2.7/site-packages/jinja2/
  10. drwxr-xr-x 2 root root 4096 Dec 17 18:26 /opt/project_test/pj_test/lib/python2.7/site-packages/jinja2/
  11.  
  12. 在虚拟环境下,用pip安装的包都被安装到对应虚拟的这个环境下,系统Python环境不受任何影响。
  13. 也就是说,虚拟环境是专门针对具体的某个应用创建的。
  14.  
  15. [root@kevin-test ~]# pip -V
  16. pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
  17.  
  18. 如果没有启动虚拟环境,系统环境也安装了pip工具,那么packages将被安装在系统环境中.
  19. 为了避免发生此事,可以在~/.bashrc文件中加上 (最好添加下面的内容):
  20. [root@kevin-test ~]# vim ~/.bashrc
  21. export PIP_REQUIRE_VIRTUALENV=true
  22.  
  23. 使配置生效
  24. [root@kevin-test ~]# source ~/.bashrc
  25.  
  26. 如果在没开启虚拟环境时, 在虚拟环境之外的系统上运行pip,就会提示错误:"Could not find an activated virtualenv (required)".

如上安装好virtualenv之后, 就可以解决python版本冲突问题和python库不同版本的问题了!!

virtualenv 用法小总结

  1. 1) 创建环境
  2. virtualenv [新环境名] :这会再当前目录下创建一个新环境目录
  3. 可使用 virtualenv --help 来查看如何使用。可以使用参数 --python=/usr/bin/python3 来创建一个已经安装的的Python环境。
  4.  
  5. 2) 使用环境
  6. 切换到项目的新环境目录
  7. 执行:source ./bin/activate 来激活环境,激活后在命令行的前面会出现新环境名称
  8. 接下来可使用pip命令安装新环境需要的各种包。(pip命令在创建新环境时自带)
  9.  
  10. 3) 退出虚拟环境
  11. deactivate
  12. 如果要删除虚拟环境,只需退出虚拟环境后,删除对应的虚拟环境目录即可。不影响其他环境。
  13.  
  14. 4) 注意事项
  15. 如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:export PIP_REQUIRE_VIRTUALENV=true
  16. 或者让在执行pip的时候让系统自动开启虚拟环境:export PIP_REQUIRE_VIRTUALENV=true
  17.  
  18. 5) 保证环境一致性
  19. pip freeze查看当前安装版本
  20. [root@kevin-test ~]# pip freeze
  21.  
  22. 另外:
  23. [root@kevin-test ~]# pip freeze > requirements.txt
  24. 这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
  25. 可以使用 "pip list"在不产生requirements文件的情况下, 查看已安装包的列表。
  26.  
  27. 这将会使另一个不同的开发者(或者是你本人,如果你本人需要重新创建这样的环境) 在以后安装相同版本的相同包变得容易。
  28. 将这个requirements.txt拷贝到新的机器环境下执行:
  29. # pip install -r requirements.txt
  30.  
  31. 这能帮助确保安装、部署和开发者之间的一致性。

虚拟环境管理工具 - Virtualenvwrapper 
virtualenv使用起来不是很方便,因为virtual的启动、停止脚本都在特定目录,可能一段时间后,你可能会有很多个虚拟环境散落在系统各处,你可能忘记它们的名字或者位置。鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper。 virtualenvwrapper提供了一系列命令使得和虚拟环境工作变得便利。它把你所有的虚拟环境都放在一个地方。

  1. Virtaulenvwrappervirtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
  2. - 将所有虚拟环境整合在一个目录下;
  3. - 管理(新增,删除,复制)虚拟环境;
  4. - 切换虚拟环境等等.
  5.  
  6. 安装virtualenvwrapper (确保virtualenv已提前安装)
  7. [root@kevin-test ~]# pip install virtualenvwrapper
  8. Could not find an activated virtualenv (required).
  9.  
  10. 如果出现上面的报错:"Could not find an activated virtualenv (required)."
  11.  
  12. 解决办法:
  13. 打开~/.bashrc文件, 添加下面的内容
  14. [root@kevin-test ~]# vim ~/.bashrc
  15. export PIP_REQUIRE_VIRTUALENV=true
  16. [root@kevin-test ~]# source ~/.bashrc
  17.  
  18. 然后接着安装virtualenvwrapper
  19. [root@kevin-test ~]# pip install virtualenvwrapper
  20.  
  21. 如果还是出现上面的那个报错:"Could not find an activated virtualenv (required)."
  22.  
  23. 接着执行下面命令(~/.bashrc文件里设置该参数为true, 确保pip安装的包在虚拟环境下; 虚拟环境之外的系统里执行pip时, 每次需要手动source 这个参数的false值)
  24. [root@kevin-test ~]# export PIP_REQUIRE_VIRTUALENV=false
  25.  
  26. 最后再次安装virtualenvwrapper即可
  27. [root@kevin-test ~]# pip install virtualenvwrapper
  28. Collecting virtualenvwrapper
  29. Using cached https://files.pythonhosted.org/packages/2b/8c/3192e10913ad945c0f0fcb17e9b2679434a28ad58ee31ce0104cba3b1154/virtualenvwrapper-4.8.2-py2.py3-none-any.whl
  30. Requirement already satisfied: virtualenv-clone in /usr/lib/python2.7/site-packages/virtualenv_clone-0.4.0-py2.7.egg (from virtualenvwrapper) (0.4.0)
  31. Requirement already satisfied: stevedore in /usr/lib/python2.7/site-packages/stevedore-1.30.0-py2.7.egg (from virtualenvwrapper) (1.30.0)
  32. Requirement already satisfied: virtualenv in /usr/lib/python2.7/site-packages (from virtualenvwrapper) (16.1.0)
  33. Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/lib/python2.7/site-packages/pbr-5.1.1-py2.7.egg (from stevedore->virtualenvwrapper) (5.1.1)
  34. Requirement already satisfied: six>=1.10.0 in /usr/lib/python2.7/site-packages/six-1.12.0-py2.7.egg (from stevedore->virtualenvwrapper) (1.12.0)
  35. Installing collected packages: virtualenvwrapper
  36. Successfully installed virtualenvwrapper-4.8.2
  37.  
  38. 默认virtualenvwrapper安装在下面python解释器中的site-packages,实际上需要运行virtualenvwrapper.sh文件才行;
  39. 所以要查找出安装的virtualenvwrapper.sh执行文件
  40. [root@kevin-test ~]# find / -name virtualenvwrapper*
  41. /usr/bin/virtualenvwrapper.sh
  42. /usr/bin/virtualenvwrapper_lazy.sh
  43. /usr/lib/python2.7/site-packages/virtualenvwrapper-4.8.2-py2.7-nspkg.pth
  44. /usr/lib/python2.7/site-packages/virtualenvwrapper
  45. /usr/lib/python2.7/site-packages/virtualenvwrapper-4.8.2.dist-info
  46.  
  47. 此时还不能使用virtualenvwrapper,每次要想使用virtualenvwrapper 工具时,都必须先激活virtualenvwrapper.sh文件才行,
  48. 另外,如果创建前要将即将的环境保存到虚拟环境中,就要先设置一下环境变量
  49.  
  50. 设置环境变量
  51. [root@kevin-test ~]# export WORKON_HOME=~/Envs
  52.  
  53. 创建虚拟环境管理目录. 即创建的虚拟环境都会放到上面设置的~/Envs目录下面
  54. [root@kevin-test ~]# mkdir -p $WORKON_HOME
  55.  
  56. 在~/.bashrc文件里配置环境变量, 添加下面两行
  57. 第一行表示: 存放虚拟环境目录
  58. 第二行表示: virtrualenvwrapper.sh执行文件的路径
  59. [root@kevin-test ~]# vim ~/.bashrc
  60. export WORKON_HOME=~/Envs
  61. source /usr/bin/virtualenvwrapper.sh
  62.  
  63. 使得以上环境变量的配置生效
  64. [root@kevin-test ~]# source ~/.bashrc
  65.  
  66. 现在开始使用Virtualenvwrapper 管理虚拟机 (可以删除上面之前创建的虚拟环境/opt/project_test/pj_test 了, 后续都将使用Virtualenvwrapper创建和管理虚拟环境)
  67.  
  68. a) 使用mkvirtualenv 命令创建虚拟环境
  69. 创建一个虚拟环境, 虚拟机名称为project_kevin
  70. [root@kevin-test ~]# mkvirtualenv project_kevin
  71. New python executable in /root/Envs/project_kevin/bin/python2
  72. Also creating executable in /root/Envs/project_kevin/bin/python
  73. Installing setuptools, pip, wheel...
  74. done.
  75. virtualenvwrapper.user_scripts creating /root/Envs/project_kevin/bin/predeactivate
  76. virtualenvwrapper.user_scripts creating /root/Envs/project_kevin/bin/postdeactivate
  77. virtualenvwrapper.user_scripts creating /root/Envs/project_kevin/bin/preactivate
  78. virtualenvwrapper.user_scripts creating /root/Envs/project_kevin/bin/postactivate
  79. virtualenvwrapper.user_scripts creating /root/Envs/project_kevin/bin/get_env_details
  80. (project_kevin) [root@kevin-test ~]#
  81.  
  82. 再创建另一个虚拟机, 虚拟机名称为project_bobo
  83. (project_kevin) [root@kevin-test ~]# deactivate //先退出上面的那个虚拟环境
  84. [root@kevin-test ~]# mkvirtualenv --no-site-packages project_bo //这里加上了参数--no-site-packages
  85. New python executable in /root/Envs/project_bo/bin/python2
  86. Also creating executable in /root/Envs/project_bo/bin/python
  87. Installing setuptools, pip, wheel...
  88. done.
  89. virtualenvwrapper.user_scripts creating /root/Envs/project_bo/bin/predeactivate
  90. virtualenvwrapper.user_scripts creating /root/Envs/project_bo/bin/postdeactivate
  91. virtualenvwrapper.user_scripts creating /root/Envs/project_bo/bin/preactivate
  92. virtualenvwrapper.user_scripts creating /root/Envs/project_bo/bin/postactivate
  93. virtualenvwrapper.user_scripts creating /root/Envs/project_bo/bin/get_env_details
  94. (project_bo) [root@kevin-test ~]#
  95.  
  96. ====================================================
  97. 还可以选择指定的python版本进行虚拟环境的创建, 不过指定的python版本必须要提前安装好, 比如
  98. # mkvirtualenv project_hui --python=python3.6.1
  99. # mkvirtualenv project_hui --python=/usr/local/python3/bin/python3.6.1
  100. ====================================================
  101.  
  102. 创建的虚拟环境的项目目录都放在了上面设置的环境变量目录~/Envs下面
  103. [root@kevin-test ~]# ll -d ~/Envs/project_kevin/
  104. drwxr-xr-x 5 root root 56 Dec 17 22:27 /root/Envs/project_kevin/
  105. [root@kevin-test ~]# ll -d ~/Envs/project_bo/
  106. drwxr-xr-x 5 root root 56 Dec 17 22:28 /root/Envs/project_bo/
  107.  
  108. b) 使用workon 或者 lsvirtualenv 命令列出虚拟环境列表
  109. [root@kevin-test ~]# workon
  110. project_bo
  111. project_kevin
  112.  
  113. 或者
  114. [root@kevin-test ~]# lsvirtualenv
  115. project_bo
  116. ==========
  117.  
  118. project_kevin
  119. =============
  120.  
  121. c) 使用workon 启动/切换虚拟环境
  122. [root@kevin-test ~]# workon project_bo
  123. (project_bo) [root@kevin-test ~]# python -V
  124. Python 2.7.5
  125. (project_bo) [root@kevin-test ~]#
  126.  
  127. 创建一个项目,它会创建虚拟环境,并在 $WORKON_HOME 中创建一个项目目录。
  128. 当您使用 "workon 项目的虚拟环境名称" 时,它会自动cd -ed 到项目目录中。
  129.  
  130. d) 使用deactivate命令退出/离开虚拟环境,和virutalenv一样的命令
  131. [root@kevin-test ~]# workon project_bo
  132. (project_bo) [root@kevin-test ~]# python -V
  133. Python 2.7.5
  134. (project_bo) [root@kevin-test ~]# deactivate
  135. [root@kevin-test ~]#
  136.  
  137. e) 使用rmvirtualenv 命令 删除虚拟环境
  138. [root@kevin-test ~]# lsvirtualenv
  139. project_bo
  140. ==========
  141.  
  142. project_kevin
  143. =============
  144.  
  145. [root@kevin-test ~]# rmvirtualenv project_bo
  146. Removing project_bo...
  147. [root@kevin-test ~]# lsvirtualenv
  148. project_kevin
  149. =============
  150.  
  151. f) 使用lssitepackages命令显示 site-packages 目录中的内容。
  152. [root@kevin-test ~]# workon project_kevin
  153. (project_kevin) [root@kevin-test ~]# lssitepackages
  154. easy_install.py pip pkg_resources setuptools-40.6.3.dist-info wheel-0.32.3.dist-info
  155. easy_install.pyc pip-18.1.dist-info setuptools wheel
  156.  
  157. g) 使用cdvirtualenv命令导航到当前激活的虚拟环境的目录中,比如说这样就能够浏览它的site-packages
  158. [root@kevin-test ~]# workon project_kevin
  159. (project_kevin) [root@kevin-test site-packages]# cdvirtualenv
  160. (project_kevin) [root@kevin-test project_kevin]# ls
  161. bin include lib lib64
  162.  
  163. h) 使用cdsitepackages命令直接进入到 site-packages 目录中, 和上面的cdvirtualenv 类似
  164. [root@kevin-test ~]# workon project_kevin
  165. (project_kevin) [root@kevin-test ~]# cdsitepackages
  166. (project_kevin) [root@kevin-test site-packages]# ls
  167. easy_install.py pip pkg_resources setuptools-40.6.3.dist-info wheel-0.32.3.dist-info
  168. easy_install.pyc pip-18.1.dist-info setuptools wheel
  169.  
  170. =============================================
  171. 为了方便运维管理, 可以进行一些别名设置, 如下:
  172. [root@kevin-test ~]# vim ~/.bashrc
  173. #virtualenv
  174. alias vte='virtualenv'
  175. alias mkvte='mkvirtualenv'
  176. alias deact='deactivate'
  177. alias rmvte='rmvirtualenv'
  178. alias lsvte='lsvirtualenv'
  179. alias won='workon'
  180.  
  181. 使得上面配置生效
  182. [root@kevin-test ~]# source ~/.bashrc
  183.  
  184. 使用别名进行操作
  185. [root@kevin-test ~]# lsvte
  186. project_kevin
  187. =============
  188.  
  189. [root@kevin-test ~]# won project_kevin
  190. (project_kevin) [root@kevin-test ~]# deact
  191.  
  192. [root@kevin-test ~]# rmvte project_kevin
  193. Removing project_kevin...
  194.  
  195. [root@kevin-test ~]# lsvte
  196. [root@kevin-test ~]#

virtualenv使用时遇到的一个坑点, 经常排查验证, 得出结论如下:

  1. 1) root用户和普通用户都可以创建虚拟环境(比如虚拟环境名称为venv),venv虚拟环境的相关文件和文件夹的owner都是该用户,
  2. 如果是非root的其他用户激活该venv虚拟环境的话,会因为文件权限的问题导致python库安装失败!!
  3. 所以说: root用户不要去激活使用其他用户创建的venv虚拟环境!
  4.  
  5. 2) 一旦以用户A的身份激活venv虚拟环境后,在虚拟环境中就不能再通过su命令切换其他用户,否则会自动退出虚拟环境!
  6. 所以说: 在虚拟环境中不要通过su切换用户!
  7.  
  8. 3) 以用户A的身份激活某venv虚拟环境后,在虚拟环境中所有通过"sudo + cmd"执行的命令,都等同于在虚拟环境外执行。
  9. 所以说: 在虚拟环境中不要通过sudo执行命令
  10.  
  11. 以上提到的3个小问题,在使用virtualenv的时候一定要注意。

Python虚拟环境工具-Virtualenv 介绍及部署记录的更多相关文章

  1. 【Django】Python虚拟环境工具virtualenv

    教程 第一步:安装virtualenv $pip install virtualenv 第二步:开启虚拟环境的python $cd ENV/Scripts $activate.bat #启用virtu ...

  2. (zhuan)Python 虚拟环境:Virtualenv

    Python 虚拟环境:Virtualenv zhuanzi: http://liuzhijun.iteye.com/blog/1872241 virtualenv virtualenv用于创建独立的 ...

  3. Python多版本管理器-pyenv 介绍及部署记录

    一. pyenv简单介绍 在日常运维中, 经常遇到这样的情况: 系统自带的Python是2.x,而业务部署需要Python 3.x 环境, 此时需要在系统中安装多个Python版本,但又不能影响系统自 ...

  4. Python虚拟环境 之 virtualenv 与 virtualenvwrapper

           在开发Python应用程序的时候,比如系统安装的Python3只有一个版本:3.6.所有第三方的包都会被 pip 安装到Python3的 site-packages 目录下. 如果我们要 ...

  5. python 虚拟环境操作 virtualenv +virtualenvwrapper

    Window 下创建python的虚拟环境 下载工具 pip install virtualenv 创建虚拟环境目录 # 注意此命令创建的虚拟环境目录是在当前目录下 virtualenv testen ...

  6. Python虚拟环境(virtualenv)

    python虚拟环境 虚拟环境:一个独立的可以运行的python执行环境,可以创建多个,且相互之间互不影响 使用virtualenv库 pip install virtualenv 用法 # 创建虚拟 ...

  7. Centos下分布式跟踪工具Pinpoint的完整部署记录

    一.Pinpoint简单介绍Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统.分布式跟踪系统.一般来说,前端向后台发起一个查询请求,后台服务可能 ...

  8. Python 虚拟环境:Virtualenv

    安装sudo yum install python-virtualenv 使用方法 virtualenv [虚拟环境名称] 如,创建**ENV**的虚拟环境 virtualenv ENV 默认情况下, ...

  9. Python虚拟环境安装virtualenv

    解决了多个版本共存的问题 virtualenv 为每个不同项目提供一份 Python 安装.它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立. 安装vir ...

随机推荐

  1. Beta阶段第五篇Scrum冲刺博客-Day4

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 张晨晨:目标增加单词收藏功能 郭琪容:学习收藏功能的实 ...

  2. Latex 表格(跨行、跨列、背景加灰)new

    一. 效果如图 二.代码如下 1. 首部增加宏包: \usepackage{multirow} 2. 正文部分增加: \begin{table} \centering \caption{Suspici ...

  3. Azure DevOps Server: 使用Rest Api获取拉取请求Pull Request中的变更文件清单

    需求: Azure DevOps Server 的拉取请求模块,为开发团队提供了强大而且灵活的代码评审功能.拉取请求中变更文件清单,对质量管理人员,是一个宝贵的材料.质量保障人员可以从代码清单中分析不 ...

  4. VS的一些实用快捷键及小技巧(不断更新)

    在未选中文本的情况下: ctrl+x 剪贴并删除当前的行,可以用于快速删除整行代码 ctrl+c 复制当前行的代码 ctrl+l 删除当前行 组合键,需要按两次: ctrl+k,ctrl+c 注释当前 ...

  5. ovs flow 原理及实验

    OpenFlow概述 在支持OpenFlow的交换机中包含了若干个Flow table,Flow table可以用来控制数据包的处理,交换机会执行与flow相匹配的表项中所罗列的动作. OpenFlo ...

  6. MariaDB 数据库索引详解(9)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  7. time clock getrusage clock_gettime gettimeofday timespec_get 对比

    http://stackoverflow.com/questions/12392278/measure-time-in-linux-time-vs-clock-vs-getrusage-vs-cloc ...

  8. 对股市骗子内部的一次apt测试

    i春秋作家:jasonx 前言 由于这件事情搞了很久,中间很多截图已经没有了,所以文章中出现的部分截图是后面截的. 文中很多地方涉及敏感信息,为了我的人身安全,打码比较严重,还请多多理解. 起因 前不 ...

  9. 01-Python的基础知识3

    - 数字 - 数字常量: - 整型: - 概念: - 指代平常数学上的整数常量.Python中整型指代int类型. - 基本运算: - 可以执行平常的+,-,*,/ ,%以及其他操作 假设a=15,b ...

  10. Shell - 简明Shell入门11 - 调用脚本(CallTheScript)

    示例脚本及注释 主脚本: CallTheScript.sh #!/bin/bash . ./11-subscript.sh # 调用其他脚本;注意点号"."和文件路径之间有一空格; ...