观前提醒:本文详细介绍了Python环境的结构、python虚拟环境基础用法,以及python中的环境&依赖管理。
Python环境是指一个特定的设置,其中包含了运行Python代码所需的一系列软件工具和包。这个环境可以包括Python解释器、一组安装的包、模块以及相关的配置设置。Python环境可以帮助你管理依赖关系,确保不同项目之间的依赖隔离,避免版本冲突。
基本上,Python环境可以分为两种:
1.全局环境:
全局环境是指安装在操作系统上的Python环境。
它是所有Python程序的默认环境,除非特别指定使用其他环境。
修改全局环境会影响系统上所有使用这个Python解释器的项目。
2.虚拟环境:
虚拟环境是一个独立的环境,可以有自己的Python解释器和一组包。
它使得不同项目可以拥有不同的依赖,不会互相干扰。
虚拟环境通常使用venv模块创建,该模块是Python 3的标准库的一部分。
虚拟环境位于项目文件夹中,便于管理和迁移。
Python环境由几个关键组件组成,它们共同支持Python代码的运行和管理。这些组件包括:
Python解释器是最核心的组件,它是一个软件包,能够执行Python代码。你可以从Python官网下载,并且有多个版本可供选择(如Python 2.x已停止更新,而Python 3.x是目前的主流)。
Python的标准库提供了广泛的模块和函数,它们被内置在Python解释器中。标准库涵盖了从文本处理到网络通信等许多功能。
除了标准库之外,Python的强大功能还得益于社区提供的大量第三方库。这些库可以通过包管理工具如pip安装,并用于各种特定的任务和应用程序开发。
Python使用包管理器来安装、更新、卸载和管理第三方库的依赖。最广泛使用的包管理器是pip,它与Python标准库一起分发。
Python虚拟环境是一个独立的目录树,其中安装了特定版本的Python解释器以及一系列附加包。当你激活一个虚拟环境时,你的系统路径(PATH)会暂时修改,以便任何对Python解释器或Python脚本的调用都会使用虚拟环境中的版本。
依赖管理:不同的项目可能需要不同版本的库,虚拟环境可以避免版本冲突。
权限问题:在系统级别安装库可能需要管理员权限,虚拟环境则可以在用户级别安装。
清洁和整洁:虚拟环境保持你的全局Python环境清洁,便于管理。
复制环境:虚拟环境可以帮助你复制和分享环境配置,便于协作和部署。
使用venv(推荐方法)
venv是Python自带的虚拟环境创建工具,不需要额外安装。
1.创建虚拟环境:
python3 -m venv myenv
#在Windows上,Python命令通常只是python,而不是python3
#所以需要使用python -m venv myenv
这会在当前目录下创建一个名为myenv的虚拟环境。
2.激活虚拟环境:
在Unix或Mac上:
source myenv/bin/activate
在Windows上:
3.安装包:
在激活的虚拟环境中使用pip安装包只会影响当前环境。
4.退出虚拟环境:
使用virtualenv
virtualenv是一个独立的第三方包,更早之前的Python版本使用这个包来创建虚拟环境。
1.安装virtualenv:
2.创建虚拟环境:
3.激活和退出:
激活和退出的步骤与venv相同。
使用Pipenv
Pipenv自动管理虚拟环境和依赖文件,它结合了pip的包管理和venv的环境管理。
1.安装Pipenv:
2.创建和激活虚拟环境:
这将自动创建虚拟环境并激活它。
3.安装包并更新Pipfile:
使用Poetry
Poetry处理依赖管理和包的创建,使用pyproject.toml文件来管理依赖。
1.安装Poetry:
2.初始化项目和虚拟环境:
poetry init
poetry install
一个新创建的Python环境中包含哪些依赖呢?
一个新创建的虚拟环境默认情况下是相当“干净”的,它不会包含任何外部安装的第三方包。它所包含的仅仅是Python标准库中的模块以及少数必要的服务模块(如pip、setuptools和wheel),这些模块是用于安装和管理其他包的基础工具。
标准库是Python的一部分,提供了许多内建的模块和函数,用于执行系统管理任务、数学运算、文件操作等常见操作。标准库的模块在所有Python环境中都可用,无须额外安装。
pip 是Python的包安装器,它允许你从Python Package Index(PyPI)安装其他Python软件包。
setuptools 是一个Python包开发过程中的一个增强工具集,它帮助你更容易地构建和分发Python包,特别是那些依赖于其他包的包。
wheel 是一个与pip配合使用的Python分发包格式,用于替代egg格式,它设计用于更快速地安装Python包。
当你创建一个新的虚拟环境时,标准库以及这些基础服务模块会被安装在虚拟环境中,但是除此之外,不会有其他第三方库。这样做的好处是你可以从一个干净的基础开始构建你的项目,只安装你项目实际需要的包,避免了不必要的依赖和潜在的版本冲突。
要查看虚拟环境中已安装的包,你可以激活虚拟环境并使用命令 pip list 或 pip freeze。在一个全新的虚拟环境中,这个列表通常很短,只包含上述提到的几个包。
这里我们对比一下系统环境和新建环境中的已安装的包:(如果你不想你的环境像我的环境一样糟糕,那就多多利用虚拟环境吧)
当虚拟环境被激活后,pip会优先使用虚拟环境内的配置文件。你可以创建或修改这个文件来指定pip源。
在Linux和macOS上,配置文件通常位于$VIRTUAL_ENV/pip.conf。
在Windows上,配置文件通常位于%VIRTUAL_ENV%\pip.ini。
通过修改pip的配置文件就可以修改虚拟环境的pip源
下面我们通过一个具体的例子来展示如何使用虚拟环境以及 pip 和 requirements.txt 来管理Python项目的依赖。
下面我们构建一个简单的Web应用,它使用Flask框架。还需要requests库来处理HTTP请求。
在项目的根目录下创建一个虚拟环境。这样做可以确保你安装的依赖不会影响到系统中的其他Python项目。
这将在当前目录下创建一个名为 venv 的虚拟环境。要激活这个虚拟环境,你需要运行以下命令:
在Unix或macOS上:
在Windows上:
pip install flask requests
这将安装Flask和requests库,以及它们的依赖。
步骤3:生成requirements.txt
接下来,你需要创建一个 requirements.txt 文件,它将包含所有已安装包的精确版本号。
pip freeze > requirements.txt
这个命令会生成一个新的 requirements.txt 文件,里面包含了所有依赖及其版本。打开这个文件,你会看到类似以下内容:
click==7.1.2
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
requests==2.24.0
Werkzeug==1.0.1
步骤4:使用requirements.txt安装依赖
现在,如果你想在另一个环境(可能是另一台机器或另一个开发者的电脑上)安装这些依赖,你只需激活虚拟环境并运行以下命令:
pip install -r requirements.txt
这将在新环境中安装与原始环境中完全相同版本的依赖。
当然我我们也可以创建多个依赖文件:
如果你的应用有开发依赖(如测试框架)和生产依赖,可以创建两个文件:requirements.txt 和 requirements-dev.txt,分别管理生产和开发依赖。
Python容器化:简化部署与扩展
Python在多个领域蓬勃发展,从Web开发到数据科学,从自动化脚本到机器学习。但是,随着Python应用的复杂性增加,确保应用在不同环境中能够一致运行变得越来越重要。这正是容器化技术发挥作用的地方。在本篇博客中,我们将探究如何使用容器化来部署Python应用,提高其可移植性与可伸缩性。
容器化简介
容器化是一种轻量级的、可执行的软件包技术,它将应用程序及其所有依赖、配置和运行时环境封装在一个容器中。与传统的虚拟机相比,容器直接在宿主机的操作系统上运行,减少了额外的负担。
Docker: 容器化的代名词
当我们谈论容器化时,最著名的工具非Docker莫属。Docker利用了Linux的容器技术,如Cgroups和Namespace,提供了一个独立的环境来运行应用程序。
为什么Python项目适合容器化?
环境一致性:避免了“在我的机器上可以运行”的问题。
依赖隔离:每个容器都有自己的环境,不同容器间依赖不会相互冲突。
快速部署:容器可以在几秒钟内启动,使得部署变得迅速而简单。
易于扩展和管理:容器化的应用可以轻松地横向扩展,满足不断变化的负载需求。
容器化Python应用的步骤
让我们通过一个简单的例子来说明如何容器化一个Python Web应用。
步骤1:准备Python应用
假设你有一个简单的Flask应用,代码如下:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Docker!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
步骤2:编写Dockerfile
Dockerfile是一个文本文档,包含了所有用来构建镜像的命令。
# 使用官方Python运行时作为父镜像
FROM python:3.8-slim
# 将工作目录设置为/app
WORKDIR /app
# 将当前目录内容复制到位于/app中的容器中
COPY . /app
# 安装requirements.txt中指定的任何所需包
RUN pip install --no-cache-dir -r requirements.txt
# 使端口80可用于此容器外的环境
EXPOSE 80
# 定义环境变量
ENV NAME World
# 在容器启动时运行app.py
CMD ["python", "app.py"]
这个Dockerfile创建了一个简单的Flask应用的Docker镜像。
步骤3:构建Docker镜像
在包含Dockerfile的应用程序根目录下,运行以下命令来构建镜像:
docker build -t my-python-app .
步骤4:运行容器
一旦镜像构建完成,你可以运行一个容器:
docker run -p 4000:80 my-python-app
这个命令告诉Docker运行镜像并映射端口4000到容器的端口80。