pip、conda等7种Python包管理工具对比测评

Python包管理工具深度测评:uv、pip、conda全面对比与选型指南 在Python开发中,依赖管理堪称"基础设施建设"。从早期`pip`的单刀赴会,到`conda`带来跨语言管理的降维打击,再到`uv`以Rust高性能重构工具链,每一次变革都在重塑开发体验。本文将从技术实现、性能表现、适用场景等维度深度解析三大工具,助你打造趁手的开发兵器库。 阅读详情
AI摘要

本文系统对比了pip、conda、poetry、pdm、hatch、rye、flit等7+种Python包管理相关工具,按Python版本管理、包管理、环境管理、包构建、包发布五大维度分类评估;重点分析各工具对PEP 621(项目元数据)、PEP 660(可编辑安装)、依赖解析与锁定、插件支持等关键技术特性的支持情况,并结合维恩图说明工具能力边界与适用场景。

👇我的小册 45章教程:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。

原文:https://alpopkes.com/posts/python/packaging_tools

当我开始使用 Python 并创建我的第一个包时,我很困惑。创建和管理包似乎比我预想的要困难得多。此外,存在多种工具,但我不确定该使用哪一种。我相信你们大多数人过去都遇到过同样的问题。Python 有无数的工具来管理虚拟环境和创建包,但很难(或几乎不可能)了解哪一个适合您的需求。存在一些关于该主题的演讲和博客文章,但它们都没有给出完整的概述或以结构化的方式评估这些工具。这就是这篇文章的主题。

工具分类

本文划分五个对于环境和包管理方面很重要的类别:

  • Python 版本管理

  • 包管理

  • 环境管理(主要涉及虚拟环境)

  • 包构建

  • 包发布

正如下面的维恩图中所示,存在很多工具。有些是单一用途的,有些是多面手:a61fea2735a81de4435f5e4c4e29826a.jpeg

让我们从开发人员的角度来浏览一下这些类别:假设您同时处理个人项目和工作项目。在工作中,您使用的是 Python 3.7,而您的个人项目应该使用最新的 Python 版本(当前为 3.11)。换句话说:您希望能够安装不同的 Python 版本并在它们之间进行切换。这就是我们的第一个类别,Python 版本管理的内容。

在您的项目中,您正在使用其他软件包(例如 pandas 或 sklearn 用于数据科学)。这些是您必须安装和管理的项目的依赖项(例如,在发布新版本时进行升级)。这就是包管理的意义所在。

由于不同的项目可能需要同一包的不同版本,因此您需要创建(和管理)虚拟环境以避免依赖冲突。用于此目的的工具收集在环境管理类别中。大多数工具使用虚拟环境,但有些工具使用另一个称为 “本地包”(Local Packages) 的概念,我们稍后会讨论。

您可能希望与其他开发人员共享您的代码。为此,您首先必须构建包(包构建),然后才能将其发布到 PyPI 或其他索引(包发布)。

下面我们将更详细地了解每个类别,包括简短的定义、动机和可用的工具。我将在最后的单独部分中更详细地介绍一些单一用途工具和一些多用途工具。我们先从第一类开始:Python 版本管理。

Python版本管理

定义

一个可以进行 Python 版本管理的工具,可以让你轻松安装 Python 版本并在它们之间切换。

动机

为什么我们要使用不同的 Python 版本?有几个原因。例如,您可能正在处理多个项目,其中每个项目都需要不同的 Python 版本。或者,您可能开发一个支持多个 Python 版本的项目,并且想要测试所有版本。除此之外,检查最新的 Python 版本所提供的功能,或者测试 Python 的预发布版本是否存在错误也是不错的选择。

工具

我们的维恩图显示了可用于 Python 版本管理的工具:pyenv, conda, rye 和 PyFlow。我们将首先在单独的部分中查看 pyenv 并考虑多用途工具。

3711da9951ffa37223fbee3793d44d3a.jpeg

Python 自带一个单一用途的工具,可让您安装和管理 Python 版本:pyenv!Pyenv 很容易使用。最重要的命令如下:

# 安装特定版本的 Python
pyenv install 3.10.4

