跳转到内容

Python环境配置

python最强工具uv

官网:

An extremely fast Python package and project manager, written in Rust.

A single tool to replace pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, and more.

一个工具,替代pip pyenv conda/miniforge virtualenv 等,非常强大。发布uv的愿景,是希望构造类似Rust的cargo,快速、可依赖,易用的包管理工具。

通过在不同的系统进行几个常见包的测试,uv相比pip,加速比在1~13之间,因此是一个值得一试的工具。

即使是在venv环境中安装的,uv也会复制自己的可执行文件也会被复制到系统的PATH目录中,保证退出或切换虚拟环境后,uv命令依然能够正常使用。

uv安装:

bash
pip install uv

更换国内镜像源:

参考:https://blog.csdn.net/qq_41472205/article/details/145686414

最简单可以设置环境变量:UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple

常用:

查看python版本清单:

bash
uv python list

uv 安装某个版本的python:

bash
uv python install cpython-3.13

以某个版本的python去运行py脚本:

bash
uv run -p 3.13 python.py

进入某个版本的python交互环境:

bash
uv run -p 3.13 python

如果进某个版本的环境,该版本不存在,则会自动下载该环境,如:

bash
uv run -p pypy python

会自动安装pypy。

uv初始化工程,进入工程文件夹,然后:

bash
uv init -p 3.13

就会在工程目录初始化一些工程文件,根据需要配置,如果不需要配置项目内工程文件则直接使用uv venv

添加依赖:

bash
uv add xxx(依赖名称)
uv add xxx(依赖名称) --dev
uv remove xxx(依赖名称)
uv remove xxx(依赖名称) --dev

不添加到工程,直接添加到工程以外:

bash
uv tool install xxx(工具包名称)

查看通过uv tool已经安装的工具:

bash
uv tool list

打包build,填写toml的project scripts,然后:

bash
uv build

打包后生成whl工具包。

查看工程依赖关系:

bash
uv tree

指定uv python的默认版本和国内源,设置环境变量:

export UV_PYTHON=3.11.11
export UV_DEFAULT_INDEX=https://mirrors.cloud.tencent.com/pypi/simple
export UV_INDEX_URL=https://mirrors.cloud.tencent.com/pypi/simple
export EXTRA_INDEX_URL=https://mirrors.cloud.tencent.com/pypi/simple

其他常用uv命令:

bash
# 创建虚拟环境,不加环境路径的话默认是保存在当前的.venv目录下
# 最推荐这个方式,简洁容易记!!!
uv venv

# 指定环境保存目录
uv venv /path/to/venv

# 指定Python版本,注意需要对应版本的Python已经安装
uv venv -p 3.12

# --python 同 -p
uv venv --python 3.12

# uv工具不会自动下载Python包,因此如果设置-p时指定系统不存在的Python版本会报错
uv venv -p 3.13

No Python 3.13 In `PATH`. Is Python 3.13 installed?

# Unix
source venv/bin/activate

# Windows
.venv\Scripts\activate

# 从 pypi上安装包,默认安装最新版本
uv pip install flask

# 从镜像网站上拉取安装包
uv pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple

# 更新包版本
uv pip install -U flask

# 安装特定版本的包:
uv pip install -U flask==3.0.0

# 从当前目录安装
uv pip install .

# 从当前目录安装,并且支持editable实时更新代码模式
uv pip install -e .

一个非常重要的点:uv 默认不会读pip.conf这种类型的镜像配置,因此在国内的话,包的默认下载速度是比较慢的,需要手动加--index-url/-i和-extra-index-url,才能达到比较快的下载速度。或者提前设置好国内源。

卸载包:

uv pip uninstall flask
注意:与pip不同,uv pip uninstall时默认不会让你再确认一遍。

uv有一个顶级命令uv cache,用于cache的管理。

首先类似pip cache dir ,uv也有一个cache dir命令来查看缓存目录:

$ uv cache dir
/home/gitpod/.cache/uv

可以彻底地删除cache,命令为uv cache clean,整个cache目录都会被清除掉:

$ uv cache clean
Clearing cache at: /home/gitpod/.cache/uv
Removed 78 files (16.7MiB)

