虚拟环境

管理工具集

下面是对上述列举的虚拟环境管理工具进行详细说明的表格,按照使用量逆序输出:

工具名 诞生时间 基本使用命令 详细信息
venv Python 3.3+ python3 -m venv <虚拟环境名称> venv 是 Python 3.3+ 版本内置的模块,用于创建和管理虚拟环境。它提供了一种简单的方法来隔离项目的依赖和环境。
virtualenv 2007年 virtualenv <虚拟环境名称> virtualenv 是一个第三方工具,用于创建和管理虚拟环境。它可以在不同的 Python 版本之间切换,并提供了一些高级选项来自定义虚拟环境的行为。
pipenv 2017年 pipenv installpipenv --python <Python版本> pipenv 是一个结合了虚拟环境和依赖管理的工具。它使用 Pipfile 和 Pipfile.lock 来管理项目的依赖,并提供了简化的命令来创建和管理虚拟环境。
conda 2012年 conda create --name <虚拟环境名称> conda 是一个流行的开源包管理和环境管理系统,特别用于科学计算和数据科学。它提供了创建和管理 Python 虚拟环境的功能,以及软件包管理和分发。

这些工具都有自己的特点和适用场景,您可以根据项目需求和个人喜好选择适合您的虚拟环境管理工具。

发行版本

下面是列举的不同 Python 实现或发行版本的表格,按名称排序:

名称 发行时间 使用场景 详细说明
Anaconda 2012年 数据科学和机器学习 Anaconda 是一个流行的 Python 和数据科学工具的发行版本,包含许多常用科学计算和数据分析库,以及 Conda 包管理器。
CPython 1994年 通用用途 CPython 是官方的 Python 解释器,是使用 C 语言实现的标准解释器,适用于各种通用的 Python 开发和应用场景。
Jython 1999年 Java 平台集成 Jython 是用 Java 实现的 Python 解释器,允许在 Java 虚拟机 (JVM) 上执行 Python 代码,并与 Java 代码无缝集成。
IronPython 2004年 .NET 平台集成 IronPython 是用 C# 实现的 Python 解释器,它可以在 .NET 平台上执行 Python 代码,并与现有的 .NET 代码无缝集成。
PyPy 2007年 性能优化 PyPy 是一个用 Python 实现的 Python 解释器,通过即时编译技术提供了更高的执行性能,适用于某些性能敏感的 Python 应用。

这些不同的 Python 实现或发行版本都有各自的特点和用途。Anaconda 适用于数据科学和机器学习领域,CPython 是默认的 Python 解释器,可用于通用开发,Jython 允许与 Java 代码无缝交互,IronPython 可在 .NET 平台上执行 Python 代码,而 PyPy 提供了更高的执行性能。根据项目需求和个人偏好,您可以选择适合的实现或发行版本。除了上述5个发行版之外, 下面还有一个精简版和增强版的python发行版本:

  1. miniconda和anaconda
  • Miniconda 是一个轻量级的发行版本,它只包含了最基本的组件,包括 Python 解释器和 Conda 包管理器。您可以通过 Miniconda 构建自己的定制环境,根据需要安装所需的软件包和工具。
  • Anaconda 是一个完整的发行版本,它包含了许多常用的科学计算和数据分析库,以及 Python 解释器和 Conda 包管理器。
  1. stackless发行版

Stackless Python 是一种 Python 的替代实现,它提供了一种基于微线程的并发编程模型。它与标准的 CPython 解释器有所不同,它的主要特点是不依赖于操作系统的线程机制,而是使用类似协程的机制来实现并发。

Stackless Python 的名字源于它的一个主要特性,即在执行过程中可以通过“微线程”切换来实现轻量级的并发。这些微线程允许在执行过程中暂停和恢复执行,从而实现更灵活的并发控制和协作。

Stackless Python 在许多并发编程场景中具有优势。它提供了低开销的并发操作,允许高效地管理大量的微线程。通过避免操作系统线程切换的开销,Stackless Python 可以提供更高的并发性能和更低的内存消耗。它在任务调度、网络编程、并发算法等方面都有广泛的应用。

