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 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
weixin_395448912 分钟前
mult_yolov5_post_copy.c_cursor_0205
c语言·python·yolo
执风挽^18 分钟前
Python基础编程题2
开发语言·python·算法·visual studio code
Z9fish28 分钟前
sse哈工大C语言编程练习20
c语言·开发语言·算法
纤纡.33 分钟前
PyTorch 入门精讲:从框架选择到 MNIST 手写数字识别实战
人工智能·pytorch·python
kjkdd1 小时前
6.1 核心组件(Agent)
python·ai·语言模型·langchain·ai编程
小镇敲码人1 小时前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎1 小时前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步1 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++