本篇作为 Python 虚拟环境管理——conda 的续集,介绍一下另一个 Python 虚拟环境管理工具 venv
。
venv 和 conda 的区别
venv
和 conda
都是用于创建虚拟环境和管理包的工具,但它们之间有一些不同。
Python3.3 以上,venv
是内置的。它会直接在当前项目(当前文件夹下)安装 Python 虚拟环境,因此它是“去中心化”管理的,无法查看已安装的所有环境。
conda
是一个跨平台的开源包管理器,可以用于创建和管理虚拟环境,而且不限于 Python;并且它支持多种操作系统和语言,可以跨语言管理各种包和库。conda
是中心化管理的,可以通过 conda env list
查看已安装的虚拟环境列表
包的来源:venv
只能使用 pip
作为安装来源;而 conda
有许多 channel (默认为 defaults
,另外有第三方社区渠道 conda-forge
)作为包的安装来源。
venv 使用
由于 venv
直接在项目下安装虚拟环境,所以要先进入项目的主目录。
安装一个名为 titanic
的虚拟环境:
python3 -m venv titanic
安装完成后,会在当前目录下出现名为
titanic
的文件夹,其中包含了一些二进制文件,之后安装的库也会储存在这里。64
位系统中,titanic/lib
文件夹存储 32 位版本的 Python 库,而titanic/lib64
文件夹存储 64
位版本的 Python库。
显示系统正在使用的 Python 解释器的路径:
which python
此时发现,用的不是刚安装的虚拟环境中的 Python。激活虚拟环境:
source titanic/bin/activate
此时我们已经在虚拟环境中了,可以安装 Python 第三方库了。
可以通过 pip freeze
查看已经安装的库,以及相应的版本:
python3 -m pip freeze
利用 Linux 管道命令,导出为文本文件:
python3 -m pip freeze > requirements.txt
之后可以利用该文本文件,方便地重新构建虚拟环境:
python3 -m pip install -r requirements.txt
ps: 上面命令行中
-m
参数用于执行指定的模块,如venv
,pip
安装第三方库
PyPI
可以通过 pip
从 PyPI(Python Package Index)安装库。
PyPI 是 Python 社区维护的一个软件包仓库,其中大部分软件包已经被编译成二进制文件。使用 pip install
命令时,默认情况下,pip 会从 PyPI 下载预编译的二进制文件并安装到系统中。
.whl
文件就是已经预编译好的二进制文件。如果观察软件包的安装过程,就会发现其中有一步是 .whl
文件的下载。即便是同一个软件包版本,不同操作系统和处理器架构所需要的 .whl
文件也不一样。
以 pandas 安装为例。看到 .whl
文件的名字中不仅包含了软件包的版本,还有操作系统、处理器架构等信息。
然而,有些软件包可能没有预编译的二进制文件或者需要根据特定的环境或需求进行编译和定制,这时候需要使用其他方式从源代码安装软件包。
从其他索引源安装
可以通过 --index-url
指定 PyPI 之外的软件包索引源:
python3 -m pip install --index-url http://index.example.com/simple/ SomeProject
也可以为默认 PyPI 源添加额外的索引源:
python3 -m pip install --extra-index-url http://index.example.com/simple/ SomeProject
从源代码安装
从源代码安装就是从软件包的源代码文件中构建并安装软件包,而不是直接从预编译的二进制文件安装。从源代码安装会更加灵活,可以针对特定的平台或环境进行优化或配置。但从源代码安装通常需要进行一些配置和编译步骤。
例子:
cd google-auth
python3 -m pip install .
首先进入软件包源代码的主目录(这里是 google-auth
),然后 python3 -m pip install .
从源代码安装时,可以选择以开发模式(development mode)安装,指明 --editable
:
python3 -m pip install --editable .
开发模式,顾名思义,就是作为开发者而不是使用者。任何对源代码的修改都可以直接对软件包产生影响,而不用重新安装。
从本地压缩包安装
python3 -m pip install requests-2.18.4.tar.gz
参考:Installing packages using pip and virtual environments
文章出处登录后可见!