需要注意的是,Stackless Python 并不是官方的 Python 解释器,而是一个由 Stackless Python 社区开发和维护的项目。它提供了对 Python 语言的扩展,使得并发编程更加简单和高效。如果您对并发编程感兴趣,可以尝试使用 Stackless Python 来探索其独特的并发编程模型。

解释器

以下是一些主流编程语言的解释器列表:

编程语言 解释器
Python CPython, PyPy, Jython, IronPython, Stackless
JavaScript Node.js, SpiderMonkey, V8, Rhino
Ruby Ruby MRI, JRuby, Rubinius
PHP Zend Engine, HHVM
Perl Perl Interpreter
Lua Lua Interpreter
R R Interpreter
Shell Bash, PowerShell, Zsh
Swift Swift Interpreter
MATLAB MATLAB Interpreter
Kotlin Kotlin Interpreter
Lisp SBCL, Clojure
Erlang BEAM Virtual Machine
Go gc, gccgo
Java Java Virtual Machine (JVM)
C# .NET Common Language Runtime (CLR)
C GCC, Clang
C++ GCC, Clang

与此相对的, 手机平台的解释器相对于桌面和服务器平台来说,可能会有更多的变体和特定于平台的实现

  • Android:Android 平台使用 Dalvik 虚拟机或更现代的 Android Runtime (ART) 来执行 Java 代码。此外,还可以使用 Kotlin 编程语言的解释器或编译器。
  • iOS:iOS 平台上的主要编程语言是 Objective-C 和 Swift。Objective-C 是一种静态编译的语言,而 Swift 可以通过 JIT (Just-in-Time) 或 Ahead-of-Time (AOT) 编译来执行。
  • React Native:React Native 是一个跨平台的移动应用开发框架,它使用 JavaScript 作为主要的编程语言,并在运行时使用 JavaScriptCore 或 V8 引擎来解释执行 JavaScript 代码。
  • Xamarin:Xamarin 是一个跨平台移动应用开发框架,它允许使用 C# 编程语言进行开发。在 Xamarin 中,C# 代码被编译成本机的移动平台代码,并在运行时执行。

pyenv

pyenv

pyenv是目前为止上述所有包管理工具最好用的虚拟环境管理工具, 这里需要指出virtualenvwrapper会随着系统默认版本的升级而变得古里古怪, 但是pyenv就没有此类问题. 当然, pyenv的安装则远远比上章所述的其他几个管理工具更加麻烦. 下面是pyenv的安装:

1
2
3
4
5
6
7
8
9
# 1. 源码安装
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

# 2. 添加环境变量(默认bash)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
exec "$SHELL"

那么, pyenv如何安装指定版本python, 如何使用虚拟环境进行多环境的开发呢?

  • pyenv install <version>:安装指定的 Python 版本。例如,pyenv install 3.9.2
  • pyenv global <version>:设置全局 Python 版本。
  • pyenv local <version>:在当前目录下设置局部 Python 版本。
  • pyenv versions:列出已安装的 Python 版本。
  • pyenv version:显示当前的 Python 版本。

对于docker环境, 在本地clone代码打包放到上下文目录下, 以便后续在build的时候一键安装

虚拟环境

使用 pyenv 创建虚拟环境需要使用 pyenv-virtualenv 插件, 其安装命令如下:

1
2
# 1. 源码
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

安装完成之后可以执行如下命令完成虚拟环境的安装和使用

  1. 使用 pyenv virtualenv <version> <env_name> 创建虚拟环境。例如,pyenv virtualenv 3.9.2 myenv
  2. 使用 pyenv activate <env_name> 激活虚拟环境。
  3. 使用 pyenv deactivate 取消激活虚拟环境。

virtualenv

使用

virtualenv创建了一个独立的python开发环境(解释器语言天生的),根据虚拟环境来解决依赖、版本以及间接权限问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Install
pip install virtualenv

# Cmd
# start
source bin/activate
# quit
deactivate

