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/

相关推荐
weixin_460443561 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
kobe_OKOK_3 小时前
__getattr__和__getattribute__如何用
python
全栈弄潮儿4 小时前
Python实战第2期: 变量与数据类型
后端·python·agent
长沙三为智能科技5 小时前
家政小程序门店运营模块设计:会员、下单、派单、结算四段链路的落地拆解
python·小程序·内容运营
Cc.Y5 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川5 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸5 小时前
排序算法介绍
python·算法·排序算法
阿森_dev5 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209995 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说5 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python