Python 项目环境管理与部署全攻略
1. 使用 venv 管理 Python 虚拟环境
1.1 虚拟环境概述
虚拟环境是一个自包含的目录树,包含特定版本的 Python 解释器、用于管理项目依赖的 pip 可执行文件以及本地的 site-packages 目录。在不同虚拟环境之间切换,会让 shell 认为当前可用的 Python 和 pip 可执行文件仅来自于激活的虚拟环境。最佳实践是为每个项目创建不同的虚拟环境,这种隔离方式可以解决两个项目依赖同一包的不同版本的问题。
Python 虚拟环境并非新鲜事物,由于 Python 安装的系统级特性,虚拟环境是必要的。它不仅能让你安装同一包的不同版本,还能轻松运行多个版本的 Python 解释器。管理 Python 虚拟环境有多种选择,如曾经流行的 pipenv 如今已不那么受欢迎,新的工具 poetry 出现,而 Python 3 内置的 venv 也越来越受青睐。
venv 从 Python 3.3(2012 年发布)开始就随 Python 一起发布。由于它仅与 Python 3 安装包捆绑,因此与需要 Python 2.7 的项目不兼容。不过,自 2020 年 1 月 1 日起,Python 2.7 官方停止支持,这个限制不再是大问题。venv 基于流行的 virtualenv 工具,如果你有项目仍需要 Python 2.7,可以使用 virtualenv 替代 venv。
默认情况下,venv 会安装系统中找到的最新版本的 Python。如果你系统中有多个 Python 版本,可以在创建每个虚拟环境时指定特定版本,如运行
python3
或你想要的版本。对于新项目,使用最新版本的 Python 通常没问题,但对于大多数遗留和企业软件则可能不可接受。我们将使用 Ubuntu 系统自带的 Python 3 版本来创建和使用虚拟环境。
1.2 创建虚拟环境
创建虚拟环境的步骤如下:
1. 确保 venv 已安装在你的 Ubuntu 系统上:
$ sudo apt install python3-venv
- 为你的项目创建一个新目录:
$ mkdir myproject
- 切换到新目录:
$ cd myproject
- 在名为 venv 的子目录中创建虚拟环境:
$ python3 -m venv ./venv
1.3 激活和验证虚拟环境
创建虚拟环境后,激活和验证它的步骤如下:
1. 切换到项目目录(如果还未切换):
$ cd myproject
- 检查系统的 pip3 可执行文件的安装位置:
$ which pip3
/usr/bin/pip3
- 激活项目的虚拟环境:
$ source ./venv/bin/activate
- 检查项目的 pip3 可执行文件的安装位置:
(venv) $ which pip3
/home/frank/myproject/venv/bin/pip3
- 列出虚拟环境中安装的包:
(venv) $ pip3 list
Package Version
------------- -------
pip 20.0.2
pkg-resources 0.0.0
setuptools 44.0.0
在虚拟环境中输入
which pip
命令,你会发现 pip 现在指向与 pip3 相同的可执行文件。在激活虚拟环境之前,由于 Ubuntu 20.04 LTS 不再安装 Python 2.7,pip 可能没有指向任何内容。同样,
python
和
python3
也是如此。在虚拟环境中运行 pip 或 python 时,可以省略 3。
1.4 在虚拟环境中安装包
接下来,我们在现有的虚拟环境中安装一个基于属性的测试库 hypothesis:
1. 切换到项目目录(如果还未切换):
$ cd myproject
- 如果虚拟环境未激活,重新激活它:
$ source ./venv/bin/activate
- 安装 hypothesis 包:
(venv) $ pip install hypothesis
- 列出虚拟环境中现在安装的包:
(venv) $ pip list
Package Version
---------------- -------
attrs 19.3.0
hypothesis 5.16.1
pip 20.0.2
pkg-resources 0.0.0
setuptools 44.0.0
sortedcontainers 2.2.2
可以注意到,除了 hypothesis,attrs 和 sortedcontainers 两个新包也被添加到列表中,因为 hypothesis 依赖这两个包。假设你有另一个 Python 项目依赖 sortedcontainers 的 18.2.0 版本,这两个版本将不兼容并会相互冲突。虚拟环境允许你为两个项目分别安装同一包的不同版本。
1.5 停用虚拟环境
切换出项目目录并不会停用虚拟环境,停用虚拟环境很简单:
(venv) $ deactivate
$
这会让你回到全局系统环境,你需要再次输入
python3
和
pip3
。现在你已经了解了开始使用 Python 虚拟环境所需的一切。在 Python 开发中,创建和切换虚拟环境是常见的做法,隔离环境使你更容易跟踪和管理多个项目的依赖。将 Python 虚拟环境部署到嵌入式 Linux 设备用于生产不太有意义,但可以使用名为 dh-virtualenv 的 Debian 打包工具来实现。
2. 使用 conda 安装预编译二进制文件
2.1 conda 概述
conda 是 Anaconda 软件分发系统为 PyData 社区提供的包和虚拟环境管理系统。Anaconda 分发版包含 Python 以及一些难以构建的开源项目(如 PyTorch 和 TensorFlow)的二进制文件。conda 可以在不安装完整的 Anaconda 分发版(非常大)或最小的 Miniconda 分发版(仍超过 256 MB)的情况下安装。
尽管 conda 在 pip 之后不久为 Python 创建,但它已经发展成为像 APT 或 Homebrew 这样的通用包管理器。现在,它可以用于打包和分发任何语言的软件。由于 conda 下载预编译的二进制文件,安装 Python 扩展模块非常轻松。conda 的另一个卖点是它跨平台,全面支持 Linux、macOS 和 Windows。
除了包管理,conda 也是一个成熟的虚拟环境管理器。Conda 虚拟环境具有我们期望从 Python venv 环境中获得的所有好处,甚至更多。与 venv 一样,conda 允许你使用 pip 从 PyPI 安装包到项目的本地 site-packages 目录。如果你愿意,也可以使用 conda 自己的包管理功能从不同的渠道安装包,渠道是 Anaconda 和其他软件分发系统提供的包源。
2.2 环境管理
与 venv 不同,conda 的虚拟环境管理器可以轻松管理多个版本的 Python,包括 Python 2.7。要进行以下练习,你需要在 Ubuntu 系统上安装 Miniconda。建议使用 Miniconda 而不是 Anaconda 来创建虚拟环境,因为 Anaconda 环境包含许多你可能永远不需要的预安装包,而 Miniconda 环境更精简,需要时可以轻松安装 Anaconda 的任何包。
在 Ubuntu 20.04 LTS 上安装和更新 Miniconda 的步骤如下:
1. 下载 Miniconda:
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
- 安装 Miniconda:
$ bash Miniconda3-latest-Linux-x86_64.sh
- 更新根环境中安装的所有包:
(base) $ conda update --all
新安装的 Miniconda 带有 conda 和一个根环境,其中包含 Python 解释器和一些基本包。默认情况下,conda 根环境的 python 和 pip 可执行文件安装在你的主目录中。conda 根环境称为 base。你可以通过以下命令查看其位置以及其他可用 conda 环境的位置:
(base) $ conda env list
在创建自己的 conda 环境之前,验证这个根环境:
1. 安装 Miniconda 后打开一个新的 shell。
2. 检查根环境的 python 可执行文件的安装位置:
(base) $ which python
- 检查 Python 的版本:
(base) $ python --version
- 检查根环境的 pip 可执行文件的安装位置:
(base) $ which pip
- 检查 pip 的版本:
(base) $ pip --version
- 列出根环境中安装的包:
(base) $ conda list
2.3 创建和管理 conda 环境
创建并使用名为 py377 的 conda 环境的步骤如下:
1. 创建一个名为 py377 的新虚拟环境:
(base) $ conda create --name py377 python=3.7.7
- 激活新的虚拟环境:
(base) $ source activate py377
- 检查环境的 python 可执行文件的安装位置:
(py377) $ which python
- 检查 Python 的版本是否为 3.7.7:
(py377) $ python --version
- 列出环境中安装的包:
(py377) $ conda list
- 停用环境:
(py377) $ conda deactivate
使用 conda 创建安装有 Python 2.7 的虚拟环境非常简单:
(base) $ conda create --name py27 python=2.7.17
再次查看你的 conda 环境,看看 py377 和 py27 是否现在出现在列表中:
(base) $ conda env list
最后,由于我们不会使用 py27 环境,将其删除:
(base) $ conda remove --name py27 –all
3. conda 包管理
3.1 基本操作
由于 conda 支持虚拟环境,我们可以像使用 venv 一样使用 pip 以隔离的方式管理不同项目的 Python 依赖。作为通用包管理器,conda 有自己的依赖管理工具。
conda list
可以列出 conda 在活动虚拟环境中安装的所有包。conda 还使用包源,称为渠道。
你可以通过以下命令获取 conda 配置的渠道 URL 列表:
(base) $ conda info
在继续之前,重新激活你在上次练习中创建的 py377 虚拟环境:
(base) $ source activate py377
(py377) $
如今,大多数 Python 开发在 Jupyter 笔记本中进行,所以我们先安装这些包:
(py377) $ conda install jupyter notebook
提示时输入
y
,这将安装 jupyter 和 notebook 包以及它们的所有依赖。当你输入
conda list
时,会看到安装的包列表比之前长得多。现在,让我们安装一些计算机视觉项目所需的 Python 包:
(py377) $ conda install opencv matplotlib
同样,提示时输入
y
。这次安装的依赖数量较少,因为 opencv 和 matplotlib 都依赖 numpy,conda 会自动安装该包,无需你指定。如果你想指定 opencv 的旧版本,可以这样安装:
(py377) $ conda install opencv=3.4.1
conda 将尝试解决活动环境中的这个依赖。由于此活动虚拟环境中没有其他包依赖 opencv,因此目标版本很容易解决。如果有其他包依赖 opencv,可能会遇到包冲突,重新安装将失败。解决后,conda 在降级 opencv 及其依赖之前会提示你,输入
y
以将 opencv 降级到 3.4.1 版本。
3.2 包更新和删除
假设你改变主意或有新版本的 opencv 发布,要将 opencv 升级到 Anaconda 分发版提供的最新版本,可以这样做:
(py377) $ conda update opencv
这次,conda 会提示你是否要将 opencv 及其依赖更新到最新版本,输入
n
取消包更新。通常,一次性更新活动虚拟环境中安装的所有包更容易:
(py377) $ conda update --all
删除已安装的包也很简单:
(py377) $ conda remove jupyter notebook
当 conda 删除 jupyter 和 notebook 时,它也会删除它们的所有悬空依赖。悬空依赖是指没有其他已安装包依赖的已安装包。像大多数通用包管理器一样,conda 不会删除其他已安装包仍依赖的依赖。
3.3 包搜索和信息查看
有时你可能不知道要安装的包的确切名称。亚马逊为 Python 提供了名为 Boto 的 AWS SDK,有适用于 Python 2 的版本和适用于 Python 3 的新版本(Boto3)。要在 Anaconda 中搜索名称中包含 “boto” 的包,可以输入以下命令:
(py377) $ conda search '*boto*'
你应该在搜索结果中看到 boto3 和 botocore。在撰写本文时,Anaconda 上可用的 boto3 最新版本是 1.13.11。要查看该特定版本的 boto3 的详细信息,可以输入以下命令:
(py377) $ conda info boto3=1.13.11
包详细信息显示,boto3 版本 1.13.11 依赖 botocore(botocore >=1.16.11,<1.17.0),因此安装 boto3 会同时安装这两个包。
3.4 共享项目环境
假设你已经安装了在 Jupyter 笔记本中开发 OpenCV 项目所需的所有包,如何与他人共享这些项目需求,以便他们可以重现你的工作环境呢?答案如下:
1. 将活动虚拟环境导出到 YAML 文件:
(py377) $ conda env export > my-environment.yaml
-
就像
pip freeze生成的需求列表一样,conda 导出的 YAML 文件是虚拟环境中安装的所有包及其固定版本的列表。从环境文件创建 conda 虚拟环境需要-f选项和文件名:
$ conda env create -f my-environment.yaml
-
导出的 YAML 文件中包含环境名称,因此创建环境时不需要
--name选项。从 my-environment.yaml 创建虚拟环境的人在执行conda env list时会在他们的环境列表中看到 py377。
conda 是开发者工具库中的强大工具,通过将通用包安装与虚拟环境相结合,它提供了一个有吸引力的部署方案。conda 实现了许多与 Docker 相同的目标,但无需使用容器。由于其专注于数据科学社区,在 Python 方面它比 Docker 更有优势。由于领先的机器学习框架(如 PyTorch 和 TensorFlow)主要基于 CUDA,找到 GPU 加速的二进制文件通常很困难,conda 通过提供多个预编译的二进制版本的包解决了这个问题。将 conda 虚拟环境导出到 YAML 文件以便在其他机器上安装提供了另一种部署选项,这种解决方案在数据科学社区中很受欢迎,但不适用于嵌入式 Linux 生产环境,因为 conda 不是 Yocto 支持的三种包管理器之一,而且在 Linux 映像中容纳 Minconda 所需的存储空间对于大多数资源受限的嵌入式系统来说不合适。
4. 使用 Docker 部署 Python 应用程序
4.1 Docker 概述
Docker 提供了另一种将 Python 代码与其他语言编写的软件捆绑在一起的方式。Docker 的理念是,不是将应用程序打包并安装到预配置的服务器环境中,而是构建并分发一个包含应用程序及其所有运行时依赖的容器映像。容器映像更像虚拟环境而不是虚拟机,虚拟机是包含内核和操作系统的完整系统映像,而容器映像是仅包含运行应用程序所需二进制文件的最小用户空间环境。
虚拟机在模拟硬件的管理程序上运行,而容器直接在主机操作系统上运行。与虚拟机不同,容器可以在不使用硬件模拟的情况下共享相同的操作系统和内核,而是依靠 Linux 内核的两个特殊功能进行隔离:命名空间和 cgroups。Docker 不是容器技术的发明者,但他们是第一个构建易于使用的工具的人。现在,有了 Docker,“在我的机器上能运行” 这个借口不再成立,因为构建和部署容器映像变得如此简单。
4.2 Dockerfile 剖析
Dockerfile 描述了 Docker 映像的内容。每个 Dockerfile 包含一组指令,指定使用什么环境以及运行哪些命令。我们将使用现有的 Dockerfile 作为项目模板,而不是从头开始编写。这个 Dockerfile 为一个非常简单的 Flask Web 应用程序生成 Docker 映像,你可以根据需要扩展它。该 Docker 映像基于 Alpine Linux 构建,Alpine Linux 是一种非常精简的 Linux 发行版,常用于容器部署。除了 Flask,Docker 映像还包括 uWSGI 和 Nginx 以提高性能。
首先,在浏览器中访问 GitHub 上的 uwsgi-nginx-flask-docker 项目(https://github.com/tiangolo/uwsgi-nginx-flask-docker),然后从 README.md 文件中点击 python-3.8-alpine Dockerfile 的链接。
查看该 Dockerfile 的第一行:
FROM tiangolo/uwsgi-nginx:python3.8-alpine
FROM
命令告诉 Docker 从 Docker Hub 的 tiangolo 命名空间中拉取一个带有 python3.8-alpine 标签的名为 uwsgi-nginx 的映像。Docker Hub 是一个公共注册表,人们在其中发布他们的 Docker 映像供他人获取和部署。如果你愿意,可以使用 AWS ECR 或 Quay 等服务设置自己的映像注册表,需要在命名空间前插入你的注册表服务名称,如下所示:
FROM quay.io/my-org/my-app:my-tag
否则,Docker 默认从 Docker Hub 获取映像。
FROM
就像 Dockerfile 中的包含语句,它将另一个 Dockerfile 的内容插入到你的文件中,以便你可以在此基础上构建。我喜欢将这种方法看作是映像分层,Alpine 是基础层,接着是 Python 3.8,然后是 uWSGI 加 Nginx,最后是你的 Flask 应用程序。你可以通过深入研究 https://hub.docker.com/r/tiangolo/uwsgi-nginx 上的 python3.8-alpine Dockerfile 了解映像分层的工作原理。
Dockerfile 中接下来感兴趣的一行是:
RUN pip install flask
RUN
指令运行一个命令,Docker 按顺序执行 Dockerfile 中包含的
RUN
指令以构建最终的 Docker 映像。这个
RUN
指令将 Flask 安装到系统的 site-packages 目录中。我们知道 pip 可用,因为 Alpine 基础映像也包含 Python 3.8。
跳过 Nginx 的环境变量,直接看复制操作:
COPY ./app /app
这个特定的 Dockerfile 位于一个 Git 仓库中,与其他几个文件和子目录在一起。
COPY
指令将主机 Docker 运行时环境(通常是仓库的 Git 克隆)中的一个目录复制到正在构建的容器中。
你正在查看的 python3.8-alpine.dockerfile 文件位于 tiangolo/uwsgi-nginx-flask-docker 仓库的 docker-images 子目录中,该 docker-images 目录内有一个 app 子目录,包含一个 Hello World Flask Web 应用程序。这个
COPY
指令将示例仓库中的 app 目录复制到 Docker 映像的根目录中:
WORKDIR /app
WORKDIR
指令告诉 Docker 在容器内使用哪个目录作为工作目录。在这个例子中,刚刚复制的
/app
目录成为工作目录。如果目标工作目录不存在,
WORKDIR
会创建它。此 Dockerfile 中后续出现的任何非绝对路径都相对于
/app
目录。
现在看看如何在容器内设置环境变量:
ENV PYTHONPATH=/app
ENV
告诉 Docker 后面是一个环境变量定义。
PYTHONPATH
是一个环境变量,它扩展为一个以冒号分隔的路径列表,Python 解释器在这些路径中查找模块和包。
接下来,跳过几行到第二个
RUN
指令:
RUN chmod +x /entrypoint.sh
RUN
指令告诉 Docker 从 shell 运行一个命令。在这种情况下,运行的命令是
chmod
,用于更改文件权限,这里将
/entrypoint.sh
设置为可执行文件。
这个 Dockerfile 中的下一行是可选的:
ENTRYPOINT ["/entrypoint.sh"]
ENTRYPOINT
是这个 Dockerfile 中最有趣的指令,它在启动容器时将一个可执行文件暴露给 Docker 主机命令行,这让你可以从命令行将参数传递给容器内的可执行文件。你可以在
docker run <image>
命令后追加这些参数。如果 Dockerfile 中有多个
ENTRYPOINT
指令,那么只有最后一个会被执行。
Dockerfile 的最后一行如下:
CMD ["/start.sh"]
总结
通过本文,我们详细介绍了使用 venv 和 conda 管理 Python 虚拟环境以及使用 Docker 部署 Python 应用程序的方法。venv 是 Python 3 内置的虚拟环境管理工具,简单易用,适合大多数 Python 项目。conda 则是一个强大的通用包和虚拟环境管理系统,尤其在数据科学领域表现出色,能够轻松管理多个 Python 版本和复杂的依赖关系。Docker 提供了一种轻量级、高效的方式来打包和部署 Python 应用程序,确保应用程序在不同环境中具有一致的运行效果。希望这些内容能帮助你更好地管理 Python 项目的环境和部署。
4.3 Docker 部署 Python 应用的优势与适用场景
Docker 在部署 Python 应用方面具有显著优势。首先,它提供了高度的可移植性。由于容器映像包含了应用程序及其所有依赖,你可以在不同的环境中轻松部署,确保应用在开发、测试和生产环境中具有一致的运行效果。其次,Docker 的隔离性使得多个应用可以在同一主机上安全运行,互不干扰。这对于资源的有效利用和多租户环境非常有用。
Docker 适用于多种场景。对于微服务架构的应用,每个微服务可以打包成一个独立的容器,方便开发、部署和扩展。在持续集成和持续部署(CI/CD)流程中,Docker 可以确保每次构建的应用环境一致,提高部署的可靠性和效率。此外,对于需要快速迭代和部署的项目,Docker 可以大大缩短部署时间,提高开发效率。
4.4 构建和运行 Docker 容器
在了解了 Dockerfile 的基本结构后,我们可以使用它来构建和运行 Docker 容器。以下是具体步骤:
1.
构建 Docker 映像
:
将上述 Dockerfile 保存为
Dockerfile
,然后在包含该文件的目录下执行以下命令:
bash
$ docker build -t my-flask-app .
这里的
-t
选项用于指定映像的标签,
my-flask-app
是我们给映像起的名字,
.
表示使用当前目录作为构建上下文。
2.
查看构建的映像
:
bash
$ docker images
该命令会列出本地所有的 Docker 映像,你应该能看到刚刚构建的
my-flask-app
映像。
3.
运行 Docker 容器
:
bash
$ docker run -p 5000:5000 my-flask-app
-p
选项用于将容器内部的端口映射到主机的端口,这里将容器的 5000 端口映射到主机的 5000 端口。
my-flask-app
是要运行的映像名称。
4.5 Docker 容器的管理
在运行 Docker 容器后,我们可能需要对其进行管理,例如查看容器状态、停止容器、删除容器等。以下是一些常用的管理命令:
-
查看正在运行的容器
:
bash
$ docker ps
该命令会列出所有正在运行的容器,显示容器的 ID、名称、状态等信息。
-
停止容器
:
bash
$ docker stop <container_id>
<container_id>
是要停止的容器的 ID,可以从
docker ps
命令的输出中获取。
-
删除容器
:
bash
$ docker rm <container_id>
在删除容器之前,需要先停止容器。
4.6 Docker 与其他工具的结合使用
在实际开发中,Docker 通常会与其他工具结合使用,以实现更复杂的功能。例如,与 Docker Compose 结合可以管理多个容器的部署和运行。Docker Compose 使用 YAML 文件来定义多个容器的配置,通过一个命令就可以启动、停止和管理这些容器。以下是一个简单的 Docker Compose 文件示例:
version: '3'
services:
flask-app:
build: .
ports:
- "5000:5000"
nginx:
image: nginx:latest
ports:
- "80:80"
depends_on:
- flask-app
在这个示例中,我们定义了两个服务:
flask-app
和
nginx
。
flask-app
服务使用当前目录下的 Dockerfile 构建映像,
nginx
服务使用官方的 Nginx 映像。
depends_on
选项表示
nginx
服务依赖于
flask-app
服务。
要使用 Docker Compose 启动这些服务,只需在包含
docker-compose.yml
文件的目录下执行以下命令:
$ docker-compose up
要停止并删除这些服务,可以执行:
$ docker-compose down
5. 不同工具的对比与选择
5.1 venv、conda 和 Docker 的对比
| 工具 | 特点 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|---|
| venv | Python 3 内置,简单易用,仅管理 Python 环境 | 大多数 Python 项目,尤其是对环境要求不复杂的项目 | 轻量级,无需额外安装,与 Python 集成度高 | 不支持 Python 2.7,功能相对单一 |
| conda | 通用包和虚拟环境管理系统,支持多语言,可管理多个 Python 版本 | 数据科学、机器学习等领域,需要复杂依赖管理和多版本 Python 支持的项目 | 跨平台,支持预编译二进制文件,依赖管理强大 | 安装包较大,可能引入不必要的依赖 |
| Docker | 轻量级容器技术,提供隔离的运行环境,可打包应用及其所有依赖 | 微服务架构、CI/CD 流程、需要快速部署和移植的项目 | 高度可移植,隔离性好,资源利用率高 | 学习成本较高,需要一定的系统资源 |
5.2 如何选择合适的工具
选择合适的工具取决于项目的具体需求。如果是简单的 Python 项目,对环境要求不高,venv 是一个不错的选择,它简单轻量,易于上手。对于数据科学和机器学习项目,由于通常需要管理复杂的依赖和多个 Python 版本,conda 更为合适,它可以帮助你轻松解决依赖冲突问题。而对于需要在不同环境中快速部署和运行的项目,尤其是微服务架构的应用,Docker 则是首选,它可以确保应用在不同环境中的一致性和可移植性。
6. 总结与展望
6.1 总结
本文详细介绍了 Python 项目环境管理与部署的多种方法,包括使用 venv 和 conda 管理 Python 虚拟环境,以及使用 Docker 部署 Python 应用程序。venv 为 Python 项目提供了基本的虚拟环境管理功能,适合大多数 Python 开发者。conda 则在数据科学和机器学习领域表现出色,能够有效管理复杂的依赖关系和多版本 Python。Docker 以其轻量级和高度可移植性,为 Python 应用的部署提供了强大的解决方案。
6.2 展望
随着 Python 在各个领域的广泛应用,对环境管理和部署工具的需求也在不断增加。未来,这些工具可能会进一步发展和完善。例如,venv 可能会增加更多的功能,以满足更复杂的项目需求。conda 可能会在性能和易用性方面进行优化,更好地支持新兴的机器学习框架。Docker 则可能会与更多的云服务集成,提供更便捷的部署和管理方式。
同时,新的工具和技术也可能会不断涌现。例如,Kubernetes 作为容器编排工具,已经在大规模容器化应用的管理中发挥着重要作用,未来可能会与 Docker 更紧密地结合,为 Python 应用的部署提供更强大的支持。总之,掌握这些环境管理和部署工具,将有助于开发者更高效地开发和部署 Python 项目。
附录:常用命令总结
为了方便大家查阅,以下是本文中涉及的常用命令总结:
venv 相关命令
| 命令 | 描述 |
|---|---|
sudo apt install python3-venv
| 在 Ubuntu 系统上安装 venv |
python3 -m venv ./venv
| 创建虚拟环境 |
source ./venv/bin/activate
| 激活虚拟环境 |
deactivate
| 停用虚拟环境 |
pip install <package>
| 在虚拟环境中安装包 |
conda 相关命令
| 命令 | 描述 |
|---|---|
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
| 下载 Miniconda |
bash Miniconda3-latest-Linux-x86_64.sh
| 安装 Miniconda |
conda update --all
| 更新根环境中安装的所有包 |
conda env list
| 列出所有 conda 环境 |
conda create --name <env_name> python=<version>
| 创建 conda 环境 |
source activate <env_name>
| 激活 conda 环境 |
conda deactivate
| 停用 conda 环境 |
conda remove --name <env_name> –all
| 删除 conda 环境 |
conda install <package>
| 在 conda 环境中安装包 |
conda update <package>
| 更新 conda 环境中的包 |
conda remove <package>
| 删除 conda 环境中的包 |
conda search '*<package>*'
| 搜索包 |
conda info <package>
| 查看包的详细信息 |
conda env export > <file>.yaml
| 导出 conda 环境到 YAML 文件 |
conda env create -f <file>.yaml
| 从 YAML 文件创建 conda 环境 |
Docker 相关命令
| 命令 | 描述 |
|---|---|
docker build -t <image_name> .
| 构建 Docker 映像 |
docker images
| 列出本地所有 Docker 映像 |
docker run -p <host_port>:<container_port> <image_name>
| 运行 Docker 容器 |
docker ps
| 查看正在运行的 Docker 容器 |
docker stop <container_id>
| 停止 Docker 容器 |
docker rm <container_id>
| 删除 Docker 容器 |
docker-compose up
| 使用 Docker Compose 启动服务 |
docker-compose down
| 使用 Docker Compose 停止并删除服务 |
超级会员免费看
24

被折叠的 条评论
为什么被折叠?



