版本管理工具
版本管理工具
Python版本管理工具
类似于 Nodejs 中的 NVM 用于管理多个 nodejs 版本, Python 也有类似的 Python 版本管理工具
pyenv
pyenv 可让您轻松地在多个 Python 版本之间切换。它简单、不引人注目,并且遵循 UNIX 单一用途工具只做好一件事的传统。
pyenv 使用注入到PATH
中的 shim 可执行文件拦截 Python 命令,确定应用程序指定的 Python 版本,并将命令传递到正确的 Python 安装。
更详细的信息请参阅 GitHub - pyenv/pyenv: Simple Python version management
安装
# 如果需要的话可以设置下 https 代理, 例如:
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
# 安装 pyenv
curl https://pyenv.run | bash
根据输出提示中所说的那样, 如果你用的是 bash 那就在 ~/.bashrc
中添加如下命令, 如果用的是 zsh
则在 ~/.zshrc
中添加如下命令, 其他 shell 同理
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
有关更多详细信息,可以参阅此项目组的其他项目: GitHub - pyenv/pyenv-installer: This tool is used to install pyenv
and friends.
Pyenv 并不正式支持 Windows,并且无法在适用于 Linux 的 Windows 子系统之外的 Windows 中工作。此外,即使在 Windows Subsystem for Linux
中, 它安装的 Python 也不是 native Windows
版本,而是在虚拟机中运行的 Linux 版本 - 因此您将无法获得 Windows 特定的功能。
如果使用的是 Windows,建议使用 @kirankotari 的pyenv-win
分支——它会安装本机 Windows Python 版本。
使用
这里只讨论 Linux 下的 pyenv 的使用
首先需要把一些基础的 Python 构建工具库安装一下
sudo apt-get update
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
安装并切换到指定 Python 版本, 例如:
# 安装 python3.10.4
pyenv install 3.10.4
# 为全局激活 python3.10.4(root用户下尽量不要使用)
pyenv global 3.10.4
# 每当您位于当前目录(或其子目录)时自动选择
pyenv local 3.10.4
# 仅选择当前 shell 会话
pyenv shell 3.10.4
PS: 用起来感觉还是有些问题, 机子环境比较复杂, 有时候使用 pyenv 设置了 python 环境没能生效
目前暂时只是用来在 Linux 系统上下载与安装不同版本的 python, 然后后续结合 poetry 使用
conda
Getting started with conda — conda 24.7.2.dev10 documentation
Conda 是一个开源的包管理和环境管理系统,它能够运行、安装和更新各种包和依赖,包括 Python 和非 Python 包。Conda 适用于 Windows、macOS 和 Linux 系统。
我们可以通过安装 conda 发行版来使用 conda, 常见的 conda 发行版主要是 miniconda 和 anaconda
miniconda
Miniconda 是 conda 的免费最小安装程序。它是 Anaconda 的一个小型引导版本,仅包含 conda、Python、它们所依赖的包以及少量其他有用的包(例如 pip、zlib 等)。如果您需要更多软件包,请使用conda install
命令从 Anaconda 公共存储库或其他渠道(例如 conda-forge 或 bioconda)默认提供的数千个软件包中进行安装。
先看下 系统要求 — Anaconda 文档 --- System requirements — Anaconda documentation 确认当前机器是否支持安装 miniconda
如果支持的话则根据 Miniconda — Anaconda documentation 进行安装即可
Anaconda
Anaconda Distribution 是一个功能齐全的安装程序,附带一套用于数据科学的软件包,以及 Anaconda Navigator(一个用于 conda 环境的 GUI 应用程序)。
安装
需要注意的是, 如果使用 Clash 的话需要可以打开此配置
否则使用 Anaconda Navigator 或者 conda 环境操作时会报错
Anaconda 官网
可在此处获取其他版本的安装包
需要注意的是 Anaconda 装完之后打开命令行总会自动进入 conda 环境, 可以通过更改 conda 配置来取消自动进入
conda config --set auto_activate_base false
如果想要设置自动进入的话将
false
改为true
运行即可
安装完成后打开 Anaconda Navigator
:
如何在 Ubuntu 20.04 上安装 Anaconda - 云+社区 - 腾讯云 (tencent.com)
Anaconda conda常用命令:从入门到精通_chenxy_bwave的专栏-CSDN博客_conda常用命令可在 Anaconda 官网 获取其他版本的安装包
# 安装 Anaconda
#wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
#bash Anaconda3-2021.11-Linux-x86_64.sh
wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
bash Anaconda3-2022.05-Linux-x86_64.sh
若出现
段错误 (核心已转储)
字样, 可以使用wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
从断点处继续下载
长按 ENTER 阅读完条款
yes
选择安装路径, 默认为 /root/anaconda3
, 这个过程会比较长
yes, 执行初始化, 这将会将命令行工具 conda 添加到系统的 PATH 环境变量中。
不过想要激活 Anaconda,还需要关闭并且重新打开你的 shell 或者在当前 shell 会话中输入下面的命令,来重新加载 PATH 环境变量:
source ~/.bashrc
可以使用 conda --version
查看 Anaconda 版本
设置国内镜像
#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
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/cloud/bioconda/
#设置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#设置搜索时显示通道地址
conda config --set show_channel_urls yes
配置
Anaconda
安装完成后调起命令行会默认启动 conda 环境, 可以使用如下命令开启或关闭该项配置
# 关闭自动启动conda环境
conda config --set auto_activate_base false
# 启动自动启动conda环境
conda config --set auto_activate_base true
创建与使用 python 环境
使用 Anaconda Navigator
打开 Anaconda Navigator -> Environments
在环境列表底部按钮中找到 Create
并点击
为新环境命一个名(英文命名, 尽量简短些, 之后激活要用)
选择 Python 环境可以保守些, 比如最新版本回退一两个大版本这样的, 主要是因为有一些三方库更新没跟上, 不一定支持最新版本
在命令行中使用 conda 环境可以使用如下指令激活:
conda activate 环境名
使用命令行
创建一个名为 BigData
, python 版本为 3.9 的虚拟环境
conda create -n BigData python=3.9
激活 BigData
conda 环境
conda activate BigData
退出当前虚拟环境
conda deactivate
Conda clean 净化Anaconda - 简书 (jianshu.com)
Anaconda conda常用命令:从入门到精通_chenxy_bwave的专栏-CSDN博客_conda常用命令
Anaconda 官网
可在此处获取其他版本的安装包
Anaconda 换源
打开
anaconda prompt
执行以下命令来配置清华源:
不打开 navigator 也是完全可行的, 打开命令行就可以了, 前提是为 anaconda 配置了环境变量
只要在命令行中
conda -V
有版本号输出就可以了conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ 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/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes
配置清华源是为了后续使用
pip
命令安装 python 库时快些, 不配置换源而直接使用默认源的话在墙内容易超时报错中科大源:
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/ conda config --set show_channel_urls yes
需要注意的是 conda 换源后会使更新 conda 的操作可能会报错
因此在更新 conda 的时候记得回复默认源
conda config --remove-key channels
查看源:
conda config --show
Anaconda Navigator 升级
conda update conda -y
conda update anaconda -y
conda update anaconda-navigator -y
如果进行了换源操作记得在升级前恢复默认源, 否则可能会在镜像源中找不到更新包
conda config --remove-key channels
报错收集
check_hostname requires server_hostname
- 本来是在
Pycharm
中新建conda
环境报的错误,接着打开Anaconda Navigator
也报了相同的错误 - 最终在anaconda-issues #12410找到的相同报错及解决方案为 关掉VPN
对于 Clash 而言可以打开此项配置
开了之后就正常了:
各类 HTTPError
相关
我这边报错都是清华的源报错,换成阿里的源就没问题了(
https://mirrors.aliyun.com/anaconda/pkgs/main/
ModuleNotFoundError: No module named 'pip._vendor....'
pip
出问题了- 在
CMD.exe Prompt
中执行conda update pip
即可
Linux-update-alternatives
在 Linux 上, 类似于Java | DailyNotes (ayusummer233.gitlab.io) 中提到的可以用 update-alternatives
管理当前 jdk 版本
python 也可以使用 update-alternatives
管理全局的 python 版本, 详见 如何在ubuntu中切换使用不同版本的python_python_脚本之家 (jb51.net)
Python依赖版本管理工具
virtual environment
# 安装 virtualenv
pip install virtualenv
# 使用 virtualenv 创建虚拟环境
virtualenv -p python3 env
# 激活虚拟环境(Windows)
.\env\Scripts\activate
# 激活虚拟环境(Linux)
source env/bin/activate
这里的
-p python3
中的python3
具体会创建什么版本的 python 环境, 只需要在当前命令行中python3 -V
看一下就知道了相应的要创建什么版本的 python 环境, 也可以直接将 python3 环境指定环境 python 解释器的路径, 例如
virtualenv -p /usr/bin/python3.11 env
PS: 使用 conda 环境的 python 创建虚拟环境时最好进入
conda activate [env_name]
然后再使用virtualenv -p python [env_name]
来创建, 直接使用 conda python 路径创建可能会卡住
在 Win 中对应环境变量中路径下匹配到的首个
python.exe
, 相应的python3
就对应的是第一个匹配到的python3.exe
, 可以使用如下命令确认:python -V python3 -V python >>> import sys >>> print(sys.executable)
在 Linux 中对应的即为
/usr/bin/python
符号链接指向的 python 程序, linux 中要修改的话修改相应/usr/bin/pythonxx
符号链接对应的 python 程序路径即可
Pipenv
这里记录的是 ubuntu 下的配置
Windows 的话 Pycharm 中有自带的 Pipenv 包
如何开始使用 Pipenv? | w3c笔记 (w3cschool.cn)
WSL Ubuntu 18.04上使用pipenv的4个关键点 | 老梅笔记 (laomeinote.com)
Pipenv: Python Dev Workflow for Humans — pipenv 2021.11.9 documentation (pypa.io)
12. Virtual Environments and Packages — Python 3.10.0 documentation
Pipenv 是 Python 的 Python 打包工具,是对使用 Pip、Venv 和 requirements.txt的升级。Pipenv 是将包管理与虚拟环境相结合的好方法。
虚拟环境是一个自包含的目录树,其中包含针对特定 Python 版本的 Python 安装,以及许多其他包。
安装 pipenv
模块:
apt install pipenv
pip insatll pipenv
使用 cd
命令切换到需要安装虚拟环境的目录安装虚拟环境(如果当前目录下没有 Pipfile
则会先生成 Pipfile
, 如果有的话便会继续安装虚拟环境):
pipenv install
Pipfile
中将[[source]]
区域下的url
改为国内的源# 华为镜像 https://repo.huaweicloud.com/repository/pypi/simple # 阿里镜像 https://mirrors.aliyun.com/pypi/simple # 官方源 https://pypi.python.org/simple
如果默认生成的
Pipfile
中的包特别多, 那么这条命令会执行很长时间且没有 log, 这将会是一个很折磨的过程(
启动虚拟环境
pipenv shell
可以通过 exit
退出虚拟环境
Poetry
Poetry - Python dependency management and packaging made easy (python-poetry.org)
python-poetry/poetry: Python dependency management and packaging made easy. (github.com)
Poetry 是 Python 的依赖管理器
Poetry 可以帮助您声明、管理和安装 Python 项目的依赖项,确保到处都有正确的 stack。
系统需求
需要 Python3.8+
Windows Python 基本都是到官网下的比较新的版本, 一般不会出问题
PS: Windows 尽量不要使用微软商店提供的 Python, 目录管理混乱, 导致很多衍生命令执行时走默认路径检测会报错
主要是 Linux, 尤其是服务器使用老版本 Linux 自带的 python3 版本可能比较老, 需要注意一下, 如果低于 Python3.8 则需要对应安装, 推荐使用上文提到的 pyenv
安装
Poetry 提供了一个自定义的安装程序, 通过解构 Poetry 的依赖关系, 将 Poetry 与系统的其他部分隔离开
kali 推荐通过此种方式安装
osx / linux / bashonwindows install instructions
:
# 如果需要请设置代理
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
# 安装 poetry
curl -sSL https://install.python-poetry.org | python3 -
如果报错
则可通过
--insecure
参数来放弃验证curl -sSL --insecure https://install.python-poetry.org | python -
如果出现
syntax error
那么大概是 Python 版本比较低, 可以安装 python3.8 及以上版本后使用curl -sSL --insecure https://install.python-poetry.org | python3 -
打开 ~/.bashrc
: 将 poetry 所在目录添加到该配置文件中
export PATH="/root/.local/bin:$PATH"
# 重载配置文件
source ~/.bashrc
# 查看 poetry 版本
poetry -V
windows powershell install instructions
:
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
上图中使用的是旧版的
1.x
版本的安装链接:https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py
, 新版本推荐使用https://install.python-poetry.org
来安装建议在安装Python之前系统优先的Python不要是conda环境, 也就是说最好系统优先的 Python 环境是自己手动安装的标准 Python 环境
PS: 因为我没装标准Python环境直接用 conda 出问题了, poetry 安装位置会乱飞还会找不到dll
使用
poetry --version
报错的话需要手动加下环境变量, 如上图所示的目录加到系统变量的path
变量中即可
urllib.error.URLError: <urlopen error unknown url type: https>
如果出现以上错误, 那可能是因为默认 Python 版本比较低, 建议使用 3.8 以上的版本
poetry 会自动添加环境变量, 安装完后重启 powershell
, 检查下 poetry 版本:
poetry --version
Windows 推荐使用 pipx 的方式安装
kali 不建议使用此种方式安装
安装 pipx(需要 pip 19.0 及以上版本)
pip install --user pipx
可以看到最后有 warning 提示当前没有添加 Path, 可以 cd 到对应目录然后运行
.\pipx.exe ensurepath
安装完 pipx 后可以通过 pipx 安装 poetry(记得重启 powershell 以更新环境变量)
pipx install poetry
配置文件
- macOS:
~/Library/Application Support/pypoetry
- Windows:
C:\Users\<username>\AppData\Roaming\pypoetry
可以通过:
poetry config virtualenvs.in-project true
来让 poetry 默认在项目根目录下创建 venv
作为虚拟环境目录, 或者直接写配置文件:
[virtualenvs]
in-project = true
此项配置默认为
false
若在配置此项之前创建了虚拟环境, windows 下应该在
C:\Users\用户名\AppData\Local\pypoetry\Cache\virtualenvs
目录下, 将其删除后重新在项目根目录下poetry install
即可在项目根目录下创建.venv
作为虚拟环境目录
pyproject.toml
换源
Poetry 默认配置从 PyPI 查询依赖包, 如果想要使用私仓(或是镜像)的话需要如如下配置
[[tool.poetry.source]]
name = "private"
url = "http://example.com/simple"
例如:
[[tool.poetry.source]] name = "aliyun" url = "http://mirrors.aliyun.com/pypi/simple" priority = "primary"
[[tool.poetry.source]] name = "tsinghua" url = "https://pypi.tuna.tsinghua.edu.cn/simple/" priority = "primary"
基本用法
安装依赖
Python - poetry(5) 依赖规范 (win80.net)
对于一个用 poetry 设置 python 环境的项目, 其根目录下有 poetry 的pyproject.toml
即可通过 poetry install
来安装该项目所需的依赖, 如果发现卡主或是其他问题, 可以使用 poetry -vvv install
以在安装依赖时查看更详细的调试信息
可以在 pyproject.toml
的 tool.poetry.dependencies
区域指明依赖版本
也可以通过 poetry add
来安装依赖
poetry add numpy
使用虚拟环境
默认情况下, poetry 会在 {cache-dir}/virtualenvs
({cache-dir}\virtualenvs
on Windows)目录下创建一个虚拟环境:
如果先前设置了 poetry config virtualenvs.in-project true
的话执行 poetry install
安装依赖则会装在项目根目录的 .venv
里
激活虚拟环境: cd
进入 .venv
然后使用 poetry shell
激活虚拟环境
结合 conda 环境使用
poetry 可以直接使用 conda 环境而不单独创建虚拟环境
只需要先 activate 对应 conda 环境, 然后把 pyproject.toml
中的 python 版本对其当前 conda 环境版本即可
此时使用 poetry shell
会输出 Virtual environment already activated: xxxxxx
不过当然也可以使用 conda 环境来创建虚拟环境, 只需要使用 poetry env use 对应conda环境的python.exe路径
即可利用该 conda 环境创建虚拟环境
在当前 conda 环境的 bin
目录中找不到 activate 脚本导致环境激活失败(ubuntu)
在该 conda 环境的 bin 目录下新建一个 activate 文件, 写入如下代码然后重新 poetry shell 即可
#!/bin/sh
_CONDA_ROOT="/root/anaconda3/envs/xxx" # 该 conda 环境根目录
# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
\. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $?
conda activate "$@"
奇怪的是虽然没有 activate 脚本, 但是直接 conda activate 是有用的
删除虚拟环境
查找虚拟环境的位置:
poetry env info --path
列出所有的虚拟环境:
poetry env list
从上述命令输出中找到需要删除的虚拟环境的名称然后运行如下命令:
poetry env remove [虚拟环境名称]
常见问题
Failed to create the collection: Prompt dismissed..
python poetry 1.0.0 private repo issue fix – Frank-Mich's Blog
# test.py
import keyring
print(keyring.util.platform_.config_root())
poetry run python test.py
打开输出的文件目录(不存在则创建), 新建一个 keyringrc.cfg
, 填入
[backend]
default-keyring=keyring.backends.fail.Keyring
卡 keyring
Poetry blocks on "Pending..." during installation · Issue #6050 · python-poetry/poetry (github.com)
有时候 poetry install
会一只卡 pending, 此时需要查看一些调试信息, 可以使用 poetry -vvv install
来查看更多运行时信息, 如果发现是卡在 keyring 上, 可以运行如下命令
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
然后重新 poetry -vvv install
即可
python 版本不对
PS: 如下方案是纯手动的, 推荐优先使用上文中提到的 pyenv
比如这个仓库需要 python 3.10
以上的 python 版本, 这里虽然我全局 python 目前是 3.10, 但是 poetry 当时是 python 3.8 版本安装的, 使用了当时全局的 python 3.8 环境
因此这里需要将 poetry 的默认 python 版本指向 python3.10
# 查看 poetry 当前使用的 python 版本(在带 pyproject.toml 的目录下执行)
poetry env info
# 为 poetry 指定需要使用的 python 环境
poetry env use [python可执行程序路径]
# PS: 如果需要使用的就是当前全局的 python 的话也可以直接
poetry env use python
macOS VSCode识别不到 poetry 创建的 .venv 虚拟环境
macOS VSCode 不知道什么原因 poetry 新建的 .venv
虚拟环境无法被正确识别,无法在右下角选择 python 解释器弹出的下拉菜单中找到对应的 python 解释器
即便手动选择 python 程序文件也无法正常识别
此时可以使用如下方法来成功配置虚拟环境:
使用 VSCode 打开 .venv
所在的目录,此时 .venv
直接在当前工作区根目录下 VSCode 可以识别到,在右下角选择 Python 解释器选项中可以选择到虚拟环境
此时再重新打开之前的目录也可以选择到此虚拟环境了
PDM
pdm-project/pdm: A modern Python package manager with PEP 582 support. (github.com)
PDM - 一款新的 Python 包管理器 | Frost's Blog (frostming.com)
pdm/README_zh.md at main · pdm-project/pdm (github.com)
官方文档已经讲得很详细了, 这里摘录下来方便个人阅读
PDM 是由 Poetry 开发组的成员开发的( •̀ ω •́ )✧
概述
PDM 旨在成为下一代 Python 软件包管理工具。它最初是为个人兴趣而诞生的。如果你觉得 pipenv
或者 poetry
用着非常好,并不想引入一个新的包管理器,那么继续使用它们吧;但如果你发现有些东西这些 工具不支持,那么你很可能可以在 pdm
中找到。
PEP 582 提出下面这种项目的目录结构:
foo
__pypackages__
3.8
lib
bottle
myscript.py
项目目录中包含一个__pypackages__
目录,用来放置所有依赖的库文件,就像npm
的node_modules
一样。 你可以在这里阅读更多提案的细节。
主要特性
- PEP 582 本地项目库目录,支持安装与运行命令,完全不需要虚拟环境。
- 一个简单且相对快速的依赖解析器,特别是对于大的二进制包发布。
- 兼容 PEP 517 的构建后端,用于构建发布包(源码格式与 wheel 格式)
- 灵活且强大的插件系统
- PEP 621 元数据格式
- 像 pnpm 一样的中心化安装缓存,节省磁盘空间
为什么不用虚拟环境
现在大部分的 Python 包管理器也同时管理虚拟环境,这主要是为了隔离项目开发环境。但如果涉及到虚拟 环境嵌套虚拟环境的时候,问题就来了:你可能用一个虚拟环境的 Python 安装了某个虚拟环境管理工具, 然后又用这个工具去创建更多虚拟环境。当某一天你升级了新版本的 Python 你必须一个一个去检查这些 虚拟环境,没准哪个就用不了了。
然而 PEP 582 提供了一个能把 Python 解释器和项目开发环境解耦的方法。这是一个相对比较新的提案, 没有很多相关的工具实现它,这其中就有 pyflow。但 pyflow 又是用 Rust 写的,不是所有 Python 的社区 都会用 Rust,这样就没法贡献代码,而且,基于同样的原因,pyflow 并不支持 PEP 517 构建。
安装
安装 PDM 需要 Python 3.7 或更高版本
但是运行 PDM 没有 Python 版本要求
curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3 -
使用 powershell
:
(Invoke-WebRequest -Uri https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py -UseBasicParsing).Content | python -
自动添加的 PATH 在用户变量中, 重启 VSCode 后可能依然无法正确识别 p
dm 命令, 此时可以手动修改环境变量, 在系统变量的 PATH 中加上上图中的相应值
使用 pipx
:
pipx install pdm
QuickStart
初始化一个新的 PDM 项目:
新建一个项目文件夹, 在当前文件夹目录下打开 powershell:
pdm init
按照指引回答提示的问题,一个 PDM 项目和对应的pyproject.toml
文件就创建好了。
把依赖安装到 __pypackages__
文件夹中
pdm add tk
# 删除则可用:
pdm remove tk
working with PEP 582
推荐在 .gitignore
中忽略
__pypackages__/
.pdm.toml
对于 VSCode, 可以先用命令行安装 pdm-vscode:
pdm plugin add pdm-vscode
安装完后, 在输入 pdm init
或者 pdm use
命令后会自动创建 .vscode/settings.json
{
"python.autoComplete.extraPaths": ["__pypackages__/<major.minor>/lib"],
"python.analysis.extraPaths": ["__pypackages__/<major.minor>/lib"]
}
需要结合 pylance 使用的话需要在项目根目录创建一个 pyrightconfig.json
:
{
"exclude": ["__pypackages__"]
}
PDM Scripts
例如运行 main.py
可以使用
pdm run python main.py
pdm run python main.py
或者
eval "$(pdm --pep582)"
python main.py
或者将 pdm --pep582
写到 /root/.bash_profile
然后再在 bash 中使用 python main.py
PDM-packer
frostming/pdm-packer: A PDM plugin that packs your packages into a zipapp (github.com)
A PDM plugin that packs your packages into a zipapp
pdm-packer requires Python >=3.7
安装:
pdm plugin add pdm-packer
使用:
$ pdm pack [common-options] [pack-options]
Common Options:
-h, --help
show this help message and exit
-v, --verbose
-v for detailed output and -vv for more detailed
-g, --global
Use the global project, supply the project root with
-p
option
-p PROJECT_PATH, --project PROJECT_PATH
Specify another path as the project root, which changes the base of pyproject.toml and
__pypackages__
Pack Options:
-m MAIN, --main MAIN
Specify the console script entry point for the zipapp
-o OUTPUT, --output OUTPUT
Specify the output filename. By default the file name will be inferred from the project name.
-c, --compress
Compress files with the deflate method, no compress by default
--pyc, --compile
Compile source into pyc files
--no-py
Remove the .py files in favor of .pyc files
-i INTERPRETER, --interpreter INTERPRETER
The Python interpreter path, default: the project interpreter
--exe
Create an executable file. If the output file isn't given, the file name will end with .exe(Windows) or no suffix(Posix)
See also: https://docs.python.org/3.9/library/zipapp.html
示例:
# Create with default name(<project_name>.pyz) and console_script as the __main__.py
pdm pack
# Create an executable file
pdm pack --exe
# Create with custom __main__.py and filename
pdm pack -o app.pyz -m app:main
pipx
pypa/pipx: Install and Run Python Applications in Isolated Environments (github.com)
安装
pip install pipx --user pipx
提示需要将路径添加到 PATH, 这个可以让 pipx 来完成
首先 cd
到安装 pipx 的目录, 然后执行 ./pipx ensurepath
:
然后重启终端输入 pipx 看看有没有反馈信息
如果有回显信息:
那么说明成功了
如果没有的话则需要手动将 C:\Users\233\AppData\Roaming\Python\Python38\Scripts
(以我上面安装pipx的路径为例) 添加到环境变量的 PATH
变量中
brew install pipx
pipx ensurepath
概述
Pipx 是一个帮助您安装和运行用 Python 编写的最终用户应用程序的工具。它大致类似于 macOS 的 brew,JavaScript 的 npx,和 Linux 的 apt。
它与 pip 密切相关。实际上,它使用 pip,但是它专注于安装和管理可以从命令行直接作为应用程序运行的 Python 包。
pipx 与 pip 的区别
Pip 是一个通用的包安装程序,用于没有环境隔离的库和应用程序。
Pipx 是专门为应用程序安装而设计的,因为它增加了隔离性,但仍然使应用程序可以在外壳中使用: pipx 为每个应用程序及其相关包创建一个隔离的环境。
pipx 从什么地方安装 app
默认情况下,pipx 使用与 pip 相同的包索引 PyPI。Pipx 还可以从所有其他来源安装 pip can,比如本地目录、 wheel、 git url 等。
Python 和 PyPI 允许开发人员使用“控制台脚本入口点”分发代码。这些入口点允许用户从命令行调用 Python 代码,有效地起到独立应用程序的作用。
Pipx 是一个工具,用于以安全、方便和可靠的方式安装和运行这些数千个包含应用程序的软件包。在某种程度上,它把 pythonpackageindex (PyPI)变成了 Python 应用程序的大型应用程序商店。并不是所有的 Python 包都有入口点,但是很多都有。