python项目管理

前置知识

项目的直接依赖和间接依赖:直接依赖是在项目中显示使用import等命令导入的包,间接依赖是由于直接依赖的导入而导入的包,当使用pip安装直接依赖时一般会自动安装间接依赖,比如,当你执行 pip install pandas时,pip 会先读取该包的 setup.py/pyproject.toml 等配置文件,找到它声明的所有依赖,然后会自动检查当前环境是否已安装这些依赖,若未安装 / 版本不满足,则下载并安装符合版本约束的间接依赖。

导出python已安装依赖及版本到requirements.txt文件中的命令:pip freeze > requirements.txt

按照requirements.txt中的包名和版本安装包的命令:pip install -r requirements.txt

python的包管理方案

过于早的python包管理方案就不介绍了因为那些方案已经被历史遗弃了,接下来从2008年出来的pip方案开始介绍。

方案一(早期方案):通过pip install进行安装依赖,通过pip uninstall移除依赖,这种方案在安装时没有什么问题,但是再移除时存在问题,因为当移除直接依赖时,它不能移除直接依赖的间接依赖,只会移除直接依赖本身,pip install会安装间接依赖但是pip uninstall却不能实现移除间接依赖这是不合理的,在项目中,删除了直接依赖后如果存在它的部分间接依赖不会被项目的其他的依赖所使用,也就是它的部分间接依赖对项目没有任何作用,那么留着它就是多余的,所以一个好的包管理工具应该能找到并删除这样的间接依赖,而显然pip uninstall是不能实现这个功能的,并且不止于此早期的包管理还存在很多问题。

方案二(现在方案):为解决上述问题,后来python官方推出来了现代项目的配置文件pyproject.toml。

Poetry项目管理工具

介绍:Poetry 是 Python 生态中 一站式项目管理工具 ,核心功能有依赖管理、虚拟环境、打包发布功能,完全遵循 pyproject.toml 现代标准。它底层也是用的pip和venv。

pip install poetry; 安装poetry。

poetry new 项目名称; 创建新项目。

poetry init;在现有项目中添加poetry支持,注意这个命令需要在项目根目录的终端中输入。

poetry add 库名称 【可选参数】;给项目添加依赖即添加python库,这个命令会给当前项目安装库,并将包名和版本约束写入 pyproject.toml文件。

poetry remove 库名称;给项目移除依赖。

poetry install;根据pyproject.toml和poetry.lock文件安装依赖

poetry python install python版本;安装python的命令,例如poetry python install 3.9。

poetry python remove python版本;移除环境中的对应python版本。

poetry python list;列出环境中可用的python版本。

poetry env use python版本;用对应的python版本创建一个虚拟环境,比如poetry env use 3.7。创建的虚拟环境的名称默认是项目名称+哈希值+python版本。

poetry env list;列出可用的虚拟环境。

poetry env info;列出当前虚拟环境的信息包括路径,如果将路径添加到vscode中就可以用vscode运行代码了。

poetry run python 文件名;在虚拟环境中运行某个文件。

poetry config --list ;列出poetry的配置项以及配置项的值。

poetry config virtualenvs.in-project true;虚拟环境将在项目根目录中名为.venv的文件夹中创建;如果virtualenvs.in-project未明确设置,poetry默认情况下将在{cache-dir}/virtualenvs下创建虚拟环境,或者如果已存在,则使用{project-dir}/.venv目录;如果设置为false,poetry将忽略任何现有的.venv目录。

参考下面文档

https://python-poetry.org/docs/https://python-poetry.org/docs/

相关推荐
专注仿真1 分钟前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放13 分钟前
Python基础语法练习题(75)
开发语言·python·学习
starzy19901 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
starzy19901 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
niucloud-admin1 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:订单列表
开发语言·php
黑十1 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
怪我冷i2 小时前
Rust 的impl语法详解
开发语言·后端·rust
threelab2 小时前
开源图片去水印代码
python
qq_406981032 小时前
c++的decltype是什么
开发语言·c++
坤坤子吖2 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法