# 在不同的 Python 版本之间切换

# 仅针对当前 shell 切换 Python 版本
pyenv shell <version> 
# 在这个目录下,自动使用某个 Python 版本
pyenv local <version> 
# 针对当前用户,全局设定 Python 版本
pyenv global <version>

(虚拟)环境管理

定义

环境管理工具,允许您创建和管理(虚拟)环境。

动机

为什么我们首先要使用环境?正如一开始提到的,项目有特定的要求(即它们依赖于其他包)。通常情况下,不同的项目需要同一包的不同版本。这可能会导致依赖冲突。此外,使用 pip install 安装包时可能会出现问题,因为该包与系统范围的 Python 安装一起放置。其中一些问题可以通过使用命令 --user 中的标志来解决。然而,这个选项可能并不是每个人都知道,尤其是初学者。

工具

许多工具允许用户创建和管理环境。它们是:venv, virtualenv, pipenv, conda, pdm, poetry, hatch, rye 和 PyFlow。其中只有两个是单一用途工具:venv 和 virtualenv。让我们先来看看这两个:

6d4751614b22bb47372c1c63f1da0a46.jpeg

venv

venv(docs.python.org/3/library/v…) 是用于创建虚拟环境的内置 Python 包。最重要的命令如下:

# 创建一个新的环境
python3 -m venv <env_name>

# 使用这个环境
. <env_name>/bin/activate

# 关闭这个环境
deactivate

virtualenv

virtualenv (virtualenv.pypa.io/en/latest/)尝试改进 venv. 它提供的功能更多,速度更快,功能更强大。最重要的命令与 venv 基本一样:

# 创建一个新环境
virtualenv <env_name>

# 启用这个环境
. <env_name>/bin/activate

# 关闭这个环境
deactivate

包管理

pyproject.toml

在我们讨论打包之前,我想确保您了解打包最重要的文件:pyproject.toml.

Python 的打包已经取得了长足的进步,在 PEP 518 之前,setup.py 文件用于打包,setuptools 作为构建工具。PEP 518 引入了 pyproject.toml 文件的用法。因此,在创建包时始终需要一个 pyproject.toml 文件,用于定义项目的设置、定义元数据和许多其他内容。一个示例是 pandas 的 pyproject.toml 文件:

github.com/pandas-dev/…

[build-system]
# Minimum requirements for the build system to execute.
# See https://github.com/scipy/scipy/pull/12940 for the AIX issue.
requires = [
    "meson-python==0.13.1",
    "meson==1.2.1",
    "wheel",
    "Cython==3.0.5",  # Note: sync with setup.py, environment.yml and asv.conf.json
    # Any NumPy version should be fine for compiling.  Users are unlikely
    # to get a NumPy<1.25 so the result will be compatible with all relevant
    # NumPy versions (if not it is presumably compatible with their version).
    # Pin <2.0 for releases until tested against an RC.  But explicitly allow
    # testing the `.dev0` nightlies (which require the extra index).
    "numpy>1.22.4,<=2.0.0.dev0",
    "versioneer[toml]"
]

build-backend = "mesonpy"

[project]
name = 'pandas'
dynamic = [
  'version'
]
description = 'Powerful data structures for data analysis, time series, and statistics'
readme = 'README.md'
authors = [
  { name = 'The Pandas Development Team', email='pandas-dev@python.org' },
]
license = {file = 'LICENSE'}
requires-python = '>=3.9'
dependencies = [
  "numpy>=1.22.4; python_version<'3.11'",
  "numpy>=1.23.2; python_version=='3.11'",
  "numpy>=1.26.0; python_version>='3.12'",
  "python-dateutil>=2.8.2",
  "pytz>=2020.1",
  "tzdata>=2022.7"
]
classifiers = [
# 省略后续

.lock 文件

还有一个对于打包很重要的文件:锁定文件(xxx.lock)。pyproject.toml 包含抽象依赖关系,锁定文件包含具体依赖关系。它记录了为项目安装的所有依赖项的确切版本(例如 pandas==2.0.3)。这使得项目在多个平台上具有可重复性,例如下面的 github.com/python-poet…:

# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.

[[package]]
name = "build"
version = "1.0.3"
description = "A simple, correct Python build frontend"
optional = false
python-versions = ">= 3.7"
files = [
    {file = "build-1.0.3-py3-none-any.whl", hash = "sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f"},
    {file = "build-1.0.3.tar.gz", hash = "sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b"},
]

[package.dependencies]
colorama = {version = "*", markers = "os_name == \"nt\""}
importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
packaging = ">=19.0"
pyproject_hooks = "*"
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}

