X Tutup
--- aliases: [] tags: - PL - python - pip - pipx - conda - uv created: 2023-08-18 19:44:52 modified: 2025-10-22 23:28:07 --- # Python 笔记 --- ## 目录 * [安装和常用](#安装和常用) * [pip](#python_pip) * [更新](#更新) * [pip 换源](#pip%20换源) * [Python 语法](#python_syntax) * [文档](#python_resource) * [相关文档](#python_resource_doc) * [相关网站](#python_resource_links) * [相关笔记](#相关笔记) --- ## 安装 ### 历史 [Python简史 - Vamei - 博客园](https://www.cnblogs.com/vamei/archive/2013/02/06/2892628.html) ### 安装 官网:[www.python.org](https://www.python.org) 下载页面:[www.python.org/downloads](https://www.python.org/downloads) #### 版本 关于 Python 版本更新及维护计划,可以查看:[Status of Python versions](https://devguide.python.org/versions/)。 > [!tip] > > Python 没有官方的 LTS 版本(Long-Term Support,长期支持),Python 每一个主版本的从**release**到**EOF**,整个生命周期是 5 年。 --- ## pip ### 更新 ```python # 列出可以更新的包 pip list --outdated # 更新指定的包 pip install --upgrade xxx # 更新pip pip install --upgrade pip # 或 使用python -m 来更新pip python -m pip install --upgrade pip ``` ### 重装 pip ```shell # 查看pip pip show pip # 卸载 python -m pip uninstall pip # 重装 python -m ensurepip ``` > [!info] 关于 `command not found: pip` > > 在 [Conda](Python_Conda.md) 中重装 pip,有可能出现找不到 pip 的情况。 > > 那极有可能是使用的 `python -m pip uninstall pip` 来装,而不是使用 `conda install pip` 命令来装。 > > 在 conda 环境中,使用 python 安装的 pip,执行命令是 `pip3`,不是 `pip`,所以在 conda 环境中就有可能发现 pip 找不到的情况。 > > 如果在 conda 环境中重装 pip,先使用 `conda install pip` 安装;然后再使用 `python -m ensurepip` 及 `python -m pip install --upgrade pip` 来「修复」。 > >> [!info] 相关资料 >> >> * [问题及解决](Python_Material.md#问题及解决) >> * [pip](Python_Material.md#pip) >> ### pip 安装包 #### 根本包名安装 ```shell pip install 包名 ``` #### 使用 github 地址安装 语法: ```shell pip install git+ ``` > [!info] > > github 地址后面有没有 `.git` 都无所谓。 ### pip 换源 #### 临时换源 * 临时换源并安装指定包 ```shell pip install -i 源地址 some-package ``` 例: ```shell pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名 ``` * 临时换源升级 `pip` ```shell python -m pip install -i 源地址 --upgrade pip ``` 清华的镜像源每五分钟更新一次,大而全,推荐大家使用。 国内其他常用源: * 清华: * 阿里云: * 中国科技大学: * 南京大学: * 华中理工大学: * 山东理工大学: * 豆瓣: #### 永久性换源 1. 第一种方式: ```shell # 清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 南京大学源 pip config set global.index-url https://mirror.nju.edu.cn/pypi/web/simple # 北大源 pip config set global.index-url https://mirrors.pku.edu.cn/pypi/web/simple # 南阳理工源 pip config set global.index-url https://mirror.nyist.edu.cn/pypi/web/simple # 齐鲁工业大学源 pip config set global.index-url https://pypi.qlu.edu.cn/simple # 阿里源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ # 腾讯源 pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple # 豆瓣源 pip config set global.index-url http://pypi.douban.com/simple/ ``` > [!tip] > > 配多个镜像源:`pip config set global.extra-index-url " ..."`。 > > 源地址间使用空格间隔。 > > ```shell > pip config set global.extra-index-url "https://mirror.nju.edu.cn/pypi/web/simple https://mirrors.pku.edu.cn/pypi/web/simple https://pypi.mirrors.ustc.edu.cn/simple https://mirrors.aliyun.com/pypi/simple https://mirrors.cloud.tencent.com/pypi/simple https://mirror.nyist.edu.cn/pypi/web/simple https://pypi.qlu.edu.cn/simple" >``` 示例: ```shell $ pip config set global.extra-index-url "https://mirror.nju.edu.cn/pypi/web/simple https://mirrors.pku.edu.cn/pypi/web/simple https://pypi.mirrors.ustc.edu.cn/simple https://mirrors.aliyun.com/pypi/simple https://mirrors.cloud.tencent.com/pypi/simple https://mirror.nyist.edu.cn/pypi/web/simple https://pypi.qlu.edu.cn/simple" Writing to /home/silascript/.config/pip/pip.conf ``` > [!tip] > > 换源成功,会有 `Writing to /home/xxx/.config/pip/pip.conf` 的提示信息,就是 `pip.conf` 配置文件被修改,如果之前没配过,就会生成一个并将配置写入。 > 2. 第二种方式: 直接修改 pip 配置文件 pip 的配置文件是放在 `.pip` 目录下的 **pip.conf** 文件中 (windows 是 pip.ini 文件) 示例: ```config [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple ``` > [!tip] > > 现在的 pip,配置文件 **pip.conf** 是放在 `~/.config/pip/` 目录中(旧版的是放在 `~/.pip/` 目录下)。在 [Conda](Python_Conda.md) 中配置 pip 也是放在这个目录中。 > > 如果配多个源,各源地址间使用空格间隔,如下: > ```txt > [global] > extra-index-url = https://mirror.nju.edu.cn/pypi/web/simple https://mirrors.pku.edu.cn/pypi/web/simple https://pypi.mirrors.ustc.edu.cn/simple https://mirrors.aliyun.com/pypi/simple https://mirrors.cloud.tencent.com/pypi/simple https://mirror.nyist.edu.cn/pypi/web/simple https://pypi.qlu.edu.cn/simple > >``` ##### 换源工具 ###### cnpip [cnpip](https://github.com/caoergou/cnpip) 是一个快速切换源的小工具。 安装方式: 1. `pipx install cnpip` 2. `pip install cnpip` 功能: * `cnpip list`:列出可用的镜像源。 * `cnpip set`:自动选择最快的镜像源 * `cnpip set 镜像名称`:选择指定镜像源 * `cnpip unset`:取消镜像源设置,恢复默认源 ###### chpip [Prodesire/chpip](https://github.com/Prodesire/chpip),与 [cnpip](#cnpip) 很像,但这个可以自行添加源。 > [!tip] > > 注意,名字很相似啊,这个是**chpip**。 > > chpip 与 [cnphp](#cnphp) 根本两极端,cnphp 是只有使用内置源,而 chpip,内置源都得自行设置后才能使用。 安装方式: ```shell pip install chpip ``` ```shell pipx install chpip ``` 也可以使用特有的 [GitHub ](../Git/Git_Note.md#git_github) 方式安装: ```shell pip install git+https://github.com/Prodesire/chpip ``` ```shell pipx install git+https://github.com/Prodesire/chpip ``` 主要功能: * `list`:列出支持的源。没什么卵用,这内置源只能看不能直接使用,得使用 `chpip set -n xxx -i xxx` 设置后才能使用。 * `show`:当前使用的源 * `-n 源名称`:切换指定名称的源 * `set -n 源名称 -i 源地址`:内置的源如果不满意,可以自行添加源。需给出**源名称**和**源地址**。 列出内置的源: `chpip list`,这个命令是到 github 上取 `[pip.yml](https://raw.githubusercontent.com/Prodesire/chpip/main/pip.yml)` 文件,这文件中记录了一些常用的源。 添加源示例: ```shell $ chpip set -n nju -i https://mirror.nju.edu.cn/pypi/web/simple ``` ```shell Set Python package index with name `nju` successful. $ chpip show nju (https://mirror.nju.edu.cn/pypi/web/simple) ``` 在 pip 配置目录 `~/.config/.pip/` 目录下会生成一个 `.chpip.yml` 文件,这就是设置的源: ```shell $ ll .config/pip Permissions Size User Group Date Modified Name drwxr-xr-x - silascript silascript 2025-08-16 20:38 . drwx------ - silascript silascript 2025-08-16 17:10 .. .rw-r--r-- 73 silascript silascript 2025-08-16 20:38 .chpip.yml .rw-r--r-- 0 silascript silascript 2025-08-16 18:23 pip.conf .rw-r--r-- 307 silascript silascript 2025-08-16 18:19 sources.dict $ cat .config/pip/.chpip.yml indexes: nju: index_url: https://mirror.nju.edu.cn/pypi/web/simple ``` 切换源示例: ```shell # 就使用刚添加的南京大学的源 nju $ chpip -n nju # show下 $ chpip show * nju (https://mirror.nju.edu.cn/pypi/web/simple) default (https://pypi.org/simple) # 还可以查看下pip.conf是否已经添加了源 $ cat .config/pip/pip.conf [global] index-url = https://mirror.nju.edu.cn/pypi/web/simple # 切换回默认源 $ chpip -n default # $ cat .config/pip/pip.conf [global] index-url = https://pypi.org/simple ``` ###### PyQuickInstall [PyQuickInstall](https://github.com/yhangf/PyQuickInstall) 与 [cnpip](#cnpip) 差不多的,能快速换源的小工具。不过这工具多了个添加源的功能。 安装方式: 1. `pip install pqi` 2. ```shell git clone https://github.com/yhangf/PyQuickInstall.git python3 setup.py install ``` 3. `pipx install pqi` 主要功能: * `pqi ls`:列出所有支持的 pypi 源 * `pqi use 源名称`:改变 pypi 源 * `pqi show`:显示当前源 * `pqi add 源名称 源地址`:添加新源 * `pqi remove 源名称`:移除源 装完这工具,会有在 pip 的配置目录 `~/.config/pip` 下生成一个「字典」: ```shell $ ll .config/pip Permissions Size User Group Date Modified Name drwxr-xr-x - silascript silascript 2025-08-16 18:05 . drwx------ - silascript silascript 2025-08-16 17:10 .. .rw-r--r-- 0 silascript silascript 2025-08-16 11:37 pip.conf .rw-r--r-- 256 silascript silascript 2025-08-16 18:05 sources.dict ``` 字典的大概内容: ```shell $ cat .config/pip/sources.dict ���}�(�pypi��https://pypi.python.org/simple/��tuna��(https://pypi.tuna.tsinghua.edu.cn/simple��douban��!https://pypi.doubanio.com/simple/��aliyun��'https://mirrors.aliyun.com/pypi/simple/��ustc��+https://mirrors.ustc.edu.cn/pypi/web/simple�u.% ``` > [!info] > > 源都记录在这个字典中 添加一个新源: ```shell $ pqi add nju https://mirror.nju.edu.cn/pypi/web/simple/ nju(https://mirror.nju.edu.cn/pypi/web/simple) is add to Source list. ``` 再查看字典: ```shell $ cat .config/pip/sources.dict ��'}�(�pypi��https://pypi.python.org/simple/��tuna��(https://pypi.tuna.tsinghua.edu.cn/simple��douban��!https://pypi.doubanio.com/simple/��aliyun��'https://mirrors.aliyun.com/pypi/simple/��ustc��+https://mirrors.ustc.edu.cn/pypi/web/simple��nju��)https://mirror.nju.edu.cn/pypi/web/simple�u.% ``` ###### tpip [tpip](https://github.com/wsy-yjys/tpip) 是在 [cnpip](#cnpip) 基础上构建的,功能也非常类似。 示例: * 设置源 ```shell $ tpip set aliyun # Writing to /home/silascript/.config/pip/pip.conf # Writing to /home/silascript/.config/pip/pip.conf # 成功设置 pip 镜像源为 'https://mirrors.aliyun.com/pypi/simple',并添加 trusted-host 'mirrors.aliyun.com' ``` ```shell # 查看pip.conf是否设置成功 $ cat .config/pip/pip.conf [global] index-url = https://mirrors.aliyun.com/pypi/simple trusted-host = mirrors.aliyun.com ``` * 取消设置,恢复默认源 ```shell $ tpip unset # Writing to /home/silascript/.config/pip/pip.conf # Writing to /home/silascript/.config/pip/pip.conf # 成功取消 pip 镜像源设置,已恢复为默认源 ``` ### pip 搜索 [PyPI 官网](https://pypi.org) 由于 `pip search` 命令不能用,所以使用「pip_search」(原来叫「pip-search」)这个包来实现搜索功能。 ```shell # 安装 pip-search # pip install pip-search # 新的版本已经将名字修改成下划线了 pip install pip_search # 使用 pip-search # 使用这货时,得敲 pip_search 命令,而不是 pip-search pip_search 要搜索的包 ``` > [!tip] > > 虽然安装时已经将名称修正为 `pip_search`,但安装成功后的信息仍显示旧的名称:`pip-search`: > > ```shell > $ pipx install pip_search > installed package pip-search 0.0.14, installed using Python 3.12.11 > These apps are now globally available > - pip_search > done! ✨ 🌟 ✨ > ``` ### pip 问题 #### 虚拟环境外使用 pip 新版本的 linux 发生版,避免 Python 包管理器与系统底层冲突,所以禁止 `pip install`。只能在「虚拟环境」中使用 `pip`。如果执行 `pip install xxx`,会报 `externally managed environment` 错误提示。 当然不怕死的,可以使用 `--break-system-packages` 这个选项,硬装。 ### pip 小工具 #### pipdeptree `pipdeptree` 这个工具可以显示 pip 中各模块依赖「关系树」。有了这工具,删除模块时就可以更有「自信」了。 因为它是有入口程序,所以它是可以使用 [pipx](#python_pipx) 安装的。 ```shell pip install pipdeptree ``` ##### pipdeptree 使用 * `pipdeptree`:查看所有包依赖关系 * `pipdeptree -p `:可以查看特定包的依赖关系 * `pipdeptree -r -p `: 可以查看哪些包依赖于特定包 #### pip-autoremove `pip-autoremove` 这工具在删除某模块时,把依赖的模块也一起「清理」了! ```shell pip install pip-autoremove ``` --- ## 虚拟环境 Python 有多种多样的虚拟环境,如 `Virtualenv`、自带的 `venv`,著名的 `pipenv`,还有最最流行的 [conda](#conda)。 ### virtualenv [Virtualenv](https://virtualenv.pypa.io/en/latest/) 是 python2 到 python3 都能使用的一个虚拟环境。 ### venv 从 python3.3 开始,就自带了一个虚拟环境:venv。 ### Poetry #### 相关资料 * [Poetry 资料](Python_Material.md#poetry) ### pipenv #### 相关资料 * [虚拟环境](Python_Material.md#虚拟环境) --- ## pipx [pipx](https://github.com/pypa/pipx) 是一个自动建立虚拟环境来使用 Python 应用的工具。 pipx 与其他相近工具的比较:[pipx comparisons](https://pypa.github.io/pipx/comparisons/) > [!info] pipx 安装条件 > > pipx 需要 Python 3.6+ 才可以使用 `pipx --help`,可查看 pipx 相关信息: ```shell Virtual Environment location is /home/silascript/.local/pipx/venvs. Symlinks to apps are placed in /home/silascript/.local/bin. optional environment variables: PIPX_HOME Overrides default pipx location. Virtual Environments will be installed to $PIPX_HOME/venvs. PIPX_BIN_DIR Overrides location of app installations. Apps are symlinked or copied here. PIPX_DEFAULT_PYTHON Overrides default python used for commands. USE_EMOJI Overrides emoji behavior. Default value varies based on platform. ``` > [!info] 关于 pipx 两个重要的目录 > > 一个是 pipx 的为应用建立的虚拟环境目录,默认是在 `.local/pipx`,后来 [Linux](../Linux/Linux_Note.md) 系统应该是为了符合**FHS**规范(Filesystem Hierarchy Standard),将各软件的应用程序数据等目录调整到 `.local/share` 目录下,所以 pipx 的虚拟环境目录默认改为 `.local/share/pipx/venvs`。 > > 就算是在 [Conda](Python_Conda.md) 中使用其虚拟环境的 pip 安装的 pipx,这个 pipx 所装的模块,仍是存放在 `~/.local/share/pipx/venvs/` 目录下。 > > 另一个是 pipx 中应用执行的 `bin` 文件「链接文件」所在的目录,默认是在 `~/.local/bin` 下,这其实是跟 pip 一样的。 > > 同样的,在 [Conda](Python_Conda.md) 的虚拟环境中使用的 pipx 装的模块的可执行程序,同样也是放在 `~/.local/bin/`。而这个程序只是一个 `link` 文件。(在 `~/.local/bin/` 目录中的那些可执行程序,其实都是些链接,它们都指向 `.local/share/pipx/venvs/` 目录下各模块,也就说在 conda 中使用 pipx 安装模块,这些模块安装根目录都是 `.local/share/pipx/venvs/`,而执行链接都是 `~/.local/bin/` 目录,pipx 有非常强的「共享性」。) > > 另外,在 `~/.local/bin/` 下建立链接文件的好处还有,就是如果需要重装 pipx,并且在重装前肯定移除 `~/.local/pipx` 目录,在重装 pipx 后,又得把各模块再重装一次,,这时存在一个难题,就是该重装哪些模块,除非之前另外有记录,不然是有点麻烦的。但因为 `~/.local/bin/` 下「残留」有之前安装过的模块链接,而且因为 `~/.local/pipx/` 目录的移除,使得这些链接出现「指向」错误而在终端中「显红」,这就给该重装哪些模块提供了提示。 > > 如下图中,那些标红的,都是之前装的,后来 `~/.local/pipx` 目录被移除后,残留的链接。 > > ![conda_pipx_links_error](Python_Note.assets/conda_pipx_links_error.png) > > > 也就说,在 [Conda](Python_Conda.md) 中各虚拟环境用 pipx 装的相同模块,其可执行程序会出现同名冲突,会报:「already seems to be installed. 」的揭示,因为这个可执行程序是个 Link 文件,它可以指向不同虚拟环境,如果不同虚拟环境下装相同的模块,后来生成的这个模拟可执行的 Link 文件就会覆盖之前装的。 > > 同样的也就意味着,不同虚拟环境下使用 pipx 装的模块,只要有一个虚拟环境装了,就可以在其他虚拟环境中使用,除非,这个在虚拟环境将此模块删除,或此虚拟环境本身就被删除。 > > > 所以得出一个重要的结论:pipx 装的模块在当前用户下,「全局性」更强,适合安装一些跨虚拟环境的模拟,如各种 [LSP](../vim/Vim_LSP_Complete.md)。 > > 同时,因为 pipx 这种「穿透性」,也就意味着 pipx 没太大必要在 [Conda](Python_Conda.md) 的虚拟环境中安装那些非「全局性」的模块。 > [!tip] pipx 安装模块要求 > > pipx 只能装那些有「cli」的模块,对于那些纯库类型的模块,像 pynvim,就不能装。 ### 安装 pipx pipx 可以使用 [pip](#python_pip) 来安装的: ```shell pip install pipx # 或者 python -m pip install --user pipx ``` 将 `pipx` 添加到 PATH 中,方便任何地方访问它: ```shell pipx ensurepath ``` > [!tip] 相关资料 > > [pipx](Python_Material.md#pipx) 如果在 [Conda](Python_Conda.md) 中不使用 [pip](#python_pip) 安装 pipx,可以直接使用 `conda install` 来安装,但前提是先将 conda-forget 在 conda 的 channel 中配置上了。不确定能不能用 conda 直接装,可以先搜索下:`conda search --full --name pipx`,如果能搜到,就通过 `conda install pipx` 进行安装。 安装过程相关信息: ```shell added / updated specs: - pipx The following packages will be downloaded: package | build ---------------------------|----------------- argcomplete-1.12.3 | pyhd3eb1b0_0 35 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main click-8.1.7 | py311h06a4308_0 221 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main colorama-0.4.6 | py311h06a4308_0 36 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main importlib-metadata-4.11.3 | py311h06a4308_0 42 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main importlib_metadata-4.11.3 | hd3eb1b0_0 12 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main packaging-23.1 | py311h06a4308_0 100 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main pipx-1.2.1 | pyhd8ed1ab_0 48 KB conda-forge userpath-1.7.0 | pyhd8ed1ab_0 17 KB conda-forge zipp-3.11.0 | py311h06a4308_0 21 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main ------------------------------------------------------------ Total: 532 KB The following NEW packages will be INSTALLED: argcomplete anaconda/pkgs/main/noarch::argcomplete-1.12.3-pyhd3eb1b0_0 click anaconda/pkgs/main/linux-64::click-8.1.7-py311h06a4308_0 colorama anaconda/pkgs/main/linux-64::colorama-0.4.6-py311h06a4308_0 importlib-metadata anaconda/pkgs/main/linux-64::importlib-metadata-4.11.3-py311h06a4308_0 importlib_metadata anaconda/pkgs/main/noarch::importlib_metadata-4.11.3-hd3eb1b0_0 packaging anaconda/pkgs/main/linux-64::packaging-23.1-py311h06a4308_0 pipx conda-forge/noarch::pipx-1.2.1-pyhd8ed1ab_0 userpath conda-forge/noarch::userpath-1.7.0-pyhd8ed1ab_0 zipp anaconda/pkgs/main/linux-64::zipp-3.11.0-py311h06a4308_0 Proceed ([y]/n)? ``` 使用 conda 直接安装 pipx,使用 `conda list` 查看包信息,可以看到该环境下的 [pip](#pip) 和 pipx 是同一级的: ```shell pip 23.3 py311h06a4308_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main pipx 1.2.1 pyhd8ed1ab_0 conda-forge ``` > [!info] 不同安装方式存在异同 > > 1. 该环境下的 [pip](#python_pip) 下(使用 `pip list` 命令查看),同样存在 pipx,这与在该环境下使用 `pip install pipx` 结果基本相同。 > > 2. 使用 `conda install pipx` 方式安装,其卸载也连同相关的依赖组件一并卸载,所以而使用 pip 安装的 pipx,在卸载时,只会卸载 pipx,其依赖不同一同卸载。 > > 3. 如果使用 `python -m pip install --user pipx` 命令安装,该环境下使用 `conda list` 是没有 pipx 的,只能在 `pip list` 查看到。 > > **推荐使用 `conda install pipx` 方式安装 pipx**。 > [!important] > > 如果 conda 某环境更新 python 版本,那 pipx 最好使用 `pipx reinstall-all` 命令重新安装相应的模块,不然进行 `pipx upgrade-all` 时会报 `FileNotFoundError: [Errno 2] No such file or directory` 类似的错误。 ### 安装模块 [pip](#python_pip) 和 `pipx` 默认都是从 [pypi](https://pypi.org/) 上安装包。 使用 pipx 安装模块或应用,跟 [pip](#python_pip) 差不多。 ```shell pipx install 应用名 ``` 使用 github 源码安装,跟 [pip 安装包](#pip%20安装包) 中安装 github 的包方式类似,就是在 github 的地址前加上 `git+` > [!example] 示例 > > ```shell > pipx install git+https://github.com/psf/black.git > ``` > > 或者没有 `.git` 结尾也是可以的,如: > > ```shell > pipx install git+https://github.com/Prodesire/chpip >``` 安装指定版本的模块: ```shell pipx install package==version ``` > [!example] > > [Examples - pipx](https://pipx.pypa.io/stable/examples/) #### PypiSearch 这个模块可以认为是 [pipx](#python_pipx) 必装的模块。 因为 [pypisearch](https://github.com/shidenko97/pypisearch) 这个模块功能是**搜索**模块。 ```shell pipx install pypisearch ``` 安装完 [pypisearch](https://github.com/shidenko97/pypisearch) 后,就可以使用其搜索模块: ```shell pypisearch 模块名 ``` ### 查询模块信息 列出已安装的所有模块: ```shell pipx list ``` 查看某模块的虚拟环境用了哪些包: ```shell pipx runpip 模块名 list ``` ### 运行 ```shell pipx run 模块名 ``` ### 升级 ```shell pipx upgrade 模块名 ``` 升级所有模块: ```shell pipx upgrade-all ``` ### 卸载 卸载域模块: ```shell pipx uninstall 模块 ``` 卸载所有模块: ```shell pipx uninstall-all ``` #### 清空模块 如果重装 conda 或另装环境,不想要之前使用 pipx 安装的模块,想要清理模块,可以进行以下步骤进行模块的清理: 1. `~/.local/bin` 下使用 `pipx` 安装的模块都有一个链接文件,将这个链接文件删除 ```shell $ ll .local/bin Permissions Size User Group Date Modified Name drwxr-xr-x - silascript silascript 2025-08-15 20:36 . drwx------ - silascript silascript 2024-04-21 10:50 .. lrwxrwxrwx - silascript silascript 2025-02-18 21:44 blackd -> /home/silascript/.local/share/pipx/venvs/black/bin/blackd lrwxrwxrwx - silascript silascript 2025-02-18 21:44 markdown_py -> /home/silascript/.local/share/pipx/venvs/markdown/bin/markdown_py lrwxrwxrwx - silascript silascript 2025-02-18 21:44 mycli -> /home/silascript/.local/share/pipx/venvs/mycli/bin/mycli lrwxrwxrwx - silascript silascript 2025-02-18 21:44 pipdeptree -> /home/silascript/.local/share/pipx/venvs/pipdeptree/bin/pipdeptree lrwxrwxrwx - silascript silascript 2025-02-18 21:44 pygmentize -> /home/silascript/.local/share/pipx/venvs/pygments/bin/pygmentize lrwxrwxrwx - silascript silascript 2025-02-18 21:44 pylsp -> /home/silascript/.local/share/pipx/venvs/python-lsp-server/bin/pylsp lrwxrwxrwx - silascript silascript 2025-08-13 10:59 python3.10 -> /home/silascript/.local/share/uv/python/cpython-3.10.18-linux-x86_64-gnu/bin/python3.10 lrwxrwxrwx - silascript silascript 2025-08-13 02:31 python3.12 -> /home/silascript/.local/share/uv/python/cpython-3.12.11-linux-x86_64-gnu/bin/python3.12 lrwxrwxrwx - silascript silascript 2024-02-29 20:39 subl -> /opt/sublime_text/sublime_text ``` > [!tip] > > 其中那些指向的目标路径中有 `pipx/venvs` 就是 pipx 安装的模块,将这些删除掉就好了。不要删错了,那些路径中有 `uv` 的,是 [UV](#python_uv) 安装的东西。 > 2. `~/.local/share/pipx/venvs` 这个目录是模块实际的安装目录,将此目录清空,就能将 pipx 安装的所有模块都删除了 ```shell $ ll .local/share/pipx/venvs Permissions Size User Group Date Modified Name drwxr-xr-x - silascript silascript 2025-02-18 21:44 . drwxr-xr-x - silascript silascript 2024-04-07 22:51 .. drwxr-xr-x - silascript silascript 2025-02-18 21:44 autopep8 drwxr-xr-x - silascript silascript 2025-02-18 21:44 black drwxr-xr-x - silascript silascript 2025-02-18 21:44 jedi-language-server drwxr-xr-x - silascript silascript 2025-02-18 21:44 markdown drwxr-xr-x - silascript silascript 2025-02-18 21:44 mdformat drwxr-xr-x - silascript silascript 2025-02-18 21:44 mycli drwxr-xr-x - silascript silascript 2025-02-18 21:44 pipdeptree drwxr-xr-x - silascript silascript 2025-02-18 21:44 pygments drwxr-xr-x - silascript silascript 2025-02-18 21:44 pypisearch drwxr-xr-x - silascript silascript 2025-02-18 21:44 python-lsp-server drwxr-xr-x - silascript silascript 2025-02-18 21:44 ruff drwxr-xr-x - silascript silascript 2025-02-18 21:44 ruff-lsp drwxr-xr-x - silascript silascript 2025-02-18 21:44 yapf drwxr-xr-x - silascript silascript 2025-02-18 21:44 you-get ``` --- ## UV [UV](https://github.com/astral-sh/uv) 一个使用 [Rust](../Rust/Rust_Note.md) 编写的 Python 的项目工具。它包括了虚拟环境管理、项目的包依赖管理等功能。 > [!quote] > > An extremely fast Python package and project manager, written in Rust. ### 安装配置 #### 安装方式 1. 使用系统包管理器安装 以 [ArchLinux](../Linux/ArchLinux_Note.md) 为例: ```shell yay -S uv ``` > [!tip] > > 通过系统包管理器安装的 `uv`,是不能通过 `uv self update` 命令进行自身升级的。 > > > ```shell > $ uv self update error: uv was installed through an external package manager, and self-update is not available. Please use your package manager to update uv. >``` 2. 使用 pip 安装 也可以使用 [pip](#python_pip) 安装:`pip install uv` 3. 使用 pipx 安装 `pipx inistall uv` 4. 在 conda 环境中安装 `conda install uv -c conda-forge` > [!tip] > > 或者在 [Conda](Python_Conda.md) 环境中使用 `pip` 或 `pipx` 安装。 #### 配置 UV 配置分系统级别(system-level)、用户级别(user-level)、项目级别(project-level)。 项目级别配置文件优先级高于用户级别,用户级别优先级高于系统级。 系统及用户级别的配置文件必须是 `uv.toml`。 项目级别的配置文件,格式与 `pyproject.toml` 一样。 UV 的默认全局配置是放在用户目录下 `~/.config/uv/uv.toml` 文件。没有就自己新建。 > [!quote] > > uv will also discover user-level configuration at `~/.config/uv/uv.toml` (or `$XDG_CONFIG_HOME/uv/uv.toml`) on macOS and Linux, or `%APPDATA%\uv\uv.toml` on Windows; and system-level configuration at `/etc/uv/uv.toml` (or `$XDG_CONFIG_DIRS/uv/uv.toml`) on macOS and Linux, or `%SYSTEMDRIVE%\ProgramData\uv\uv.toml` on Windows. > > User-and system-level configuration must use the `uv.toml` format, rather than the `pyproject.toml` format, as a `pyproject.toml` is intended to define a Python *project*. > > If project-, user-, and system-level configuration files are found, the settings will be merged, with project-level configuration taking precedence over the user-level configuration, and user-level configuration taking precedence over the system-level configuration. (If multiple system-level configuration files are found, e.g., at both `/etc/uv/uv.toml` and `$XDG_CONFIG_DIRS/uv/uv.toml`, only the first-discovered file will be used, with XDG taking priority.) ### UV 镜像 在 `.config` 下创建相关的配置文件: ```shell mkdir ~/.config/uv && vim ~/.config/uv/uv.toml ``` uv 有两个镜像得配。 #### UV_DEFAULT_INDEX uv 可以像 [pip](#python_pip) 一样管理依赖,但是 uv 不会读取 pip 的配置,所以要单独设置镜像地址。 `UV_INDEX` 或 `UV_DEFAULT_INDEX` 这是配的 pypi 镜像,即执行 `uv add` 命令安装第三方包时的镜像。 `UV_INDEX` 可以配多个源,`UV_DEFAULT_INDEX` 只能有一个,是用来默认替代 pypi 源的。 这个配置可以在 `uv.toml` 中就可以直接配置,这属于用户级别的配置。当然也可以在项目中的 `pyproject.toml` 中配置。 以清华源为例,在 `uv.toml` 中配置: ```toml [[index]] url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple" default = true ``` 如果在项目的 `pyproject.toml` 中配置: ```toml [[tool.uv.index]] url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple" default = true ``` 除了在配置文件中配,也可以使用 `uv add` 命令时,添加入 `--default-index` 参数临时配置镜像: ```shell uv add --default-index https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple requests ``` #### Python 安装包下载镜像 uv 下载 python 是通过 [https://github.com/indygreg/python-build-standalone](https://github.com/indygreg/python-build-standalone) 项目的 releases 进行下载。 uv 本身提供了下载镜像参数 `UV_PYTHON_INSTALL_MIRROR`,即执行 `uv python install xx` 命令时用到的镜像。这个镜像是在你的系统各种 `rc`,如 `bashrc`、`zshrc` 等中配的。 南京大学的 Python 安装包镜像:[https://mirrors.cernet.edu.cn/list/python-build-standalone](https://mirrors.cernet.edu.cn/list/python-build-standalone) 在 `bashrc`、`zshrc` 或各种 `profile` 中配置: ```shell UV_PYTHON_INSTALL_MIRROR="https://mirrors.cernet.edu.cn/list/python-build-standalone" ``` 当然可以使用命令参数 `--mirror` 临时指定镜像来安装 python,例: ```shell uv python install 3.13 -v --mirror https://mirrors.cernet.edu.cn/list/python-build-standalone ``` 当然如果南大的镜像哪天挂了,那只能使用 [GitHub](../Git/Git_Note.md#git_github) 的「各种魔法加速」了。 ### UV 使用 #### python 版本管理 列出可用的 Python 版本: ```shell uv python list ``` 安装 Python: ```shell uv python install 版本号 ``` > [!info] > > 使用 `uv python install` 命令安装 python,会装在 `.local/share/uv/python` 这个目录下。而在 [创建项目](#创建项目) 时,如果没有指定 python 的版本,默认从这个目录找最新的 python 版本。 移除 Python: ```shell uv python uninstall 版本号 ``` 固定 Python 版本: ```shell uv python pin 版本号 ``` 查找已经安装的 Python 版本息: ```shell uv python find ``` #### 脚本管理 * `uv run`:运行脚本 * `uv add --script`:为脚本添加依赖 * `uv remove --script`:移除依赖 #### 工具使用 这组命令是以 `uv tool` 开头,或使用 `uvx` * `uv tool install`:全局安装工具 * `uv tool uninstall`:卸载工具 * `uv tools list`:列出已安装的工具 * `uv tools update-shell`:更新 [Shell](../Linux/Shell/Shell_Note.md),使工具可执行文件生效。 #### 项目管理 ##### 创建项目 创建或初始化项目: ```shell uv init ``` > [!tip] > > 如果 `uv init` 后没有东西,那就是初始化当前目录。如果带上一个字符串,那就是创建一个目录然后再初始化它。 > > ```shell > $ uv init testuv > Initialized project `testuv` at `/home/silascript/DevWorkSpace/PythonExercise/testuv` > ``` 创建或初始化后的项目根目录下,会生成两个**重要文件**: * `.python-versoin`:这个是记录当前项目 [Python](Python_Note.md) 的版本,此文件告诉 `uv` 在 [创建虚拟环境](#创建虚拟环境) 时使用的 Python 版本 * `pyproject.toml`:这个文件是用来定义项目的主要依赖,包括项目名称、版本、描述、支持的 `Python` 版本等信息 例: ```shell # silascript @ (base) in ~/DevWorkSpace/PythonExercise/testuv on git:main x [1:39:29] $ ll Permissions Size User Group Date Modified Name drwxr-xr-x - silascript silascript 2025-08-13 01:37 . drwxr-xr-x - silascript silascript 2025-08-13 01:37 .. .rw-r--r-- 5 silascript silascript 2025-08-13 01:37 .python-version .rw-r--r-- 84 silascript silascript 2025-08-13 01:37 main.py .rw-r--r-- 152 silascript silascript 2025-08-13 01:37 pyproject.toml .rw-r--r-- 0 silascript silascript 2025-08-13 01:37 README.md ``` 创建项目时,是可以指定 python 的版本: ```shell uv init -p python版本号 ``` 示例: ```shell uv init testuv -p 3.11 # Initialized project `testuv` at `/home/silascript/DevWorkSpace/PythonExercise/testuv` ``` uv 会根据它所可以找到的 Python 环境来执行,顺序大概是: 1. 当前目录下的 `.python-version` 文件内设定的版本 2. 当前启用的虚拟环境 3. 当前目录下 `.venv` 目录内设定的虚拟环境 4. uv 自己安装的 Python 5. 系统环境设定的 Python 环境 #### 虚拟环境 在不指定 uv 的虚拟环境时,uv 使用的是 [临时虚拟环境](#临时虚拟环境)。 ##### 临时虚拟环境 ```shell uv cache dir ``` ##### 创建虚拟环境 使用 `uv venv` 命令来创建虚拟环境: 使用 `uv venv` 命令,默认情况,会在**当前目录**下生成 `.venv` 目录作为虚拟环境目录。 当然可以指定虚拟环境目录的名称:`uv venv p311`,这样当前目录下就会生成一个 `.p311` 的目录,这就是虚拟环境目录。 当然在创建虚拟环境时,还可以指定虚拟环境使用 Python 的版本。 示例: ```shell $ uv venv --python 3.11 # Using CPython 3.11.13 # Creating virtual environment at: .venv # Activate with: source .venv/bin/activate ``` > [!tip] > > 如果 `uv venv` 不显式指定 Python 版本,那会根本目录下的 `.python-version` 文件中给定的版本自动指定虚拟环境的 Python 版本 > > ```shell > $ cat .python-version > 3.11 > > $ uv venv > Using CPython 3.11.13 > Creating virtual environment at: .venv > Activate with: source .venv/bin/activate > > ``` > `.venv/bin` 目录结构: ```shell $ ll .venv/bin Permissions Size User Group Date Modified Name drwxr-xr-x - silascript silascript 2025-08-13 03:10 . drwxr-xr-x - silascript silascript 2025-08-13 03:10 .. .rw-r--r-- 4.1k silascript silascript 2025-08-13 03:10 activate .rw-r--r-- 2.7k silascript silascript 2025-08-13 03:10 activate.bat .rw-r--r-- 2.7k silascript silascript 2025-08-13 03:10 activate.csh .rw-r--r-- 4.2k silascript silascript 2025-08-13 03:10 activate.fish .rw-r--r-- 3.9k silascript silascript 2025-08-13 03:10 activate.nu .rw-r--r-- 2.8k silascript silascript 2025-08-13 03:10 activate.ps1 .rw-r--r-- 2.4k silascript silascript 2025-08-13 03:10 activate_this.py .rw-r--r-- 1.7k silascript silascript 2025-08-13 03:10 deactivate.bat .rw-r--r-- 1.2k silascript silascript 2025-08-13 03:10 pydoc.bat lrwxrwxrwx - silascript silascript 2025-08-13 03:10 python -> /home/silascript/.local/share/uv/python/cpython-3.11.13-linux-x86_64-gnu/bin/python3.11 lrwxrwxrwx - silascript silascript 2025-08-13 03:10 python3 -> python lrwxrwxrwx - silascript silascript 2025-08-13 03:10 python3.11 -> python ``` > [!info] > > 可以看到,`.venv/bin` 中创建了几个 python 的链接文件 `python3.11`、`python3` 和 `python`,最终都是指向 `.local/share/uv/python` 下具体的 python 可执行文件。大致可以看到 uv 项目使用到的虚拟环境与 `uv python` 命令的关系。 --- ## pixi [Pixi](https://pixi.sh) 是新一代的包管理器。 --- ## Python 语法 [Python 语法](Python_Syntax.md) --- ## 常用包 ### 结巴分词 [结巴分词](https://github.com/fxsjy/jieba) 是一个 Python 的中文分词组件。 Obsidan 中 [中文分词插件](../NoteSoft/Obsidian/Obsidian_Note.md#obn_plugins_wordsplitting_ch) 就有可能用到这个组件。 --- ## IDE ### Pycharm [Pycharm](https://www.jetbrains.com/pycharm/) 跟 [Idea](../Java/IDE/Java_IDE_Idea.md) 一样,都是 JetBrains 旗下的一款 IDE。 #### 安装 以 [Linux](../Linux/Linux_Note.md) 版本安装为例。 Pycharm 的 [Desktop](../Linux/Linux_Note.md#Desktop%20文件解析): ```desktop [Desktop Entry] Version=1.0 Type=Application Name=Pycharm 2025 Icon=pycharm.png Exec=/opt/pycharm/bin/pycharm Comment=The Python IDE Categories=Development;IDE; Terminal=false StartupWMClass=jetbrains-pycharm ``` 破解跟 Idea 类似,可以到 [https://blog.idejihuo.com](https://blog.idejihuo.com/) 找相关资源。 > [!tip] > > 注意,激活时,用的是 `pycharm64.vmoptions` 这个配置文件指定激活工具路径,而非默认的 `pycharm.vmoptions`。 --- ## 资源链接 ### 相关文档 * [Python3.x 官方中文文档](https://docs.python.org/zh-cn/3/) #### pip 文档 * [Configuration - pip documentation v25.2](https://pip.pypa.io/en/stable/topics/configuration/) ##### pipx 文档 * [Install Examples - pipx](https://pipx.pypa.io/stable/examples/#pipx-install-examples) * [Run Examples - pipx](https://pipx.pypa.io/stable/examples/#pipx-run-examples) #### uv 文档 * [uv doc](https://docs.astral.sh/uv/) * [uv-zh-cn](https://hellowac.github.io/uv-zh-cn/) ### 相关教程书籍 * [Python - 100天从新手到大师 - 书栈网](https://www.bookstack.cn/read/Python-100-Days/README.md) ### 相关网站 * [Python中文网](https://www.cnpython.com/) * [Python123 - 编程更简单](https://python123.io) * [Python 技术分享](https://suyin-blog.cn) --- ## 相关笔记 * [Python 资料清单](Python_Material.md) * [Conda 笔记](Python_Conda.md) * [Python 语法笔记](Python_Syntax.md) * [Python 视频清单](Python_Videos.md) * [镜像清单](../Linux/Mirror_Address.md)
X Tutup