目前来看,未来的一个大的方向是利用Rust来开发Python的工具链,帮助人们来更好地写Python代码。Python语言最大的优势是易用性和生态完善性,这个是目前Rust还没法替代Python的原因。未来Python的优势会继续保持下去,但包管理设计上工具太多,导致非常的混乱,借鉴Rust的经验来解决这个问题,是个好的方向。

笔记参考:https://zhuanlan.zhihu.com/p/689976933

miniforge替换miniconda

anaconda和miniconda是商业产品,使用miniforge3替换之。

miniforge项目:https://github.com/conda-forge/miniforge

下载:https://github.com/conda-forge/miniforge/releases/tag/24.9.2-0

或者官网下载

选对对应的平台版本下载比如:Miniforge3-24.9.2-0-Linux-x86_64.sh

linux版本直接普通用户执行安装脚本按照提示照做即可;windows安装完需要配置Path环境:

conda/mamba使用示例

bash
查看conda、环境相关信息:
conda info

查看所有环境:
conda env list
conda info -e
conda info --envs

检查当前的频道配置:
conda config --show-sources
conda config --show channels

进入默认的base环境:
conda activate

进入具体某个环境:
conda activate xxx

退出默认或具体的环境:
conda deactivate (xxx)

如果conda activate默认不能使用,可以使用conda初始化:
conda init zsh
conda init --all

清除缓存:
conda clean --index-cache

更新conda本身:
conda update conda

使用示例:
conda create -n py310 python=3.10
conda activate py310
conda deactivate

移除环境 如果没有"--all",会出现移除不干净的情况:
conda remove -n "envName" --all

查看当前环境已安装的包列表:
conda list

设置清华源示例:

bash
# 设置 conda-forge 频道 (Miniforge 的核心)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

# 可选:设置其他常用频道
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/

conda config --remove channels defaults
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --system --remove channels conda-forge

conda config --set show_channel_urls yes

conda defaults chanel

首先,我们要明确几个概念:

  1. Conda: 是一个开源的包管理器和环境管理器。它最初由 Anaconda, Inc. (以前叫 Continuum Analytics) 开发。
  2. Anaconda Distribution: 是一个包含 Conda、Python 以及大量预装科学计算包(如 NumPy, SciPy, pandas, Jupyter 等)的发行版。这些预装包主要来自 Anaconda, Inc. 自己构建和维护的频道。
  3. defaults 频道: 这是 Conda 查找包时的一个元频道 (meta-channel)。当你指定 defaults 时,Conda 实际上会去 Anaconda, Inc. 维护的一系列频道(如 main, r, msys2 等)中查找。所以,defaults 频道本质上就是指向 Anaconda, Inc. 官方维护的包集合。
  4. Miniforge: 是一个由社区驱动的、最小化的 Conda 安装程序。它的主要特点是默认使用 conda-forge 作为主要的包频道,并且通常包含 conda-forge 构建的 Python 解释器。
  5. conda-forge: 是一个社区维护的 Conda 包频道,拥有非常庞大和活跃的包集合。它独立于 Anaconda, Inc. 运营。

现在回到你的问题:“miniforge的defaults渠道为什么要设置为anaconda?”

严格来说,Miniforge 的设计目标是优先使用 conda-forge 频道,而不是 defaults (Anaconda) 频道。当你安装 Miniforge 后,它的 .condarc 配置文件通常会将 conda-forge 设置为最高优先级的频道。