[package.extras]
docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"]
test = ["filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"]
typing = ["importlib-metadata (>=5.1)", "mypy (>=1.5.0,<1.6.0)", "tomli", "typing-extensions (>=3.7.4.3)"]
virtualenv = ["virtualenv (>=20.0.35)"]

定义

包管理工具能够下载和安装库及其依赖项。

动机

为什么我们需要包?包允许我们定义模块的层次结构并使用"."语法,例如 from package.module import my_function 轻松访问模块。此外,它们还可以轻松地与其他开发人员共享代码。由于每个包都包含一个 pyproject.toml 定义其依赖项的文件,因此其他开发人员不必单独安装所需的包,而只需从其 pyproject.toml 文件中安装该包即可。

工具

许多工具可以执行包管理:pip, pipx, pipenv, conda, pdm, poetry, rye 和 PyFlow.

其中,pip 可能是最众所周知的,它也是这里的专门只用来做包管理的工具。

d6cb7858f589e20df9e4443964fb0b99.jpeg

Python 的标准包管理器是 pip(pip.pypa.io/en/stable/),它随 Python 一起提供,并允许您从 PyPI 和其他索引安装包。主要命令(可能是 Python 开发人员学习的第一个命令之一)是 pip install <package_name>。

多用途工具

接下来进入非单一用途的工具

pipenv

顾名思义,pipenv 结合了 pip 和 virtualenv。它可以执行虚拟环境管理和包管理,正如我们在维恩图中看到的那样:

54ba9ba02f467bc8902a7de913162647.jpeg

pipenv 引入两个附加文件:

  • Pipfile:是一个 toml 文件(类似于 pyproject.toml),用于定义项目依赖项

  • Pipfile.lock:允许确定性构建。它消除了对 requirements.txt 文件的需要,并通过锁定操作自动管理。

最重要的pipenv命令是:

# 安装某个包
pipenv install <package_name>

# 在虚拟环境运行某个脚本
pipenv run <script_name.py>

# 启用虚拟环境
pipenv shell

Conda

Conda 是一个通用的包管理系统。这意味着它不限于 Python 包。Conda 是一个具有很多功能的巨大工具。存在很多教程和博客文章(例如官方的),因此我不会在这里详细介绍。但是,我想提一件事:虽然可以构建和发布包,但 conda 我没有将该工具包含在适当的类别中。这是因为打包的 conda 工作方式略有不同,并且生成的包将是 conda 包。

0c014261368b6ac04122db1cac028d37.jpeg

特征评估

接下来我将比较不同工具的以下维度的特点:

  • 该工具是否管理依赖关系?

  • 它是否解析/锁定依赖关系?

  • 是否有干净的构建/发布流程?

  • 它允许使用插件吗?

  • 它支持 PEP 660(可编辑安装:peps.python.org/pep-0660/)吗?PEP 660 是关于基于构建的可编辑安装 pyproject.toml。当您使用安装软件包时,pip 您可以选择使用 pip install -e package_name 来以可编辑模式安装它。当您开发包并希望您的更改直接反映在您的环境中时,这是一个重要的功能。

  • 它支持 PEP 621(项目元数据:peps.python.org/pep-0621/)吗?PEP 621 指定如何在 pyproject.toml 文件中写入项目的核心元数据。我添加这个评判维度是因为一个包(剧透:它是 poetry)当前不支持此 PEP,但使用自己的方式来声明元数据。

Flit

Flit(flit.pypa.io/en/stable/)尝试创建一种简单的方法将 Python 包和模块放在 PyPI 上。它有一个非常具体的用例:它旨在用于打包纯 Python 包(即没有构建步骤的包)。它不关心任何其他任务:

  • Python版本管理:❌

  • 包管理:❌

  • 环境管理:❌

  • 构建包:✅

  • 发布包:✅

