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目录;如果设置为falsepoetry将忽略任何现有的.venv目录。

参考下面文档

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

相关推荐
其美杰布-富贵-李1 小时前
tsai 完整训练流程实践指南
python·深度学习·时序学习·fastai
m0_462605222 小时前
第N9周:seq2seq翻译实战-Pytorch复现-小白版
人工智能·pytorch·python
纪伊路上盛名在2 小时前
记1次BioPython Entrez模块Elink的debug
前端·数据库·python·debug·工具开发
CryptoRzz2 小时前
日本股票 API 对接实战指南(实时行情与 IPO 专题)
java·开发语言·python·区块链·maven
ss2732 小时前
考研加油上岸祝福弹窗程序
python
yugi9878382 小时前
基于M序列的直扩信号扩频码生成方法及周期长码直扩信号的MATLAB实现方案
开发语言·matlab
乾元2 小时前
基于时序数据的异常预测——短期容量与拥塞的提前感知
运维·开发语言·网络·人工智能·python·自动化·运维开发
江上清风山间明月2 小时前
使用python将markdown文件生成pdf文件
开发语言·python·pdf
凯_kyle2 小时前
Python 算法竞赛 —— 基础篇(更新ing)
笔记·python·算法