python虚拟环境
虚拟环境
管理工具集
下面是对上述列举的虚拟环境管理工具进行详细说明的表格,按照使用量逆序输出:
工具名 | 诞生时间 | 基本使用命令 | 详细信息 |
---|---|---|---|
venv | Python 3.3+ | python3 -m venv <虚拟环境名称> |
venv 是 Python 3.3+ 版本内置的模块,用于创建和管理虚拟环境。它提供了一种简单的方法来隔离项目的依赖和环境。 |
virtualenv | 2007年 | virtualenv <虚拟环境名称> |
virtualenv 是一个第三方工具,用于创建和管理虚拟环境。它可以在不同的 Python 版本之间切换,并提供了一些高级选项来自定义虚拟环境的行为。 |
pipenv | 2017年 | pipenv install 或 pipenv --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发行版本:
- miniconda和anaconda
- Miniconda 是一个轻量级的发行版本,它只包含了最基本的组件,包括 Python 解释器和 Conda 包管理器。您可以通过 Miniconda 构建自己的定制环境,根据需要安装所需的软件包和工具。
- Anaconda 是一个完整的发行版本,它包含了许多常用的科学计算和数据分析库,以及 Python 解释器和 Conda 包管理器。
- 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 | # 1. 源码安装 |
那么, 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 | # 1. 源码 |
安装完成之后可以执行如下命令完成虚拟环境的安装和使用
- 使用
pyenv virtualenv <version> <env_name>
创建虚拟环境。例如,pyenv virtualenv 3.9.2 myenv
。 - 使用
pyenv activate <env_name>
激活虚拟环境。 - 使用
pyenv deactivate
取消激活虚拟环境。
virtualenv
使用
virtualenv创建了一个独立的python开发环境(解释器语言天生的),根据虚拟环境来解决依赖、版本以及间接权限问题。
1 | # Install |
virtualenvwrapper
在介绍virtualenvwrapper之前我们需要理清下virtualenv和virtualenvwrapper的关系. virtualenv
和 virtualenvwrapper
是两个相关的工具,它们可以一起使用来提供更方便的虚拟环境管理体验。
virtualenv
是一个独立的工具,用于创建和管理 Python 虚拟环境。它通过在指定位置创建虚拟环境的目录结构,并在其中安装独立的 Python 解释器和包来实现隔离环境。
virtualenvwrapper
是 virtualenv
的一个扩展工具,提供了额外的功能和便利性。它是一个 shell 脚本,为 virtualenv
提供了更简洁的命令和额外的工具函数。它可以用于管理多个虚拟环境,切换环境,删除环境等操作。virtualenvwrapper
还提供了一些方便的命令,如 workon
来切换虚拟环境,mkvirtualenv
来创建虚拟环境等。
至于其他三个工具,它们没有类似于 virtualenvwrapper
的特定的 “wrapper” 工具。但是,它们都提供了自己的命令和功能来创建和管理虚拟环境,以及与虚拟环境相关的操作。例如,pipenv
提供了方便的命令来创建虚拟环境和安装依赖,conda
提供了命令来创建和管理虚拟环境以及安装软件包。
虽然这些工具没有像 virtualenvwrapper
那样明确的 “wrapper” 工具,但它们都旨在简化和改进虚拟环境的管理,使开发人员能够更轻松地隔离项目和环境。
1 | # Install |
venv
venv
是自从 Python 3.3 版本开始引入的模块,用于创建和管理虚拟环境。而 virtualenv
是一个独立的第三方工具,可用于 Python 2.x 和 Python 3.x 版本。下面是 venv
和 virtualenv
的区别以及 venv
的一些优势:
Python 内置 vs. 第三方工具:
venv
是 Python 标准库中的模块,从 Python 3.3 版本开始就内置在 Python 中,因此无需额外安装。virtualenv
是一个第三方工具,需要通过 pip 安装。它可用于 Python 2.x 和 Python 3.x 版本。
Python 版本支持:
venv
可用于管理 Python 3.x 版本的虚拟环境。virtualenv
可用于管理 Python 2.x 和 Python 3.x 版本的虚拟环境。
虚拟环境的创建:
venv
创建虚拟环境时,使用的是标准库中的模块,并且创建的虚拟环境更加轻量级。virtualenv
创建虚拟环境时,它会复制系统的 Python 解释器并创建一个独立的环境。这可能导致虚拟环境的大小较大。
可移植性:
venv
创建的虚拟环境是与特定 Python 版本绑定的,因此在其他支持venv
的系统上可以无缝地复制和移植虚拟环境。virtualenv
创建的虚拟环境相对更具可移植性,可以在不同的 Python 版本和操作系统上复制和移植。
更新和维护:
venv
是 Python 官方支持的虚拟环境解决方案,因此会随着 Python 版本的更新而得到改进和维护。virtualenv
是一个独立的项目,其更新和维护可能会依赖于开发者社区的活动。
总体而言,对于使用 Python 3.x 版本的项目,推荐使用 venv
来管理虚拟环境。它是 Python 官方支持的解决方案,具有较小的环境开销和更好的可移植性。对于 Python 2.x 版本的项目或需要在不同 Python 版本之间进行切换的情况,virtualenv
是一个可选的选择。