这也反映在我们的维恩图中:

5a531e505dae2f5c4c7fac01f0387c5f.jpeg
  • 该工具是否管理依赖关系?❌

  • 它是否解析/锁定依赖关系?❌

  • 是否有干净的构建/发布流程?✅

  • 它允许使用插件吗?❌

  • 它支持 PEP 660 吗?✅

  • 它支持 PEP 621 吗?✅

主要命令有:

# 创建新的 pyproject.toml
flit init

# 构建并发布 
flit publish

Poetry

Poetry 是众所周知的工具。正如维恩图中所示,它可以执行除 Python 版本管理之外的所有操作:

  • Python版本管理:❌

  • 包管理:✅

  • 环境管理:✅

  • 构建包:✅

  • 发布包:✅

87e12f1608551261d8a38926c580cb93.jpeg

Poetry 不支持 PEP 621。GitHub 上关于此问题的开放问题已有大约 1.5 年的时间,但还是没有解决(github.com/python-poet…)。

  • 该工具是否管理依赖关系?✅

  • 它是否解析/锁定依赖关系?✅

  • 是否有干净的构建/发布流程?✅

  • 它允许使用插件吗?✅

  • 它支持 PEP 660 吗?✅

  • 它支持 PEP 621 吗?❌

主要命令:

# 创建目录结构和 pyproject.toml
poetry new <project_name>

# 交互式创建 pyproject.toml
poetry init

# 从 pyproject.toml 安装依赖
poetry install

依赖管理:

# Add dependency
poetry add <package_name>

# Display all dependencies
poetry show --tree
运行代码
# Activate virtual env
poetry shell

# Run script within virtual env
poetry run python <script_name.py>

锁定文件:首次安装软件包时,Poetry 会解析 pyproject.toml 文件中列出的所有依赖项并下载最新版本的软件包。一旦 Poetry 完成安装,它将所有包和下载的确切版本写入一个 poetry.lock 文件,将项目锁定到这些特定版本。建议将锁定文件提交到您的项目存储库,以便所有从事该项目的人员都被锁定到相同版本的依赖项。要将依赖项更新到最新版本,请使用以下命令:

poetry update

构建/发布流程:

# 打包 (创建 `.tar.gz` 和 `.whl`)
poetry build

# 发布到 PyPI
poetry publish

pdm

pdm 是一个相对较新的包和依赖项管理器(于 2019 年开始),受到 Poetry 和 PyFlow 的启发。您会注意到,我在本文中并没有讨论 PyFlow。这是因为 PyFlow 不再活跃,这不再适合快速发展的打包工具领域。作为一种新工具,pdm 需要 Python 3.7 或更高版本。与其他工具的另一个区别是 pdm 允许用户选择构建后端。

pdm 是唯一在本地包上实现 PEP 582 的工具(除 PyFlow 之外) ,这是实现环境管理的替代方法。请注意,此 PEP 最近被拒绝了。

从维恩图中可以看出,pdm 位于 Poetry 旁边。这意味着它可以做除 Python 版本管理之外的所有事情:

074465da2cabce07b35edcacce3fe207.jpeg
  • Python版本管理:❌

  • 包管理:✅

  • 环境管理:✅

  • 构建包:✅

  • 发布包:✅

pdm 的主要命令与 poetry 类似。然而,目前的命令还是比较少。例如,目前没有 pdm shell 或 pdm new

  • 该工具是否管理依赖关系?✅

  • 它是否解析/锁定依赖关系?✅

  • 是否有干净的构建/发布流程?✅

  • 它允许使用插件吗?✅

  • 它支持 PEP 660 吗?✅

  • 它支持 PEP 621 吗?✅

创建一个新项目

# 交互式创建 pyproject.toml 
pdm init

# 从 pyproject.toml 安装包
pdm install

依赖管理

# 添加依赖
pdm add <package_name>

# 展示所有依赖
pdm list --graph

运行代码

# 没有 shell 命令 