# Migrate
# get
pip freeze > requirements.txt
# install
pip install -r requestments.txt

virtualenvwrapper

在介绍virtualenvwrapper之前我们需要理清下virtualenv和virtualenvwrapper的关系. virtualenvvirtualenvwrapper 是两个相关的工具,它们可以一起使用来提供更方便的虚拟环境管理体验。

virtualenv 是一个独立的工具,用于创建和管理 Python 虚拟环境。它通过在指定位置创建虚拟环境的目录结构,并在其中安装独立的 Python 解释器和包来实现隔离环境。

virtualenvwrappervirtualenv 的一个扩展工具,提供了额外的功能和便利性。它是一个 shell 脚本,为 virtualenv 提供了更简洁的命令和额外的工具函数。它可以用于管理多个虚拟环境,切换环境,删除环境等操作。virtualenvwrapper 还提供了一些方便的命令,如 workon 来切换虚拟环境,mkvirtualenv 来创建虚拟环境等。

至于其他三个工具,它们没有类似于 virtualenvwrapper 的特定的 “wrapper” 工具。但是,它们都提供了自己的命令和功能来创建和管理虚拟环境,以及与虚拟环境相关的操作。例如,pipenv 提供了方便的命令来创建虚拟环境和安装依赖,conda 提供了命令来创建和管理虚拟环境以及安装软件包。

虽然这些工具没有像 virtualenvwrapper 那样明确的 “wrapper” 工具,但它们都旨在简化和改进虚拟环境的管理,使开发人员能够更轻松地隔离项目和环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Install
# 安装
pip install virtualenvwrapper

# Configure
见.bamboo_profile, <virtualenvwrapper>

# 3. 创建venv创建
mkvirtualenv [env name]
# 删除环境
rmvirtualenv [env name]

# 4. 激活环境
workon [env name]
# 退出环境
deactivate

# 5. 列出所有环境
workon 或者 lsvirtualenv -b

# 6. 重命名环境
cpvirtualenv oldenv newenv
rmvirtualenv oldenv

venv

venv 是自从 Python 3.3 版本开始引入的模块,用于创建和管理虚拟环境。而 virtualenv 是一个独立的第三方工具,可用于 Python 2.x 和 Python 3.x 版本。下面是 venvvirtualenv 的区别以及 venv 的一些优势:

  1. Python 内置 vs. 第三方工具

    • venv 是 Python 标准库中的模块,从 Python 3.3 版本开始就内置在 Python 中,因此无需额外安装。
    • virtualenv 是一个第三方工具,需要通过 pip 安装。它可用于 Python 2.x 和 Python 3.x 版本。
  2. Python 版本支持

    • venv 可用于管理 Python 3.x 版本的虚拟环境。
    • virtualenv 可用于管理 Python 2.x 和 Python 3.x 版本的虚拟环境。
  3. 虚拟环境的创建

    • venv 创建虚拟环境时,使用的是标准库中的模块,并且创建的虚拟环境更加轻量级。
    • virtualenv 创建虚拟环境时,它会复制系统的 Python 解释器并创建一个独立的环境。这可能导致虚拟环境的大小较大。
  4. 可移植性

    • venv 创建的虚拟环境是与特定 Python 版本绑定的,因此在其他支持 venv 的系统上可以无缝地复制和移植虚拟环境。
    • virtualenv 创建的虚拟环境相对更具可移植性,可以在不同的 Python 版本和操作系统上复制和移植。
  5. 更新和维护

    • venv 是 Python 官方支持的虚拟环境解决方案,因此会随着 Python 版本的更新而得到改进和维护。
    • virtualenv 是一个独立的项目,其更新和维护可能会依赖于开发者社区的活动。

总体而言,对于使用 Python 3.x 版本的项目,推荐使用 venv 来管理虚拟环境。它是 Python 官方支持的解决方案,具有较小的环境开销和更好的可移植性。对于 Python 2.x 版本的项目或需要在不同 Python 版本之间进行切换的情况,virtualenv 是一个可选的选择。

参考