Python 项目管理
奇奇怪怪
安全小技巧
新的一天开始了
剪刀石头布,哈,我又赢了
2024
02-20
前言
简介
依赖包
Python的依赖包是指在Python生态系统中,开发者可以通过软件仓库来获取和安装的第三方模块或库。这些依赖包是由Python社区的开发者们开发和维护的,用于扩展Python的功能和提供各种功能和工具。在一个使用python开发的项目中,需要先安装相关依赖包才可以运行。
项目文件
在一个 python 项目中,可能会存在着,
requirements.txt
,setup.py
,Pipfile
和Pipfile.lock
,**poetry.lock
** 等等文件,这些都是定义当前项目所需要的依赖包的相关文件,用于确定当前项目运行、测试等等所需要的依赖包
requirements.txt
requirements.txt
是一个在python项目中常见的文本文件,用于列出项目所依赖的具体Python库及其版本号。
例如:
1 | SomeProject |
虚拟环境
Python 虚拟环境是一种用于隔离Python项目的方式,创建一个独立的Python环境,使得每个项目都可以拥有自己的依赖库和运行环境、程序版本,而不会相互干扰。从而不会导致多个项目之间因为依赖版本问题导致运行错误等等。所以在使用python时,可以为每个项目设置一个虚拟环境。物理环境则相反。
Pip
安装
- 安装
python
后也包含了pip
。关于 python 的安装方法 - windows:使用系统上的微软商店安装,搜索python,选择版本,点击安装,会自动配置好环境变量等环境。也可使用包管理器安装
- linux:使用包管理器安装
- mac:使用包管理器安装
使用
- 升级
python -m pip install --upgrade pip
- 安装软件包
1 | python -m pip install SomePackage |
- 卸载软件包
1 | 卸载指定软件包 |
- 常用功能
1 | python -m pip list 列出所有 |
- 配置
1 | 配置默认pypi镜像地址,解决可能会存在的网络问题 |
总结
pip 是 python 默认的包管理器,使用广泛,但是在python的完整工作流中,功能单一不全,无环境隔离等功能,适合临时使用。
Pipx
安装 pipx
- 使用pip安装pipx,
pip install --user pipx
- 添加环境变量保证可以直接运行
python -m pipx ensurepath
升级 pipx
python3 -m pip install --user -U pipx
|| -U 就是 - -upgrade
使用
- 使用 pipx 安装python包
1 | pipx install PACKAGE 安装指定包 |
- 或者,您可以在不安装程序的情况下运行它:
1 | pipx run pycowsay moooo! |
- 列出安装的包
1 | pipx list |
- 更新包
1 | pipx upgrade package 更新指定包 |
- 删除包
1 | pipx uninstall package 删除指定包 |
- pipx runpip
1 | 从虚拟环境中运行pip命令 |
总结
pipx 仅用于应用程序使用:您可以使用它安装 CLI 应用程序。所以使用场景仅仅是用它来安装使用一些python应用程序,pipx会自动隔离它们。并不作为项目环境,依赖管理,版本控制等使用场景。
Pipenv
功能特点
- 您不再需要单独使用
pip
和virtualenv
:它们协同工作。 - 管理虚拟环境以及依赖包
安装
pip install --user pipenv
使用 pip 安装。
常用功能
Pipfile.lock
替换了大多数 Python 项目中使用的requirements.txt
文件,并增加了跟踪上次锁定的包哈希的安全优势。此文件通过锁定操作自动管理。应将Pipfile
和Pipfile.lock
添加到项目的源代码管理中。pipenv install -r path/to/requirements.txt
从requirements.txt
导入包到pipfile
pipenv requirements
从pipfile
文件中生成requirements.txt
输出
参数选项
--where
输出项目环境物理路径--venv
输出虚拟环境路径--py
输出虚拟环境下 python 可执行文件路径--envs
输出环境变量选项--rm
删除当前目录下的虚拟环境--support
输出pipfile.lock
文件内容--site-packages / --no-site-packages
开启虚拟环境下的site-packages
1 | 操作系统接口的特定于平台的 Python 绑定通常只能通过系统包管理器使用,因此无法安装到具有 pip 的虚拟环境中。在这些情况下,可以创建具有系统 site-packages 目录访问权限的虚拟环境: |
--python
指定 python 版本号--clear
清除 pip pipenv 的缓存文件-q, --quiet
安静模式--pypi-mirror
设置软件包源pipenv check
检查 PyUp Safety 安全漏洞以及 Pipfile 中提供的 PEP 508 标记。pipenv clean [OPTIONS]
卸载 Pipfile.lock 中未指定的所有包。pipenv graph [OPTIONS]
显示当前安装的依赖项关系图信息。pipenv install [OPTIONS] [PACKAGES]…
安装提供的包并将它们添加到 Pipfile,或者(如果没有提供包),从 Pipfile 安装所有包。
1 | pipenv install --dev 从Pipfile安装开发包类别和默认包类别 |
pipenv lock [OPTIONS]
生成 Pipfile.lock。pipenv open [OPTIONS] MODULE
在编辑器中查看给定的模块。pipenv requirements [OPTIONS]
从 Pipfile.lock 生成 requirements.txt。
1 | pipenv requirements --dev 包含dev包 |
pipenv run [OPTIONS] COMMAND [ARGS]…
运行一个安装在 virtualenv 中的命令。
1 | pipenv run pip freeze 输出 requirements.txt 列表 |
pipenv shell [OPTIONS] [SHELL_ARGS]...
在 virtualenv 中生成一个 shell。pipenv sync [OPTIONS]
安装 Pipfile.lock 中指定的所有包。pipenv uninstall [OPTIONS] [PACKAGES]…
卸载提供的包并将其从 Pipfile 中删除。
1 | pipenv uninstall --all 删除虚拟环境中的所有包,但不删除pipfile 文件 |
pipenv update [OPTIONS] [PACKAGES]…
在未指定包或升级时运行锁定,然后进行同步。pipenv upgrade [OPTIONS] [PACKAGES]…
解析提供的包并将它们添加到 Pipfile,或者(如果没有给出包),将结果合并到 Pipfile.lockpipenv verify [OPTIONS]
验证 Pipfile.lock 中的哈希值是否为最新。
工作流程
cd myproject
进入项目文件夹pipenv sync
如果有pipfile文件,从pipfile文件安装包pipenv install <package>
安装包,将包添加到pipfile文件中pipenv install --dev
安装所有包,以及dev包pipenv update
更新所有包pipenv upgrade <package>
指定包更新pipenv shell
进入虚拟环境交互式shell
总结
pipenv 简洁易用,对于需要快速部署环境隔离,项目运行部署,pipenv是一个不错的选择,pipenv拥有版本控制,环境隔离,依赖安装等等功能。使用场景,当前有一个python项目需要测试运行,需要使用到隔离环境,安装依赖,pipenv是可以说最快速的一个方案。
Conda
安装
conda 的安装包分为两种 Miniconda 和 Anaconda。根据自己需求选择包安装。
Miniconda 是 Anaconda 提供的最小安装程序。如果您想自己安装大多数软件包,请使用此安装程序。
Anaconda Distribution 是一个功能齐全的安装程序,带有一套用于数据科学的软件包,以及 Anaconda Navigator,一个用于处理 conda 环境的 GUI 应用程序。
- windows安装:https://docs.conda.io/projects/miniconda/en/latest/ 下载适用于系统版本包
- mac 安装:使用包管理器安装,如 brew
- linux 安装:使用对应发行版包管理器安装,如 pacman
打开命令行执行命令验证是否安装成功:
conda --version
使用
conda --version
查看conda信息conda update conda
更新condaconda --help
查看帮助信息conda create -h
指定命令查看帮助信息conda info --verbose
显示conda所有信息
环境管理
conda create --name <my-env>
创建环境conda create -n myenv python=3.9
指定python版本创建conda create -n myenv scipy
指定特定软件包创建conda create -n myenv scipy=0.17.3
指定特点版本软件包创建conda create -n myenv python=3.9 scipy=0.17.3 astroid babel
指定python 版本,软件包版本创建conda run -n my-python-env python --version
使用conda环境运行软件包conda install -n myenv pip
在环境中使用pip,应该在conda确实没有包安装的时候才使用pip
1 | Pip 应该运行( --upgrade-strategy only-if-needed 默认值)。 |
.condarc
这个配置文件存在每次创建环境自动安装的软件包,可以修改添加删除
conda create --no-default-packages -n myenv python
指定--no-default-packages
选项表示不安装 .condarc
文件中的包
conda create --name myclone --clone myenv
复制一个存在的环境conda activate myenv
激活环境,指定环境名称或者路径conda deactivate
停用环境conda env list
环境列表conda list
列出环境中的软件包conda env config vars list
列出环境变量conda env config vars set my_var=value
设置环境变量,设置环境变量后需要重新激活环境conda env config vars unset my_var -n test-env
取消设置环境变量conda env export > environment.yml
导出环境
还原环境
conda list --revisions
列出历史环境conda install --revision=REVNUM
指定历史环境还原conda remove --name myenv --all
删除环境
软件包管理
conda config --add channels conda-forge
conda config --set channel_priority strict
☺️ 添加conda-forge通道的软件包,里面包含除了默认仓库的大量软件包
conda search scipy
搜索指定软件包conda install --name myenv scipy
安装指定软件包到指定环境conda install scipy
安装到当前环境conda install scipy=0.15.0
指定版本号conda install scipy curl
一次安装多个
如果某个包无法从 conda 或 Anaconda.org 获得,您可以通过 conda-forge 或其他包管理器(如 pip)找到并安装该包。
conda install pip
在当前环境安装 pip 集成使用
conda config --set pip_interop_enabled True
提高与 pip 的互操作性#,通过这种互操作性,conda 可以使用 pip-installed 包来满足依赖项,干净地删除 pip-installed 的软件,并在适当的时候用 conda 包替换它们。
conda search package_name --info
列出包依赖conda update biopython
更新指定软件包conda update python
更新环境中的pythonconda update conda
更新conda本身conda update --update-all
更新环境中所有已安装的软件包。conda update --force-reinstall
确保卸载并重新安装当前操作的任何用户请求的包,即使该包已存在于环境中。conda update numpy --no-pin
跳过版本限制更新包conda config --add create_default_packages PACKAGENAME1 PACKAGENAME2
添加默认软件包,创建新环境,默认软件包将安装在所有环境中。也可以编辑.condarc
文件conda remove -n myenv scipy
指定包删除conda remove scipy
删除当前环境中的指定包conda remove scipy curl
删除多个包conda clean --all
删除索引缓存、锁定文件、未使用的缓存包、压缩包和日志文件。conda list
列出当前环境安装的所有包conda list -n myenv
列出指定环境名称的所有包
python 管理
conda search python
搜索可用的python包conda update python
更新pythonconda install python=3.10
安装指定版本
environment.yaml 文件
例如
1 | name: my-project |
- Name : 环境名称指定
- Channels: 软件包渠道,可指定,
defaults
,conda-forge
或bioconda
等等。
官方Channels由Anaconda公司维护,包括:
- defaults:默认的Channel,包含Anaconda公司提供的核心包和工具。
- conda-forge:由社区维护的Channel,包含丰富的包和工具,包括许多最新版本的软件。
- bioconda:专门用于生物信息学相关包的Channel。
- conda-envs:专门用于为特定项目创建虚拟环境的Channel。
可自行选择到各大镜像站选择 channels (软件仓库)
- Dependencies: 指定依赖包,如python,pip等等。
conda env create --file environment.yml
随后指定项目文件创建环境,conda env update --file environment.yml
修改文件后,指定项目文件更新
conda配置文件 .condarc
conda config --show
显示计算和编译的配置值。未给出参数,则显示所有配置值的信息。conda config --describe
列出所有配置文件信息,可配置选项。conda config --get
获取所有配置信息conda config --get channels
指定配置获取conda config --show-sources
显示所有配置文件源及其内容conda config --add channels http://conda.anaconda.org/mutirri
添加配置conda config --remove channels http://conda.anaconda.org/mutirri
删除配置conda config --remove-key channels
删除某个键值
示例文件
下面命令可列出所有配置文件信息
conda config --describe
列出所有配置文件信息,可配置选项。
1 | # This is a sample .condarc file. |
可选优化
libmamba solver
conda install -n base conda-libmamba-solver
- 然后添加到
solver: libmamba
到~/.condarc
1 | ~/.condarc |
总结
conda 是一个成熟的 python 项目管理的工具,conda 的优势在于其跨平台性、语言无关性和环境管理功能。带有版本控制,环境隔离,依赖包管理,软件包管理等等功能,对数据科学相关工作的用户尤其友好,conda 在数据科学、机器学习、人工智能等领域得到广泛应用。
Poetry
安装
pipx install poetry
安装pipx install poetry==1.2.0
指定版本安装pipx upgrade poetry
更新pipx uninstall poetry
卸载
执行
poetry -V
或者poetry about
查看版本信息,全局信息,验证是否安装成功。
管理 poetry 安装本身
poetry search poetry-plug
搜索插件poetry self add poetry-plugin-export
安装插件poetry self add poetry-core@latest
更新到最新版本poetry-core
poetry self add artifacts-keyring
添加密钥环提供程序artifacts-keyring
poetry self update
在其当前运行时环境中更新 Poetry 版本。poetry self lock
锁定 poetry 本身的依赖到poetry.lock
文件poetry self show
查看 poetry本身poetry self show plugins
显示本身插件poetry self remove poetry-plugin-export
删除插件poetry self install --sync
针对 poetry 本身安装
使用
全局选项
--verbose (-v|vv|vvv)
:增加消息的详细程度:“-v”表示正常输出,“-vv”表示更详细的输出,“-vvv”表示调试。--help (-h)
:显示帮助信息。--quiet (-q)
:不输出任何消息。--ansi
:强制 ANSI 输出。--ansi
:强制 ANSI 输出。--version (-V)
:显示此应用程序版本。--no-interaction (-n)
:不要问任何互动性问题。--no-plugins
:禁用插件。--no-cache
:禁用诗歌源缓存。--directory=DIRECTORY (-C)
:Poetry 命令的工作目录(默认为当前工作目录)。
创建新项目
poetry new poetry-demo
创建一个项目,指定名称为poetry-demo
,可随意,项目文件包含以下内容。
1 | poetry-demo |
pyproject.toml
文件
pyproject.toml
文件是这里最重要的。这将协调您的项目及其依赖项。目前,它看起来像这样:
1 | [tool.poetry] |
初始化已存在项目
- Poetry 可用于“初始化”预填充的目录,而不是创建新项目。进入项目目录
poetry init
执行后交互式创建
安装依赖项
poetry install
该命令通过读取pyproject.toml
文件中的依赖包列表进行依赖安装。会有以下两种情况。- 第一种情况:项目中没有
poetry.lock
文件,会自动在项目中生成**poetry.lock
** 文件,Poetry 只需解析pyproject.toml
文件中列出的所有依赖项并下载其文件的最新版本。当 Poetry 完成安装后,它会将下载的所有包及其确切版本写入poetry.lock
文件,并将项目锁定到这些特定版本。应将poetry.lock
文件提交到项目存储库,以便所有处理该项目的人员都锁定到相同版本的依赖项。 - 第二种情况:已经存在**
poetry.lock
**文件以及pyproject.toml
,运行install
会解析安装该文件列出的所有依赖包, - 作为应用程序开发人员应该将该两个文件提交到项目中确保能构建同样的依赖环境。作为库开发人员应该省略
poetry.lock
文件
添加安装依赖
$ poetry add pendulum
该命令会将指定依赖软件包添加到pyproject.toml
文件和poetry.lock
文件中,并安装该软件包。
依赖包更新
poetry.lock
文件阻止您自动获取最新版本的依赖包。 要更新到最新版本,请使用update
命令。 这将根据pyproject.toml文件
获取最新的匹配版本,并使用新版本更新锁定文件(poetry.lock
)。 (这相当于删除poetry.lock
文件并再次运行install
。)poetry update
poetry update requests toml
指定包更新- 该更新命令并不会修改
pyproject.toml
文件,依然按照文件内容更新,可以使用add
更新
依赖包删除
poetry remove pendulum
指定包删除poetry remove mkdocs --group docs
指定依赖组删除指定包
虚拟环境
- 默认情况下,新建项目或者初始化项目都会建立虚拟隔离环境
- 激活虚拟环境的最简单方法是使用
poetry shell
创建嵌套 shell。测试环境时需先激活 poetry run python -V
该 run 命令在项目的 virtualenv 中执行给定的命令。poetry cache list
列出缓存poetry cache clear pypi --all
删除缓存poetry env use /full/path/to/python
使用环境,poetry env info
查看环境信息poetry env info --path
指定目标查看环境信息poetry env list
列出环境poetry env list --full-path
列出完整路径环境poetry env remove /full/path/to/python
删除环境poetry env remove --all
删除全部环境
执行脚本
- 要运行脚本,只需使用
poetry run python your_script.py
.同样,如果您有命令行工具,例如pytest
orblack
,则可以使用poetry run pytest
.
依赖包搜索
poetry search requests pendulum
搜索指定包
软件仓库
poetry source add pypi-test https://test.pypi.org/simple/
添加pypi-test
源poetry source show
显示软件源信息poetry source show pypi-test
指定名称显示poetry source remove pypi-test
删除源
依赖管理
依赖组
- poetry 提供了可将依赖包分组的功能。用途:例如你的项目中会用到某些包来生成文档等等功能,但是该依赖包并不是项目运行所需要的,所以可以将其分组到其它依赖组中。
- 文件示例:
1 | [tool.poetry.group.test] # This part can be left out |
- 定义dev依赖
1 | [tool.poetry.group.dev.dependencies] |
- 可选组,依赖项组可以声明为可选。有一组仅在特定环境或特定用途中需要的依赖项时,这很有意义。
1 | [tool.poetry.group.docs] |
poetry install --with docs
指定组安装依赖poetry add pytest --group test
指定组添加依赖,如果该组尚不存在,则将自动创建该组。poetry install
默认安装所有组依赖poetry install --without test,docs
指定排除组依赖安装poetry install --only docs
仅安装指定依赖poetry install --only main
仅安装项目运行依赖poetry remove mkdocs --group docs
从组中删除依赖poetry install --sync
同步依赖项,依赖项同步可确保poetry.lock
文件中锁定的依赖项是环境中唯一存在的依赖项,从而删除任何不必要的内容。
1 | poetry install --without dev --sync |
add
命令将所需的软件包添加到您的pyproject.toml
并安装它们。如果不指定版本约束,poetry 会根据可用的包版本选择合适的版本。
poetry add requests pendulum
将包添加到pyproject.toml
并安装poetry add "pendulum>=2.0.5"
指定版本poetry add git+https://github.com/sdispater/pendulum.git
指定gitpoetry add ./my-package/
poetry add ../my-package/dist/my_package-0.1.0.whl
指定本地目录或文件
信息查询
poetry show
列出所有可用的包,可以使用以下show
命令。poetry show pendulum
指定包列出详细信息poetry config --list
列出配置信息poetry check
该check
命令验证pyproject.toml
文件的内容及其与poetry.lock
文件的一致性。poetry version
显示poetry 版本号poetry about
about
命令显示有关 Poetry 的全局信息,包括当前版本和poetry-core
的版本。poetry help
显示全局帮助信息poetry show --help
显示指定命令帮助信息poetry list
列出所有可用的poetry命令
环境导出
poetry export -f requirements.txt --output requirements.txt
此命令将锁定文件导出为其他格式。--format (-f)
:要导出到的格式(默认值:requirements.txt
)。目前,仅constraints.txt
和requirements.txt
受支持。
项目发布
- Poetry 要求所有项目都符合 PEP 440 标准。
- 可选发布
poetry.lock
文件,不发布可选将起添加到.gitignore
文件(git)
发布到pypi
poetry build
将项目打包,此命令将以两种不同的格式打包库:sdist
是源格式,wheel
是compiled
包格式。- sdist 格式是源代码格式,包含了 Python 源代码、许可证文件、README 文件等。用户需要自行编译 sdist 格式包才能安装使用。需要发布到 PyPI 的 Python 包必须使用 sdist 格式
- wheel 格式是二进制格式,包含了编译好的 Python 代码、依赖库等。用户可以直接安装 wheel 格式包,无需自行编译。
poetry publish
将打包好的包进行发布,需要提前注册用户并且已正确配置凭据。如果要同时生成和发布包,只需传递该--build
选项即可。- api token 注册pypi后账户查看。
- 请注意,建议在将包上传到 PyPI 时使用 API 令牌。创建新令牌后,您可以告诉 Poetry 使用它:
poetry config pypi-token.pypi <my-token>
- 使用密码:
poetry config http-basic.pypi <username> <password>
存储库
poetry source add foo https://pypi.example.org/simple/
添加存储库poetry add --source foo private-package
指定存储库安装包
环境配置
命令配置
poetry config --list
列出当前配置信息poetry config virtualenvs.path
指定值查看配置信息poetry config virtualenvs.path /path/to/cache/directory/virtualenvs
添加或更新配置poetry config virtualenvs.path --unset
删除特定配置
环境变量配置方法
环境变量必须以 POETRY_
设置的大写名称为前缀,并由大写名称组成,点和短划线替换为下划线,下面是一个示例:
但是我这边测试不需要加上 POETRY
前缀,加上识别不了环境变量,可自己环境测试。
export POETRY_VIRTUALENVS_PATH=/path/to/virtualenvs/directory
export POETRY_HTTP_BASIC_MY_REPOSITORY_PASSWORD=secret
项目配置文件 pyproject.toml
配置文件示例:
1 | name = "my-package" // 包名 |
基本工作流(对于测试已存在项目)
例举一个已存在项目的基本测试,配置虚拟环境,到安装依赖的基本流程。
cd
进入项目poetry init -n
初始化项目poetry shell
进入交互式 shell ,会自动建立虚拟隔离环境poetry add $(cat requirements.txt)
安装当前项目依赖poetry run python [yourpyname.py](http://yourpyname.py)
运行项目测试
总结
细心看文章的朋友可能会发现这个工具的介绍比较长,是因为poetry 功能更多,可以实现完整的python 工作流程,无论是对于开发者,还是测试人员,都可以满足其需求。使用场景,需要完整编写一个项目进行测试发布。或是测试一个已经存在的项目。文章前提到过 poetry 可以理解为 pipenv 的超集。那为什么还需要pipenv 呢,因为如果仅仅是用于已存在项目的测试的话,pipenv 可以更加方便的进行测试。大概就是这样了。
Hatch
安装
hatch 的包已经上传 pypi 。可以随意使用 pip,pipx 等等工具安装,也可以选择使用系统的包管理器安装,例如:
pip install hatch
使用 pip 安装pipx install hatch
使用 pipx 安装到隔离环境brew install hatch
使用 brew 安装到 macpacman -S python-hatch
使用 pacman 安装到 arch- 。。。😮
安装完成后命令行执行
hatch --version
验证是否安装成功
使用
全局指令
--verbose
显示详细信息--quiet
安静模式,不显示信息-help
显示帮助信息--version
显示版本信息--config
指定配置文件
新建项目
hatch new "Hatch Demo"
指定名称新建项目- 项目目录结构
1 | hatch-demo |
初始化现有项目
hatch new --init
环境管理
环境旨在为测试项目等提供隔离工作区。
生成 shell 或在 shell 中运行命令将自动触发创建。
在hatch 环境中只需要只用 pip 来安装 依赖包
hatch shell
进入hatch 交互式 shell ,会自动创建隔离环境pip list
显示环境中的包hatch run python -c "import sys;print(sys.executable)”
在 hatch 隔离环境中 使用 run 运行程序hatch env show
显示隔离环境信息hatch env remove 删除单个环境
hatch env prune 删除所有环境
hatch clean
删除生成项目hatch dep show requirements -all
显示环境依赖信息hatch env find
查看虚拟环境路径hatch status
显示有关当前环境的信息。
项目文件
1 | [project] |
命令控制
hatch config set [OPTIONS] KEY [VALUE]
设置配置文件hatch config find
查看配置文件位置hatch config restore
配置文件恢复默认hatch config show -a
显示所有配置信息hatch config update
更新配置文件
依赖管理
- 添加依赖,编写
pyproject.toml
文件,并将其添加到组中dependencies
,例如cowsay: - 下次生成 shell 或运行命令时,将安装此依赖项。
- 例
1 | [project] |
构建发布包
在配置文件中配置构建信息,
hatch build -t wheel
指定格式构建hatch publish
发布包-r
/--repo
指定仓库发布hatch build
将构建 sdist 和 wheel 包hatch build -t wheel
指定包格式构建,例如-t sdist -t wheel
hatch publish
发布包hatch publish /path/to/artifacts foo-1.tar.gz
指定包发布
常用参数
--target
,-t
指定构建格式,例如-t sdist -t wheel
--clean
,-c
构建前清除原有包文件-r
/--repo
选择存储库,默认pypi-u
/--user
,-a
/--auth
设置认证--client-key
配置客户端密钥
版本控制
hatch python install all
在环境中安装所有兼容的python 版本hatch python update all
更新 所有python 版本hatch python find
查看python 二进制文件信息hatch python remove all
删除 python ,所有已安装hatch python show
显示可用python信息
Hatch 常用插件
- https://github.com/repo-helper/hatch-requirements-txt 从
requirements.txt
文件中读取项目依赖项。hatch 可以直接使用虚拟环境中的 pip 安装依赖从requirements.txt
。
基本工作流程
hatch new --init .
创建或初始化项目hatch shell
进入交互式shellpip install -r requirements.txt
安装项目依赖hatch run python [pyfile.py](http://pyfile.py)
测试运行hatch env remove
删除环境
总结
“Hatch 的高级价值主张是,如果一个人采用了所有功能,那么许多其他工具就变得不必要,因为它支持人们可能需要的一切。此外,如果选择仅使用特定功能,那么与替代方案相比仍然有好处“。以上这段话来自hatch 官方,本篇文章介绍了多种关于 python 项目管理的工具,功能相似但却有不同之处,我们不需要思考什么是最好的工具,我们只需要在不同的场景,选择合适的工具。最合适的方案。
Pdm
安装
pipx install pdm
将pdm安装到隔离环境,使用pipxpdm self update
更新 pdm
也可使用其他包管理器安装。
pdm 自身管理
pdm self list
列出关于 pdm 的所有包pdm self add packagename
指定包安装给pdmpdm self remove packagename
删除pdm环境中的包pdm self remove update
更新 pdm 本身
项目管理
pdm init
初始化项目pdm init -n
跳过交互式初始化,使用默认配置pdm lock
:执行 lock任务 ,从pyproject.toml
文件中锁定依赖pdm sync
从锁定文件同步(添加/删除/更新)pdm install
:执行 sync任务,先于 lock如果需要pdm add
:添加依赖包,重新锁定然后同步pdm remove
:删除依赖要求,重新锁定然后同步pdm update
:从最新版本重新锁定依赖项,然后同步pdm use
切换pythonpdm run flask run -p 54321
运行脚本程序等pdm run --list
显示脚本列表pdm fix
根据最新版本的PDM修复项目问题
环境管理
pdm config venv.backend [virtualenv|venv|conda]
. 切换虚拟环境后端pdm venv create 3.8
创建虚拟环境,指定python版本pdm venv create --with venv 3.9
指定后端创建pdm venv list
列出使用该项目创建的所有 virtualenvpdm venv remove for-test
删除虚拟环境pdm venv activate for-test
激活虚拟环境pdm venv purge
清除选定/所有
创建的 Virtualenv环境pdm use --venv test
使用给定的 python 版本或路径作为基本解释器pdm run python -m ensurepip
在项目中安装 pippdm venv create --with-pip 3.9
创建环境是包含 pip
配置管理
pdm config
显示当前配置信息pdm config pypi.url
指定配置显示pdm config pypi.url "https://test.pypi.org/simple"
传递参数修改配置pdm config --local pypi.url "https://test.pypi.org/simple"
修改当前项目配置pdm config pypi.url "https://test.pypi.org/simple"
修改软件仓库pdm config pypi.extra.url "https://extra.pypi.org/simple"
添加额外软件仓库pdm cache clear
清理缓存目录下的所有文件
依赖管理
导入其他依赖文件
-f {pipfile,poetry,flit,setuppy,requirements}, --format {pipfile,poetry,flit,setuppy,requirements}
pdm import
从其他格式导入项目元数据pdm import --format requirements requirements.txt
导入 requirements.txt 文件依赖列表pdm search httpx
搜索软件包pdm show pyasn1-modules
显示指定包信息pdm add requests
添加依赖pdm add requests==2.25.1
指定版本pdm add "flask>=1.0"
指定版本需求pdm add ./sub-package
添加本地依赖,可以是目录和文件,需要以.
开头pdm add "https://github.com/numpy/numpy/releases/download/v1.20.0/numpy-1.20.0.tar.gz"
指定 url 添加依赖pdm add -dG test pytest
通过指定组添加开发依赖pdm add -e ./sub-package --dev
指定 -e 参数添加可编辑依赖pdm update
更新依赖pdm update --update-all
更新所有依赖项和子依赖项pdm update requests
指定依赖包更新pdm update -G security -G http
/pdm update -G "security,http"
指定组更新依赖pdm update -G security cryptography
更新指定组中的指定包依赖pdm update -d
更新开发依赖包pdm update -dG test pytest
更新指定组开发依赖包pdm remove requests
删除依赖pdm remove -G web h11
指定组删除依赖pdm remove -dG test pytest-cov
删除开发依赖,指定组包pdm sync
从锁定文件安装包。--clean
选项,清除不需要的包pdm update
将更新锁定文件,然后sync
.pdm install
将检查项目文件是否有更改,如果需要,更新锁定文件,然后sync
.pdm lock
生成依赖锁定文件pdm lock
-L/--lockfile <filepath>
指定依赖锁定文件pdm install
安装锁定在 lockfile 中的所有组依赖pdm install -G extra1
指定组安装pdm list
列出packages目录中安装的所有软件包pdm list --tree
树形列出pdm export -o requirements.txt
导出依赖包格式
构建发布
pdm publish
将自动构建一个 wheel 包和一个源代码包(sdist),并将它们上传到PyPI索引。pdm publish --repository https://test.pypi.org/legacy/
指定存储库,可以是url也可以是namepdm publish --repository testpypi
指定存储库名称-r
,--repository
:要将包发布到的存储库名称或 url [env var:PDM_PUBLISH_REPO
]-u
,--username
: 访问存储库的用户名 [env var:PDM_PUBLISH_USERNAME
]-P
,--password
: 访问存储库的密码 [env var:PDM_PUBLISH_PASSWORD
]
单独生成发布
pdm build
构建包pdm publish --no-build
发布,因为上一步构建了所以加上--no-build
选项
构建配置,主配置文件中添加内容
- 配置文件配置
1 | [repository.pypi] |
- 命令配置
pdm config repository.pypi.username "**token**"
pdm config repository.pypi.password "my-pypi-token"
pdm config repository.company.url "https://pypi.company.org/legacy/"
pdm config repository.company.ca_certs "/path/to/custom-cacerts.pem"
全局选项
-h
、--help
:显示此帮助消息并退出。-V
,--version
: 显示版本-c
,--config
: 指定另一个配置文件路径 [env var:PDM_CONFIG_FILE
]-v
、--verbose
:用于-v
详细输出和-vv
更详细-q
,--quiet
:安静模式,不输出信息
插件
- https://github.com/pdm-project/awesome-pdm 关于 pdm 的插件列表
总结
功能强大,完善,适用于任何使用场景。与其他管理器相比,PDM 并没有被和一个特定的构建后端绑定,你可以选择任何你喜欢的构建后端。跨平台,使用简单,现代的,旨在成为下一代 Python 软件包管理工具,python项目管理器。
Rye
管理 Rye
统一安装
- https://github.com/mitsuhiko/rye/releases 下载对应系统包进行安装。
cargo install --git https://github.com/mitsuhiko/rye rye
编译安装,因为Rye 是使用 rust 写的,所以可以用 cargo (rust 包管理器
) 进行安装。- 以上两种方式是针对所有系统的安装方式,下面介绍单独的安装方式
针对系统安装
- Linux :
curl -sSf https://rye-up.com/get | bash
使用官方脚本进行安装。
也可以使用特定 Linux 发行版自己的包管理器进行安装,例如:sudo pacman -S rye
- mac OS:
curl -sSf https://rye-up.com/get | bash
,使用官方脚本进行安装,也可以使用包管理器进行安装,brew install
- Windows: 使用上述介绍的统一安装方式安装。
更新 Rye
rye self update
卸载 Rye
rye self uninstall
基本使用
项目管理
rye init my-project
创建一个新项目rye init
或进入目录,初始化存在项目rye init -r requirements.txt
初始化项目,从requirements.txt
文件中导入依赖- 目录结构
1 | . |
初始化同步
rye pin 3.10
可选指定版本,默认最新稳定版rye sync
同步项目,会在项目目录中建立virtualenv隔离文件夹,.venv
,也会自动下载兼容的 python 解释器,生成requirements.lock
requirements-dev.lock
。以及根据项目文件安装依赖
激活环境
rye shell
shell 生成一个激活 virtualenv 的 shell.。推荐方式. .venv/bin/activate
标准激活环境方式deactivate
退出环境python -c "import sys; print(sys.prefix)"
查看python 可执行文件路径,确定隔离环境是否激活rye run black
隔离环境运行程序
依赖管理
rye add "flask>=2.0"
指定依赖添加,并不会安装rye sync
重新同步安装依赖rye remove flask
删除依赖
环境管理
Rye 支持三种 python ,CPython,PyPy,自定义本地。
rye pin cpython@3.11.4
指定使用 cpython 版本rye pin pypy
指定使用 pypyrye toolchain list
列出 python 工具链rye toolchain list --include-downloadable
查看可选安装的工具链列表rye toolchain fetch pypy@3.10.12
安装工具链,不指定安装会默认安装rye toolchain register /path/to/python
使用外部python 作为工具链rye toolchain register --name=custom /path/to/python
指定名称,路径rye toolchain remove cpython@3.8.5
删除工具链
全局工具安装
rye install ruff
安装全局工具rye install black --features colorama
安装全局工具,传递额外依赖功能rye tools list
列出安装工具rye tools list --include-scripts
查看工具提供了什么脚本rye uninstall black
删除工具
信息查看
rye show
显示当前环境信息rye show --installed-deps
显示环境安装依赖rye --version
显示rye 版本rye help
显示帮助信息rye command -h
显示命令帮助信息
依赖管理
requirements.lock
和requirements-dev.lock
是rye项目的依赖锁定文件,pyproject.toml
文件为项目配置文件,除了存储当前项目配置信息,里面还有依赖配置信息
rye add Flask
添加依赖rye add "Flask>=2.0"
指定版本添加rye add "Flask[dotenv]"
添加额外依赖rye add --dev black
添加开发依赖rye add Flask --git=https://github.com/pallets/flask
添加git依赖rye add My-Utility --path ./my-utility
添加本地依赖rye sync
更新 lockfiles 以及 virtualenvrye lock
只更新锁定文件rye lock --update-all
更新所有依赖到最新合适版本,没有这个标志
仅在必要时才会更新依赖项。rye lock --all-features
额外依赖rye sync --no-lock
不执行锁定步骤rye sync --no-dev
不同步开发
构建发布
rye build
默认情况下,rye
将在中构建 sdist 和 Wheel 目标dist
目录。rye build --wheel --out target
使用--sdist
或者--wheel
标志来构建特定目标,或指定输出目录--out
.rye build --clean
构建之前清理构建目录rye publish
默认情况下,Rye 会将dist
目录下的分发文件发布到 PyPI 中。rye publish dist/example-0.1.0.tar.gz
指定文件发布rye publish --repository testpypi --repository-url https://test.pypi.org/legacy/
指定存储库rye publish --token <your_token> --yes
指定 token ,自动确认
总结
这是本文章介绍的最后一款关于 python 项目管理的工具,本身也是一款功能完整的工具,和文章上述提到的pdm ,poetry ,hatch等等相似,都具有项目管理,版本控制,依赖管理,环境隔离等功能,几款工具有一些细微的差别,但都是非常优秀的 python 项目管理工具。大家可根据自己的爱好,习惯以及使用场景来选择合适的工具
🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦🐦
总结
参考地址
- https://packaging.python.org/en/latest/key_projects/#project-summaries
- https://pypi.org/help/#installing
- https://pip.pypa.io/en/stable/
- https://pipx.pypa.io/stable/
- https://wiki.archlinux.org/title/Conda
- https://docs.conda.io
- https://python-poetry.org/docs/
- https://hatch.pypa.io
- https://github.com/pypa/hatch
- https://github.com/pdm-project/pdm
- https://pdm-project.org/latest/
- https://github.com/mitsuhiko/rye
- https://rye-up.com/
Over 。 。 。 。
🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱
啊,再见了,再见了,哈
我们会再见的对么
再见你要幸福
燕子,燕子