# 使用当前环境运行
pdm run python <script_name.py>

锁定文件:pdm 的锁定功能与 poetry 类似。首次安装软件包时,pdm 会解析 pyproject.toml 文件中列出的所有依赖项并下载最新版本的软件包。pdm 完成安装后,会将所有包及其下载的确切版本写入文件中 pdm.lock,从而将项目锁定到这些特定版本。建议将锁定文件提交到您的项目存储库,以便所有从事该项目的人员都被锁定到相同版本的依赖项。要将依赖项更新到最新版本,请使用以下命令:

pdm update

构建/发布流程:

# 打包 (创建 `.tar.gz` 和 `.whl`)
pdm build

# 发布到 PyPI
pdm publish

Hatch

Hatch(hatch.pypa.io/latest/):

  • Python版本管理:❌

  • 包管理:❌

  • 环境管理:✅

  • 构建包:✅

  • 发布包:✅

值得注意的是,Hatch 的作者承诺将很快添加锁定功能(github.com/pypa/hatch/…)。当您阅读本文时,请务必检查 Hatch 的最新版本,看看是否已实现此功能。

4e8e80331a6570408b060bac1282e134.jpeg
  • 该工具是否管理依赖关系?❌

  • 它是否解析/锁定依赖关系?❌

  • 是否有干净的构建/发布流程?✅

  • 它允许使用插件吗?✅

  • 它支持 PEP 660(可编辑安装)吗?✅

  • 它支持 PEP 621(项目元数据)吗?✅

创建一个新项目

# 创建目录结构以及 pyproject.toml
hatch new <project_name>

# 交互式创建项目
hatch new -i <project_name>

# 初始化现有项目或者创建 pyproject.toml
hatch new --init

依赖管理

# 没有 add 命令,依赖需要手动添加到 pyproject.toml

# 展示依赖
hatch dep show table

运行代码

# 启用虚拟环境
hatch shell

# 在虚拟环境运行脚本
hatch run python <script_name.py>

构建/发布流程

#  打包 (创建 `.tar.gz` 和 `.whl`)
hatch build

# 发布到 PyPI
hatch publish

声明式环境管理:Hatch 的特别之处在于它允许您在文件中配置虚拟环境 pyproject.toml。此外,它还允许您专门为环境定义脚本。示例用例是代码格式化(hatch.pypa.io/1.1/config/…)。

Rye

Rye 最近由 Flask 框架的创建者 Armin Ronacher 开发(首次发布于 2023 年 5 月)。它受到编程语言 Rust 的打包工具 rustup 和 cargo 的强烈启发。Rye 是用 Rust 编写的,能够执行维恩图中的所有任务:

709cf37dec5e9b1ce1c87c70037ab403.jpeg
  • Python版本管理:✅

  • 包管理:✅

  • 环境管理:✅

  • 构建包:✅

  • 发布包:✅

目前,Rye 没有插件接口。但是,由于定期发布新版本,因此将来可能会添加此内容。

  • 该工具是否管理依赖关系?✅

  • 它是否解析/锁定依赖关系?✅

  • 是否有干净的构建/发布流程?✅

  • 它允许使用插件吗?❌

  • 它支持 PEP 660(可编辑安装)吗?✅

  • 它支持 PEP 621(项目元数据)吗?✅

创建一个新项目:

# 创建目录结构以及 pyproject.toml
rye init <project_name>

# 指定一个 Python 本本
rye pin 3.10

依赖管理:

# 添加依赖,但是还没有安装
rye add <package_name>

# 同步虚拟环境, 锁定文件等等
# 在这个步骤安装依赖
rye sync

运行代码:

# 启动虚拟环境
rye shell

# 使用虚拟环境运行脚本
rye run python <script_name.py>

构建/发布流程:

# 打包 (创建 `.tar.gz` 和 `.whl`)
rye build

# 发布到 PyPI
rye publish

总结


FlitPoetrypdmHatchrye
该工具是否管理依赖关系❌✅✅❌✅
它是否解析/锁定依赖关系❌✅✅❌✅
是否有干净的构建/发布流程✅✅✅✅✅
它允许使用插件吗❌✅✅✅❌
它支持 PEP 660(可编辑安装)吗✅✅✅✅✅
它支持 PEP 621(项目元数据)吗✅❌✅✅✅

