当前位置:首页>python>使用poetry来管理python项目

使用poetry来管理python项目

  • 2026-10-11 09:41:13
使用poetry来管理python项目
.TECH NOTE.2021.01.23

使用poetry来管理python项目

.

使用poetry来管理python项目,快速的构建开发环境,快速的发布,以及进行第三方库的依赖管理。

使用poetry来管理pytho

POETRYPYTHON

使用poetry来管理python项目,快速的构建开发环境,快速的发布,以及进行第三方库的依赖管理。

01

PART

.

背景

SECTION

Poetry 是一个Python 中的好用的包管理工具。在 Python 中,打包系统和依赖管理非常复杂:一个项目经常要同时创建多个文件,例如:

.

setup.py

.

requirements.txt

.

setup.cfg

.

MANIFEST.in

.

Pipfile

基于此, poetry 将所有的配置都放置在一个 toml 文件中,包括:依赖管理、构建、打包、发布等,可谓是简单方便。

02

PART

.

安装

INSTALL

1

环境:windows10 + Python 3.8.10 + Python 2.7

.

注:如何并存多个版本的python,见之前的文章 {% post_link windows上同时安装多个版本的python %}

1

pipx 或者 pip 进行安装:

...bash

pipx install poetry  ---推荐

pip install  poetry

.

注: pipx的安装与介绍后续会单独出文章。

1

配置全局环境变量(可选,只是为更好的使用)

...shell

打开cmd窗口

1.查看当前的poetry环境变量:

$ poetry config --list

cache-dir= "C:\\Users\\zmr\\AppData\\Local\\pypoetry\\Cache"

experimental.new-installer = true

installer.parallel = true

virtualenvs.create = true

virtualenvs.in-project = false

virtualenvs.path = "{cache-dir}\\virtualenvs"  # C:\\Users\\zmr\\AppData\\Local\\pypoetry\\Cache\\virtualenvs

配置项
说明
cache-dir
poetry使用的缓存目录的路径 默认值: macOS: **~/Library/Caches/pypoetry**  Windows: **C:\Users< username >\Appdata\Local\pypoetry\Cache**  Unix: **~/.cache/pypoetry**
virtualenvs.create
默认值为true,如果执行 **poetry install**/**poetry add**时没有虚拟环境,就自动创建一个虚拟环境,设置为false的话,当虚拟环境不存在时,会将包安装到系统环境
virtualenvs.in-project
默认值为false,设置为true的话,会在当前项目目录下创建虚拟环境
virtualenvs.path
虚拟环境的路径,默认路径 **{cache-dir}\virtualenvs**

根据需求做以下的调整

...tex

1. 更改缓存目录到其他盘,避免C盘占用

$ poetry config cache-dir E:\TEMP\cache\poetry\cache

2.更改为在当前位置创建虚拟环境,更容易管理

$ poetry config virtualenvs.in-project true

1

确认更改是生效的

...tex

$ poetry config --list

cache-dir= "E:\\TEMP\\cache\\poetry\\cache"

experimental.new-installer = true

installer.parallel = true

virtualenvs.create = true

virtualenvs.in-project = true

virtualenvs.path = "{cache-dir}\\virtualenvs"  # E:\TEMP\cache\poetry\cache\virtualenvs

03

PART

.

基本使用

USAGE

添加poetry管理

1

已有的项目,直接在当前项目的根目录执行poetry init即能根据你回答的问题生成pyproject.toml文件

...toml

[tool.poetry]

name = "demo"

version = "0.1.0"

description = ""

authors = ["xxx <xxx@126.com>"]

      [tool.poetry.dependencies]

python = "^3.8"

[tool.poetry.dev-dependencies]

[build-system]

requires=["poetry-core>=1.0.0"]

build-backend= "poetry.core.masonry.api"

1

如果你想创建一个新的 Python项目,使用 poetry new <文件夹名称>命令可以创建一个项目模板:

...tex

$ poetry new foo

这会创建一个这样的项目结构:

    foo

    ├── pyproject.toml

    ├── README.rst

    ├── foo

    │   └── __init__.py

    └── tests

        ├── __init__.py

        └── test_foo.py

.

注:如果你想使用 src 文件夹,可以添加 --src选项,这会把程序包嵌套在 src 文件夹里。

创建虚拟环境

1

使用 poetry install命令创建虚拟环境(确保当前目录有 pyproject.toml 文件):

...shell

poetry install

如果系统中既有Python2又有Python3,且项目既支持Python2也支持Python3,那poetry会优先使用Python2。

1

利用 poetry env use创建

这个命令,可以指定创建虚拟环境时使用的Python解释器版本

...shell

$ poetry env use python2

查看当前的环境信息

$ poetry env info

Virtualenv

Python:         2.7.10

Implementation: CPython

Path:       E:\git-code\behave-db\.venv

Valid:          True

System

 Platform: win32

 OS:       nt

Python:  d:\program files\python27

安装包、卸载包

使用 poetry add 命令来安装一个包:

...tex

安装包

$ poetry add flask

执行完成后,会自动加到 pyproject.toml 中,下次直接install的时候就自动包含了flask

卸载包

$ poetry remove foo

会将其从 pyproject.toml 中移除

锁定依赖

...tex

$ poetry lock

会锁定当前使用的所有依赖的版本,生成一个poetry.lock

激活虚拟环境

...tex

poetry shell

删除环境

...tex

poetry env remove python3.7

build:构建

...tex

$ poetry build

会打包当前的py项目,并放到dist目录中

publish:发布到仓库

...tex

将使用build命令生成的包发布到远程仓库,默认上传至PYPI

$ poetry publish

# 需要输入PYPI的用户名和密码

Username: xxxx

Password: 

Publishing py-sanic-samples (0.1.0) to PyPI

 - Uploading py-sanic-samples-0.1.0.tar.gz 100%

 - Uploading py_sanic_samples-0.1.0-py3-none-any.whl 100%

04

PART

.

pyproject.toml 配置文件的基本说明

CONFIG

...toml

# 设置 PyPI 镜像源,默认是走的pip的pip.ini设置的来源

[[tool.poetry.source]]

name = "douban"

url = "https://pypi.doubanio.com/simple/"

[tool.poetry.dependencies]

# 使用git仓库:

requests = { git = "https://github.com/requests/requests.git" }

# 使用本地路径:

# directory

my-package = { path = "../my-package/", develop = false }

# file

my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }

# URL

my-package = { url = "https://example.com/my-package-0.1.0.tar.gz" }

[tool.poetry.dependencies]

# python限制:

pathlib2 = { version = "^2.2", python = "~2.7" }

# 指定版本和运行环境

pathlib2 = { version = "^2.2", markers = "python_version ~= '2.7' or sys_platform == 'win32'" }

# 根据py版本来选择版本

foo = [

    {version = "<=1.9", python = "^2.7"},

    {version = "^2.0", python = "^3.4"}

]

# 如果限制很多,也可单独写一个模块

[tool.poetry.group.dev.dependencies.black]

version = "19.10b0"

allow-prereleases = true

python = "^3.6"

markers = "platform_python_implementation == 'CPython'"

我是 小梦同学,一个爱折腾技术的测试工程师,专注分享踩坑经验

如果你觉得今天这篇有收获,欢迎点赞、在看、转发三连,我们下篇见。

最新文章

随机文章