对于 Python 开发项目,使用虚拟环境是推荐最佳做法。 通过创建虚拟环境,可以将项目工具隔离开来,避免与其他项目的工具发生版本冲突。 例如,你可能在维护一个需要 Django 1.2 Web 框架的旧 Web 项目,但随后会进行一个使用 Django 2.2 的新项目。 如果在虚拟环境外部全局更新 Django,则以后可能会遇到一些版本控制问题。 除了防止意外的版本冲突以外,虚拟环境允许在没有管理权限的情况下安装和管理包。
使用pip安装虚拟环境
- 打开 Ubuntu 终端并输入
python3 --version
,以便确认已安装了 Python3。 这应该返回 Python 版本号。 如果需要更新 Python 版本,请先通过输入以下内容来更新 Ubuntu 版本:sudo apt update && sudo apt upgrade
,然后使用sudo apt upgrade python3
更新 Python。 - 通过输入以下内容来安装 pip:
python3 -m pip install --user --upgrade pip
。之后我们可以通过python3 -m pip --version
来查看pip版本。可以用过以下命令 保持pip始终是最新版本:py -m pip install --upgrade pip
- 通过输入以下内容来安装 venv:
python3 -m pip install --user virtualenv
。
创建虚拟环境
venv(python3) 和 virtualenv (python2) 主要讲述python3 如何创建虚拟环境。
打开终端,进入项目文件夹中,使用以下命令创建虚拟环境:
# On macOS and Linux:
python3 -m venv env
# On Windows:
py -m venv env
'''
第二个参数env 是创建虚拟参数的位置,通常使用env。 venv 会在env文件夹中安装python 虚拟环境。
注意: 通常我们应该在.gitignore 文件中排除git依赖,忽略env目录
'''
激活虚拟环境
在安装和使用依赖包之前,必须先激活虚拟环境。激活虚拟环境会把 python 以及pip 的执行环境加入到shell 的PATH中.
# On macOS and Linux:
source env/bin/activate
# On Windows:
.\env\Scripts\activate
激活后,可以通过检查python解析器(interpreter)来确定env的位置
# On macOS and Linux:
which python
# .../env/bin/python
# On Windows:
where python
# .../env/bin/python.exe
关闭虚拟环境
关闭虚拟环境只需要运行简单的命令:
deactivate
安装依赖包
当虚拟环境安装完并且激活我们可以通过以下命令安装项目所需要的依赖:
python3 -m pip install you_lib
安装指定的版本:
# 指定安装 request lib 的 2.18.4 release 版本
python3 -m pip install requests==2.18.4
# 安装最新的 requests lib 的2.x release的 版本
python3 -m pip install requests>=2.0.0,<3.0.0
# 安装预发布版本 增加 --pre(pre-release) 参数
python3 -m pip install --pre requests
# 从源码安装依赖
cd google-auth
python3 -m pip install .
# 从本地档案(local archives)安装
python3 -m pip install requests-2.18.4.tar.gz
# 本地指定从相关目录查找安装
python3 -m pip install --no-index --find-links=/local/dir/ requests
更新指定的lib:
python3 -m pip install --upgrade requests
使用文件安装依赖
pip 可以在文件中声明所有依赖,不用单独安装。例如,我们可以创建一个requirements.txt
的文件包含:
requests==2.18.4
google-auth==1.1.0
使用 -r
标记安装所有依赖
python3 -m pip install -r requirements.txt
查看依赖列表
通过freeze
命令可以列出所有已经安装列表的名称以及版本号
python3 -m pip freeze