4e28695f114dab68d39089922e5052ae.jpeg

最后推荐一下我们团队写的量化小册的内容,45篇内容!从Python安装,入门,数据分析,爬取股票基金的历史+实时数据,以及如何写一个简单量化策略,策略回测,如何看资金曲线统统都有介绍!非常超值!

欢迎订阅:原价299 早鸟价2杯咖啡钱,即可永久阅读。满400人又要涨价了,现在的价格非常非常低,只要2杯奶茶,就可以终身订阅+课程源码,还有永久陪伴群。48小时无理由退款,放心食用!

83aece8540a61bf089ad79b7c6250d79.png

往期推荐
量化: 如何用Python爬取创业板历史+实时股票数据!|实战股票分析篇利用Pandas 9招挖掘五粮液股价!|实战股票数据分析篇 Pandas滚动操作 |量化股票第一步,用Python画股票K线,双均线图,可视化你的股票数据!|如何用Python爬取全部800多只ETF基金数据!|如何用Python写一个双均线策略 |如何用Python开发一个多策略机器人!上篇!|Python量化系列-用布林策略买五粮液能赚多少钱?|只要4秒钟!用Python 获取上证指数34年的历史日线数据!

 
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!

CentOS 8 Python环境隔离实战:源码/pyenv/conda三路径详解 Python环境隔离是Linux系统工程中的基础安全实践,其核心在于避免污染系统级Python解释器与依赖链。原理上,CentOS 8的/usr/bin/python3被dnf、firewall-cmd等关键服务深度绑定,替换将导致包管理器崩溃与系统功能异常。技术价值体现在稳定性保障、多版本共存、ABI兼容性控制及生产环境可重现性。典型应用场景包括AI模型部署(需conda create -n pytorch_env python=3.9)、跨项目开发(依赖pyenv local版本切换)以及金融级合规运维 阅读详情

相关推荐

Python自动安装第三方库:告别手动pip install,实现依赖智能管理

在Python开发中,包管理和依赖安装是每个开发者必须面对的基础环节。传统上,我们通过pip工具手动安装第三方库,但这种方式在跨环境协作和快速部署时往往效率低下。通过动态导入与异常捕获机制,Python程序可以在运行时自动检测缺失的模块,并调用pip进行静默安装,实现依赖的按需加载。这种自动化技术不仅提升了个人开发效率,还极大增强了脚本的分享便利性。在实际工程实践中,结合缓存机制和重试逻辑,可以构建健壮的自动安装工具函数,有效处理网络超时、版本冲突等常见问题。对于数据科学和机器学习项目,自动安装能确保num

weixin_33827731的博客 438

python包管理器有哪些?

它可以安装Python包以及其他非Python软件包,并提供强大的依赖项解析和环境管理功能。pip(Python包索引):pip是Python的默认包管理器,广泛用于安装、更新和管理Python包。它可以从Python包索引(PyPI)中下载和安装第三方包,也可以管理虚拟环境中的包依赖关系。poetry:poetry是一个现代化的Python包管理工具,用于管理项目的依赖项和虚拟环境。它提供了一种声明性的方式来定义和安装项目的依赖项,并具有良好的依赖项解析和锁定机制。

weixin_44943389的博客 2640

Python:包管理工具

字符串切片 Str = "dashuaige" List = [1,2,3,4,"a","b","c",(5,6)] print(List[-1]) print(List[-5:-3]) #参数为负数时:索引为从左到右,第一个索引为-1,取值也是从右到左 print(List[1:7:2])#开始索引为1,结束索引为7,步长为2(即取第二个数) print(List[:])#无开始个结束参数.........

不怕猫的耗子A 1381

Python常用包管理工具以及详解

在Python的生态系统中,包管理工具起着至关重要的作用.它们简化了软件包的安装、更新、卸载和依赖管理.本文将介绍几种常见的Python包管理工具,并提供使用示例.

GLB_0627的博客 2779

避坑指南:海康MV_CC_SetIntValue接口的7个典型报错解决方案

