pip
在 Python 中,默认使用 pip 管理第三方包,与 JavaScript 项目中的 npm 类似。
软件包安装
在安装 Python 环境时,pip 工具也会自动安装到操作系统中。你可以使用 pip install 命令安装需要的第三方包。
pip install package_name1 package_name2
它与 JavaScript 项目中的 npm install package1 package2 相似。
:::tip 软件仓库 Python 的官方软件仓库为 pypi.org :::
软件包卸载
pip uninstall package_name
与 JavaScript 项目中的 npm uninstall package1 package2 相似。
:::tip Python 默认采用集中式依赖管理策略,会将安装的第三方包统一存放在 Python 解释器目录而不是当前项目的目录中,因此包的安装与卸载并不会在项目目录中留下任何蛛丝马迹。
通过 pip install 安装的第三方包,相当于直接安装到了全局,与 JavaScript 项目默认将第三方包存储到 node_modules 目录中有很大不同。
:::
列出项目依赖
JavaScript 使用 package.json 中的 dependencies 和 devDependencies 列出项目中依赖的第三方包名称以及版本号。在 Python 中,这一过程不会自动发生,我们需要使用 pip freeze > requirements.txt 命令将项目依赖项持久化到一个叫做 requirements.txt 的文件中,其他人通过 pip install -r requirements.txt 即可自动安装项目全部依赖。
:::tip requirements.txt 内容太多了?
我们常常发现 requirements.txt 中会出现许多项目中没有直接用到的第三方包,这是因为它列出了当前 Python 解释器下所有已安装的第三方包,这是因为系统中只有一个 Python 环境,如果我们想要看到更清晰的项目依赖列表,就需要通过虚拟环境来进行隔离。
:::
相关资源
venv 和 conda
在 Python 中,虚拟环境是一种工具,它可以为每个项目创建单独的 Python 环境,实现项目依赖的隔离。虚拟环境允许开发人员为不同的项目安装不同版本的包,而不会相互干扰。这在同时处理具有不同要求的多个项目时尤其有用,与 JavaScript 工程师常使用的 nvm 工具类似。
虚拟环境的工作原理
虚拟环境的三个重要组成部分是:创建虚拟环境、激活虚拟环境和安装依赖包。
虚拟环境是一个文件目录,目录中包含了特定版本的 Python 可执行文件以及相关依赖。通过激活命令,将终端中的 Python 以及相关的命令指向该虚拟环境目录,从而实现项目之间依赖的隔离。
venv 管理虚拟环境
venv 是 Python 默认的虚拟环境管理工具。
创建虚拟环境
在项目根目录中,使用 python -m venv myvenv 创建一个虚拟环境,此时会自动新建一个 myvenv 的目录,该目录即为虚拟环境目录,里面包含了 Python 可执行文件,虚拟环境所创建的 Python 版本与当前使用的 Python 解释器版本一致。
激活虚拟环境
使用命令 source ./myvenv/bin/activate 激活虚拟环境。
退出虚拟环境
虚拟环境只在当前终端内有效,关闭终端之后虚拟环境自动取消激活
:::tip
你可以随时通过 shell 命令 where python 查看当前终端中正在使用的 Python 可执行文件的路径以确定是否位于正确的虚拟环境中。
:::
conda 管理虚拟环境
conda 是一个虚拟环境管理工具,使用 conda 之前,需要按照 官方文档 步骤安装 conda 。
创建虚拟环境
conda create --prefix ./myvenv python=3.8
上面的命令指定了虚拟环境需要使用的特定 Python 版本,当一些项目需要工作在指定 Python 版本下时,这会非常有用。
激活虚拟环境
conda activate ./myvenv
退出虚拟环境
conda deactivate
:::tip 安装第三方包
当虚拟环境激活时,使用 pip install package_name 安装第三方包,这些包文件将存储到 虚拟环境名称/lib/python版本/site-packages 文件夹中,如此,项目之间的依赖便通过虚拟环境进行了隔离。
:::
相关资源
poetry
poetry 是 Python 中一个非常强大的工具,可以将项目的依赖管理简化到极致。
安装 poetry
开始使用 poetry 之前,你需要根据 官方文档 的指引将 poetry 安装到操作系统中。
创建新项目
安装了 poetry 之后,可以使用以下命令创建一个由 poetry 管理依赖的新项目:
poetry new myproject
项目创建完成后,会在根目录中创建一个 pyproject.toml 文件,它的作用与 JavaScript 项目中的 package.json 一样。
它的内容如下:
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = ""
authors = ["luckrnx09 <luckrnx09@gmail.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
其中的 Python 版本会默认使用当前 Python 解释器的版本,如需要使用指定的 Python 版本,可以直接修改 pyproject.toml 文件,然后创建并激活该 Python 版本的虚拟环境。
管理第三方包
使用 poetry 管理的项目,不需要使用 pip 管理第三方包。
安装第三方包的命令如下:
poetry add package_name
卸载包的命令也类似:
poetry remove package_name
所有的安装/卸载操作的结果,都将自动反映到 pyproject.toml 文件中,因此,你无需再使用 pip freeze 手动列出依赖项。
在一个包含 pyproject.toml 文件的 Python 项目中,只需要通过 poetry install 命令即可自动安装项目的所有依赖。
运行 Python 脚本
使用了 poetry 的项目,需要通过如下命令运行 Python 脚本以正确解析依赖:
poetry run python your_script.py
相关资源
类型注解
编写 Python 代码时,通常会遇到需要明确变量类型的情况。Python 3.5 引入了类型注解,并在后续版本中得到了增强和改进。类型注解不会影响运行时结果,与 TypeScript 十分相似。
使用类型注解
类型注解在 Python 中不是必须的,类型注解是一种在 Python 中指定变量类型的方法,它可以提供更好的代码可读性、可维护性。
变量
age: int = 25
name: str = "John"
函数参数和返回值
def add(x: int, y: int) -> int:
return x + y
可选参数和默认值
from typing import Union
def greet(name: str, age: Union[int, None] = None) -> str:
if age is None:
return f"Hello, {name}!"
else:
return f"Hello, {name}! You are {age} years old."
类
class Person:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
def greet(self) -> str:
return f"Hello, my name is {self.name} and I am {self.age} years old."
类型别名
from typing import List, Tuple
Coordinates = Tuple[float, float]
PointList = List[Coordinates]
def get_distance(point1: Coordinates, point2: Coordinates) -> float:
x1, y1 = point1
x2, y2 = point2
return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
def process_points(points: PointList) -> List[float]:
distances = []
for i in range(len(points) - 1):
distance = get_distance(points[i], points[i+1])
distances.append(distance)
return distances
编译时类型检查
在 Python 中的 mypy 一个类似于 TypeScript 的 tsc命令行工具,使用它可以对代码的类型进行检查。
pip install mypy
mypy my_script.py
相关资源
本书的内容完全免费,开源地址:github.com/luckrnx09/p…