前言
简介
依赖包
Python 的依赖包是指在 Python 生态系统中,开发者可以通过软件仓库来获取和安装的第三方模块或库。这些依赖包是由 Python 社区的开发者们开发和维护的,用于扩展 Python 的功能和提供各种功能和工具。在一个使用 python 开发的项目中,需要先安装相关依赖包才可以运行。
项目文件
在一个 python 项目中,可能会存在着,
requirements.txt
,setup.py
,Pipfile
和Pipfile.lock
,poetry.lock
等等文件,这些都是定义当前项目所需要的依赖包的相关文件,用于确定当前项目运行、测试等等所需要的依赖包
requirements.txt
requirements.txt
是一个在 python 项目中常见的文本文件,用于列出项目所依赖的具体 Python 库及其版本号。
例如:
SomeProject
SomeProject == 1.3
SomeProject >= 1.2, < 2.0
SomeProject[foo, bar]
SomeProject ~= 1.4.2
SomeProject == 5.4 ; python_version < '3.8'
SomeProject ; sys_platform == 'win32'
requests [security] >= 2.8.1, == 2.8.* ; python_version < "2.7"
虚拟环境
Python 虚拟环境是一种用于隔离 Python 项目的方式,创建一个独立的 Python 环境,使得每个项目都可以拥有自己的依赖库和运行环境、程序版本,而不会相互干扰。从而不会导致多个项目之间因为依赖版本问题导致运行错误等等。所以在使用 python 时,可以为每个项目设置一个虚拟环境。物理环境则相反。
Pip
安装
-
安装 python
后也包含了pip
。关于 python 的安装方法 -
windows:使用系统上的微软商店安装,搜索 python,选择版本,点击安装,会自动配置好环境变量等环境。也可使用包管理器安装 -
linux:使用包管理器安装 -
mac:使用包管理器安装
使用
-
升级 python -m pip install --upgrade pip
-
安装软件包
python -m pip install SomePackage
python -m pip install SomePackage==1.0.4
python -m pip install 'SomePackage>=1.0.4'
**项目文件中存在 requirements.txt 文件,以下命令安装该项目声明的所有依赖
python -m pip install -r requirements.txt
使用freeze命令根据当前文件夹生成requirements.txt
python -m pip freeze > requirements.txt**
指定包升级
python -m pip install --upgrade PackageName
升级所有
python -m pip install --upgrade
在“可编辑”模式下安装本地项目。方便本地调试修改包测试
python -m pip install -e . # 本地目录安装包
python -m pip install -e path/to/project # 指定目录安装包
指定软件仓库镜像地址安装包
python -m pip install --index-url http://my.package.repo/simple/ PackageName
要列出已安装的软件包:
python -m pip list
要显示有关已安装软件包的详细信息,请执行以下操作:
python -m pip show sphinx
用户安装,将包安装到用户特定的目录,实现与全局包隔离不冲突
python -m pip install --user SomePackage
-
卸载软件包
卸载指定软件包
python -m pip uninstall simplejson
卸载requirements.txt 文件中列出的软件包
python -m pip uninstall -r requirements.txt
-
常用功能
python -m pip list 列出所有
显示有关一个或多个已安装软件包的信息。
python -m pip show sphinx
生成需求文件
python -m pip freeze > requirements.txt
根据需求(及其所有依赖项)构建python包,然后安装
python -m pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
python -m pip install --no-index --find-links=/tmp/wheelhouse SomePackage
-
配置
配置默认pypi镜像地址,解决可能会存在的网络问题
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
总结
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 包
pipx install PACKAGE 安装指定包
pipx reinstall-all 重新安装已经安装的所有包
-
或者,您可以在不安装程序的情况下运行它:
pipx run pycowsay moooo!
可以运行本地文件,以及远程仓库软件包
-
列出安装的包
pipx list
-
更新包
pipx upgrade package 更新指定包
pipx upgrade-all 更新所有包
-
删除包
pipx uninstall package 删除指定包
pipx uninstall-all 删除所有包
-
pipx runpip
从虚拟环境中运行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
操作系统接口的特定于平台的 Python 绑定通常只能通过系统包管理器使用,因此无法安装到具有 pip 的虚拟环境中。在这些情况下,可以创建具有系统 site-packages 目录访问权限的虚拟环境:
$ pipenv --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 安装所有包。
pipenv install --dev 从Pipfile安装开发包类别和默认包类别
-
pipenv lock [OPTIONS]
生成 Pipfile.lock。 -
pipenv open [OPTIONS] MODULE
在编辑器中查看给定的模块。 -
pipenv requirements [OPTIONS]
从 Pipfile.lock 生成 requirements.txt。
pipenv requirements --dev 包含dev包
pipenv requirements > requirements.txt
-
pipenv run [OPTIONS] COMMAND [ARGS]…
运行一个安装在 virtualenv 中的命令。
pipenv run pip freeze 输出 requirements.txt 列表
-
pipenv shell [OPTIONS] [SHELL_ARGS]...
在 virtualenv 中生成一个 shell。 -
pipenv sync [OPTIONS]
安装 Pipfile.lock 中指定的所有包。 -
pipenv uninstall [OPTIONS] [PACKAGES]…
卸载提供的包并将其从 Pipfile 中删除。
pipenv uninstall --all 删除虚拟环境中的所有包,但不删除pipfile 文件
pipenv uninstall --all-dev 从虚拟环境中删除所有开发包,并删除pipfile文件
-
pipenv update [OPTIONS] [PACKAGES]…
在未指定包或升级时运行锁定,然后进行同步。 -
pipenv upgrade [OPTIONS] [PACKAGES]…
解析提供的包并将它们添加到 Pipfile,或者(如果没有给出包),将结果合并到 Pipfile.lock -
pipenv 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
更新 conda -
conda --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
Pip 应该运行( --upgrade-strategy only-if-needed 默认值)。
不要将 pip 与 --user 参数一起使用,避免所有用户安装。
.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
更新环境中的 python -
conda 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
更新 python -
conda install python=3.10
安装指定版本
environment.yaml 文件
例如
name: my-project
channels:
- defaults
dependencies:
- python
-
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
列出所有配置文件信息,可配置选项。
# This is a sample .condarc file.
# It adds the r Anaconda.org channel and enables
# the show_channel_urls option.
# channel locations. These override conda defaults, i.e., conda will
# search *only* the channels listed here, in the order given.
# Use "defaults" to automatically include all default channels.
# Non-url channels will be interpreted as Anaconda.org usernames
# (this can be changed by modifying the channel_alias key; see below).
# The default is just 'defaults'.
channels:
- r
- defaults
# Show channel URLs when displaying what is going to be downloaded
# and in 'conda list'. The default is False.
show_channel_urls: True
# For more information about this file see:
# https://conda.io/docs/user-guide/configuration/use-condarc.html
可选优化
libmamba solver
-
conda install -n base conda-libmamba-solver
-
然后添加到 solver: libmamba
到~/.condarc
~/.condarc
...
solver: libmamba
总结
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
,可随意,项目文件包含以下内容。
poetry-demo
├── pyproject.toml
├── README.md
├── poetry_demo
│ └── __init__.py
└── tests
└── __init__.py
pyproject.toml
文件
pyproject.toml
文件是这里最重要的。这将协调您的项目及其依赖项。目前,它看起来像这样:
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["Sébastien Eustace <[email protected]>"]
readme = "README.md"
packages = [{include = "poetry_demo"}]
[tool.poetry.dependencies]
python = "^3.7"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
初始化已存在项目
-
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 提供了可将依赖包分组的功能。用途:例如你的项目中会用到某些包来生成文档等等功能,但是该依赖包并不是项目运行所需要的,所以可以将其分组到其它依赖组中。 -
文件示例:
[tool.poetry.group.test] # This part can be left out
[tool.poetry.group.test.dependencies]
pytest = "^6.0.0"
pytest-mock = "*"
-
定义 dev 依赖
[tool.poetry.group.dev.dependencies]
pytest = "^6.0.0"
pytest-mock = "*"
-
可选组,依赖项组可以声明为可选。有一组仅在特定环境或特定用途中需要的依赖项时,这很有意义。
[tool.poetry.group.docs]
optional = true
[tool.poetry.group.docs.dependencies]
mkdocs = "*"
-
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
文件中锁定的依赖项是环境中唯一存在的依赖项,从而删除任何不必要的内容。
poetry install --without dev --sync
poetry install --with docs --sync
poetry install --only dev
可组合使用
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
指定 git -
poetry 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
配置文件示例:
name = "my-package" // 包名
version = "0.1.0" // 版本
description = "A short description of the package." // 描述
license = "MIT" // 许可证
authors = [
"Sébastien Eustace <[email protected]>",
] // 作者
maintainers = [
"John Smith <[email protected]>",
"Jane Smith <[email protected]>",
] //维护者
[tool.poetry]
# ...
readme = ["docs/README1.md", "docs/README2.md"] // 自述文件
homepage = "https://python-poetry.org/" // 项目主页网站
repository = "https://github.com/python-poetry/poetry" //存储库
documentation = "https://python-poetry.org/docs/" // 文档
keywords = ["packaging", "poetry"] // 关键字
[tool.poetry]
# ...
classifiers = [
"Topic :: Software Development :: Build Tools",
"Topic :: Software Development :: Libraries :: Python Modules"
] // 分类
[tool.poetry]
# ...
packages = [
{ include = "my_package" },
{ include = "extra_package/**/*.py" },
] //要包含在最终发行版中的包和模块的列表。
[tool.poetry.dependencies]
requests = "^2.13.0" // pypi 中的依赖指定
[[tool.poetry.source]]
name = "private"
url = "http://example.com/simple" // 其他存储库依赖指定
[tool.poetry.dependencies]
requests = { version = "^2.13.0", source = "private" } // 指定依赖存储库
[tool.poetry.dependencies]
python = "^3.7" // 声明 python 版本
基本工作流(对于测试已存在项目)
例举一个已存在项目的基本测试,配置虚拟环境,到安装依赖的基本流程。
-
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 安装到 mac -
pacman -S python-hatch
使用 pacman 安装到 arch -
。。。😮
安装完成后命令行执行
hatch --version
验证是否安装成功
使用
全局指令
-
--verbose
显示详细信息 -
--quiet
安静模式,不显示信息 -
-help
显示帮助信息 -
--version
显示版本信息 -
--config
指定配置文件
新建项目
-
hatch new "Hatch Demo"
指定名称新建项目 -
项目目录结构
hatch-demo
├── src
│ └── hatch_demo
│ ├── __about__.py
│ └── __init__.py
├── tests
│ └── __init__.py
├── LICENSE.txt
├── README.md
└── pyproject.toml
初始化现有项目
-
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
显示有关当前环境的信息。
项目文件
[project]
name = "your-app" //项目名称
dynamic = ["version"] // 版本
description = '...' // 描述信息
readme = "README.md" // 自述文件
requires-python = ">=3.8" // python 版本
license = "Apache-2.0 OR MIT"// 许可证
keywords = [
"...",
] // 关键字
classifiers = [
"...",
] // 分类信息
[project.urls]
Documentation = "..."
"Source code" = "..." // url信息
dependencies = [
"...",
] // 依赖信息
命令控制
-
hatch config set [OPTIONS] KEY [VALUE]
设置配置文件 -
hatch config find
查看配置文件位置 -
hatch config restore
配置文件恢复默认 -
hatch config show -a
显示所有配置信息 -
hatch config update
更新配置文件
依赖管理
-
添加依赖,编写 pyproject.toml
文件,并将其添加到组中dependencies
,例如 cowsay: -
下次生成 shell 或运行命令时,将安装此依赖项。 -
例
[project]
...
dependencies = [
"cryptography",
"click>=7, <9, != 8.0.0",
"python-dateutil==2.8.*",
"numpy~=1.21.4",
]
构建发布包
在配置文件中配置构建信息,
-
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
进入交互式 shell -
pip install -r requirements.txt
安装项目依赖 -
hatch run python [pyfile.py](http://pyfile.py)
测试运行 -
hatch env remove
删除环境
总结
“Hatch 的高级价值主张是,如果一个人采用了所有功能,那么许多其他工具就变得不必要,因为它支持人们可能需要的一切。此外,如果选择仅使用特定功能,那么与替代方案相比仍然有好处“。以上这段话来自 hatch 官方,本篇文章介绍了多种关于 python 项目管理的工具,功能相似但却有不同之处,我们不需要思考什么是最好的工具,我们只需要在不同的场景,选择合适的工具。最合适的方案。
Pdm
安装
-
pipx install pdm
将 pdm 安装到隔离环境,使用 pipx -
pdm self update
更新 pdm
也可使用其他包管理器安装。
pdm 自身管理
-
pdm self list
列出关于 pdm 的所有包 -
pdm self add packagename
指定包安装给 pdm -
pdm 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
切换 python -
pdm 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
列出使用该项目创建的所有 virtualenv -
pdm venv remove for-test
删除虚拟环境 -
pdm venv activate for-test
激活虚拟环境 -
pdm venv purge
清除选定/所有
创建的 Virtualenv 环境 -
pdm use --venv test
使用给定的 python 版本或路径作为基本解释器 -
pdm run python -m ensurepip
在项目中安装 pip -
pdm 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 也可以是 name -
pdm 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
选项
构建配置,主配置文件中添加内容
-
配置文件配置
[repository.pypi]
username = "frostming"
password = "<secret>"
[repository.company]
url = "https://pypi.company.org/legacy/"
username = "frostming"
password = "<secret>"
ca_certs = "/path/to/custom-cacerts.pem"
或者设置环境变量
export PDM_PUBLISH_REPO=...
export PDM_PUBLISH_USERNAME=...
export PDM_PUBLISH_PASSWORD=...
export PDM_PUBLISH_CA_CERTS=...
-
命令配置 -
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
文件中导入依赖 -
目录结构
.
├── .git
├── .gitignore
├── .python-version
├── README.md
├── pyproject.toml
└── src
└── my_project
└── __init__.py
初始化同步
-
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 [email protected]
指定使用 cpython 版本 -
rye pin pypy
指定使用 pypy -
rye toolchain list
列出 python 工具链 -
rye toolchain list --include-downloadable
查看可选安装的工具链列表 -
rye toolchain fetch [email protected]
安装工具链,不指定安装会默认安装 -
rye toolchain register /path/to/python
使用外部 python 作为工具链 -
rye toolchain register --name=custom /path/to/python
指定名称,路径 -
rye toolchain remove [email protected]
删除工具链
全局工具安装
-
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 以及 virtualenv -
rye 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 。。。。
🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱🥱
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论