本文深度解析海康工业相机SDK中MV_CC_SetIntValue接口的典型报错,提供7个实战解决方案。针对MV_E_CALLORDER、MV_E_PARAMETER等高频错误码,从设备状态、参数值域、依赖关系等核心约束入手,给出清晰的诊断流程与根治代码,帮助开发者构建健壮的参数设置模块,提升开发效率。

y2z3a4b5c的博客 1078

用Python玩转Carla-Apollo联合仿真:手把手教你实现自动驾驶测试

本文详细介绍了如何使用Python实现Carla-Apollo联合仿真,从环境搭建到自动驾驶算法测试的全流程。通过Carla提供的高逼真仿真环境和Apollo的自动驾驶算法栈,开发者可以高效验证感知、规划和控制模块。文章包含环境配置、Python API操作、桥接实现及实战测试,为自动驾驶开发提供完整解决方案。

wasm7browser的博客 266

python模块,库,包介绍、管理工具pip使用、import导包方法

(1)from 包/模块 import所有模块/方法(2)调用具体方法12345fromimportimporttime as ti调用的具体方法 sl(10)和sleep(10)效果一样#注意# 自定义你在程序中使用该方法的名称一个py文件就是一个模块,一个具有__init__.py的"文件夹"以及其他py文件的就是包。

tecoes的博客 2982

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求导,利用导函数提供的梯度信息,使参数往梯度下降最快的方向移动一小步,来更新参数。为什

tzl2093的博客 5141

Python的5个包管理系统

Python的5个包管理系统

派森的博客 1766

使用LabVIEW创建和分析柱状图:从基础绘制到高级数据分析的完整指南

LabVIEW,全称为Laboratory Virtual Instrument Engineering Workbench,是由美国国家仪器公司(National Instruments, NI)开发的一款图形化编程语言。自1986年首次推出以来,LabVIEW凭借其强大的数据采集、分析和控制能力,在工程、科研、教育等领域得到了广泛应用。与传统的文本编程语言不同,LabVIEW采用了图形化编程方式,用户通过连接不同的函数节点来实现复杂的逻辑和算法。

qq_38334677的博客 775

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 241

Python包管理实战:让pip保持“温柔”的完整指南

在Python开发中,包管理是构建稳定开发环境的基础环节。其核心原理是通过依赖解析和版本控制来确保项目所需库的准确安装与兼容性。规范化的包管理技术价值在于提升开发效率、保障团队协作一致性,并降低环境配置的复杂度。在实际应用场景中,开发者常面临依赖冲突、安装失败等问题,这往往源于环境配置不当或依赖声明不清晰。本文聚焦于Python生态中的pip工具,系统讲解如何通过虚拟环境隔离、依赖文件管理、镜像源配置等工程实践,实现流畅的包管理体验。文章深入探讨了pip的常见报错场景与解决方案,并结合pip-tools等工

weixin_30321449的博客 429

GMSL转eDP芯片MAX9686X(ADI)

MAX96860/MAX96862/MAX96864解串器可以把单路或双路GMSL转换成eDP V1.4a,支持820MHzPCLK的无压缩的24bpp(每个像素的位数)视频,或660MHz的30bpp视频。芯片的GMSL支持NRZ编码的6Gbps/187Mbps的GMSL2,PAM4编码的12Gbps/187Mbps的GMSL3。同时支持单线(COAX模式)双向全双工传输控制数据和video数据。支持DSC压缩的芯片,最大支持像素时钟1080MHz@24bpp或者864MHz@30bpp,传输方式包括同轴

qflook的博客 2846

4000字 Python 必读指南

集成开发环境是基于Python解释器为了加速程序员的开发效率而打造的一个开发利器,使用它们100%提高我们的开发效率和代码调试效率。Python最常用的集成开发环境,pycharm, jupyter notebook, vscode,其中 jupyter notebook是交互式的,我们输入一行,Alt+Enter 回车直接得到结果,所见即所得有时很有用。

Trb401012的博客 1008

SolidWorks2020详细步骤安装教程