那么,为什么在 Conda 的配置中,defaults 这个名称本身会与 Anaconda 公司联系起来呢?

  1. 历史渊源和定义:

    • defaults 这个频道名称是 Conda 工具历史形成的。由于 Conda 最初由 Anaconda, Inc. 开发,他们自然地将自己维护的频道集合命名为 defaults,作为 Conda 安装后默认查找包的地方。
    • 所以,并不是 Miniforge defaults "设置" 成 Anaconda 的,而是 defaults 这个标识符在 Conda 的世界里 就是 Anaconda 官方频道的代名词。
  2. Conda 工具的内置行为:

    • Conda 包管理器本身知道 defaults 这个元频道。Miniforge 安装的是 Conda 这个工具(通常是 conda-forge 构建的版本),这个工具本身就包含了对 defaults 频道的认知。
    • Miniforge 做的是通过配置文件(.condarc覆盖默认的频道优先级,将 conda-forge 置于 defaults 之上。但它并没有,也不能轻易地从 Conda 工具的内部逻辑中移除 defaults 这个概念。
  3. 兼容性和用户选择:

    • 尽管 Miniforge 推荐并默认使用 conda-forge,但用户仍然可以选择从 defaults 频道安装包(例如,通过 conda install -c defaults some_package)。保留对 defaults 频道的认知允许了这种灵活性。
    • 某些非常核心的包或者特定情况下,用户可能仍有理由或需求从 defaults 获取。

至于“是跟这个公司有合作吗?”

  • Miniforge/Conda-Forge 与 Anaconda, Inc. 的关系:
    • Miniforge 和 conda-forge 是社区驱动的项目,它们在运营上是独立于 Anaconda, Inc. 的。它们的目标是提供一个更开放、由社区维护的包生态系统。
    • Anaconda, Inc. 贡献了 Conda 这个开源工具,这是社区能够构建像 conda-forge 这样的频道和 Miniforge 这样的安装程序的基础。
    • 所以,这更多的是一种生态系统内的共存和基于开源工具的衍生发展,而不是 Miniforge 项目本身与 Anaconda, Inc. 就 defaults 频道的定义有特定的商业合作。defaults 指向 Anaconda 的频道是 Conda 工具的历史设定。

总结一下

Miniforge 的核心理念是推广和优先使用 conda-forgedefaults 频道本身就是 Anaconda 官方频道的代称,这是 Conda 工具的历史设定。Miniforge 通过修改配置来确保 conda-forge 的优先地位,而不是说 Miniforge 主动将 defaults “设置”为 Anaconda——因为 defaults 本来就是 Anaconda 的。这种设定源于 Conda 的起源,而非 Miniforge 与 Anaconda 公司之间针对此项的特定合作。

conda中使用jupyterlab

官网:https://jupyter.org/install

安装:

bash
pip install jupyterlab

启动:

bash
jupyter lab

编译安装python3

bash
sudo yum groupinstall "Development Tools"
sudo yum install openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel xz-devel libffi-devel

官网下载python源码:

python3124.tar.xz

解压编译:

bash
tar -xf python3124.tar.xz
cd python3124
./configure --prefix=/app/usr/python3
make
make install

加入环境变量:

bash
export PATH=/app/usr/python3/bin:$PATH`

生效:

bash
source ~/.bashrc

软链接python3和pip3:

bash
ln -s python3 python
ln -s pip3 pip

pip安装与国内源设置

pip设置清华源

bash
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip config set global.index-url https://pypi.doubanio.com/simple/

linux与windows通用。

linuxmint设置

linuxmint默认就能用python3命令,但不能使用python命令。

安装pip3:

bash
sudo apt install python3-pip

可以只用python3和pip3。

有python但没有pip激活pip

bash
python3 -m ensurepip --upgrade --default-pip
python -m ensurepip --upgrade --default-pip

pipx安装

官方是推荐使用pipx。

bash
sudo apt install pipx

pipx使用介绍:https://zhuanlan.zhihu.com/p/637791135

更好的方式是使用虚拟环境,miniconda,uv等。

pip离线安装软件包

以apscheduler为例:

bash
pip download apscheduler -d /media/sf_share/apscheduler

将 /media/sf_share/apscheduler目录打包,上传到需要离线安装的机器。

在离线机器上,使用以下命令安装包:

解压出来:/home/username/apscheduler

bash
pip install --no-index --find-links=/home/username/apscheduler  apscheduler

这里的 /home/username/apscheduler是你存放下载的包的离线目录。

备注:

  • 确保下载的包与离线环境中的 Python 版本兼容。
  • 如果有多个依赖包,可以一次性下载所有依赖包,或者单独下载每个包。
  • 使用 --no-index 选项告诉 pip 不在互联网上查找包。
  • 使用 --find-links 指定包含下载的包的本地目录。
  • 如果需要安装wheel格式的包,请确保离线环境中已经安装了wheel。