1、在安装软件前请断开网络连接,需要安装.NETFramework3.5和4.0,最后还要确保把之前安装的旧版本完全卸载,以管理员身份运行SolidWorks_Flexnet_Server\server_remove.bat,然后等到服务“SolidWorksFlexnet服务器”将被删除。12、先不要运行软件,找到_SolidSQUAD_文件夹,将文件夹“ProgramFiles\SOLIDWORKSCorp”中的所有破解文件复制替到“ProgramFiles\SOLIDWORKSCorp”目录下;

qq_53545309的博客 1万+

SGP4/SDP4详解

**SGP4** (Simplified General Perturbations Version 4) 和 **SDP4** (Simplified Deep-space Perturbations Version 4) 是一组**解析轨道预报模型**,用于预测地球轨道卫星的位置和速度。它们是北美防空司令部(NORAD)维护的**TLE**数据格式的标准配套算法。 简单来说:**TLE是卫星轨道的"身份证",而SGP4/SDP4是解读这张身份证的"说明书"**。

ScilogyHunter的博客 589

选对工具少踩坑!Python 环境管理 8 大工具实用指南

性能极致化(UV、Mamba 主导)、功能一体化(Rye 整合多工具能力)、标准统一化(基于 PEP 582、pyproject.toml)。工具选择的核心逻辑是 “场景适配”:无绝对最优工具,只有最匹配需求的方案。轻量场景坚守 venv 的简洁,科学计算依赖 Conda 的生态,现代开发拥抱 Poetry/PDM 的规范,性能敏感型项目果断采用 UV 的速度。

wlnWLN124的博客 996

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python3.10性能测评:Miniconda镜像下PyTorch训练速度提升实测

实测显示,Miniconda搭配Python 3.10在PyTorch训练中性能优于传统pip环境,总耗时减少7.3%,GPU利用率更高。Conda的二进制优化包和依赖管理能力提升了科学计算效率,环境隔离与可复现性也显著增强研发协作体验。

weixin_28949937的博客 971

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python3.9镜像体验:轻量级环境管理工具实战测评

本文介绍了如何在星图GPU平台上自动化部署Python3.9镜像,快速搭建轻量级开发环境。该镜像集成了Miniconda和常用科学计算库,特别适用于数据分析和Web服务开发场景,帮助开发者实现多项目隔离和环境一致性管理,显著提升开发效率。

weixin_33816734的博客 169

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

如何撰写高质量技术测评:从环境部署到性能监控的完整框架

技术测评是评估AI模型、开源工具与软件框架的核心手段,其价值在于为技术选型提供客观、可复现的决策依据。从原理上看,一份优秀的测评需系统性地验证工具的部署兼容性、功能完整性、接口可用性与资源效率,这直接关系到工程实践的落地成功率。在技术价值层面,深度测评能帮助开发者规避环境配置、性能瓶颈与合规风险,显著降低试错成本。其应用场景广泛覆盖AI图像生成、语音合成、OCR识别及自动化工作流集成等领域。本文以Stable Diffusion整合包与TTS工具为例,通过实战演示如何构建涵盖硬件门槛、API调用、批量任务与

weixin_34319817的博客 427

Python包安装总失败?5种pip换源+SSL避坑方案实测(附Anaconda/CMD通用命令)

本文详细解析了Python包安装失败的常见问题及解决方案,包括pip换源、SSL证书问题处理以及Anaconda环境下的特殊问题。通过实测数据对比国内五大镜像源的速度和稳定性,提供CMD和Anaconda Prompt下的通用命令,帮助开发者高效解决安装失败问题。

kite3的博客 201

Anaconda替代品测评:Miniconda-Python3.11是否够用?

Miniconda结合Python3.11成为现代数据科学与AI开发的理想起点,以小巧体积、强依赖管理和环境隔离能力解决版本冲突与部署难题。通过conda与pip合理协作、Jupyter远程开发配置及SSH隧道安全访问,构建可复现、跨平台的高效工作流,适用于本地、云端与内网多种场景。

weixin_32747681的博客 313
上一篇: 用GPT4o预测10年后中国大学排名Top10!
下一篇: YYDS!哈工大博士的大数据算法笔记火了!!
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值