python环境配置之poetry&venv
1. venv
是python自带的模块, python3才有
1. 使用场景及使用逻辑
解决多个项目不可能共用一个全局依赖的问题
- 举例:
项目1和项目2依赖不同版本的同一包, 但是全局环境只能提供一个版本的包, 两个项目无法同时运行起来
- 解决方案——venv
venv是一个隔离的环境, 各venv和全局环境之间都是独立的, 互不干扰
2. 使用方法
-
进入项目文件夹
-
创建虚拟环境
- Mac/Linux 创建名为myenv的虚拟环境
python3 -m venv myenv
- Win 创建名为myenv的虚拟环境
python -m venv myenv
- Mac/Linux 创建名为myenv的虚拟环境
-
激活虚拟环境
- Mac/Linux:
source mien/bin/activate
- Win:
- CMD:
myenv\Sctipts\activate.bat
- Powershell:
myenv\Sctipts\activate.ps1
- CMD:
- Mac/Linux:
-
在虚拟环境中安装需要的包, 和全局pip用法一样
-
退出虚拟环境
deactivate
2. poetry
大致等于pip+venv
相似工具: anaconda, npm, maven, go.mod, cargo
1. venv和pip的缺陷
1. pip的不足
第三方模块的依赖管理能力不足(第三方模块的依赖就是, 很多第三方包需要使用别的第三方包, 这就叫依赖, 因此安装时会把依赖的包也安装进来), 在安装包后依赖经常互相冲突, 删除包时也不能正确的处理依赖
2. venv的不足
2. poetry的功能
- 管理第三方模块(和pip功能相似)
- 管理虚拟环境
- 管理虚拟环境的依赖(重要)
- 打包与发布
3. poetry的使用
1. 安装
pip install poetry
2. 初始化poetry项目
poetry init
会有一连串的互动问题, 回答完后会生成项目的配置文件pyproject.toml
3. 创建虚拟环境
poetry env use xxx
如poetry env use python
4. poetry命令
使用逻辑:
选项:
- -h, --help 显示给定命令的帮助信息。当未指定命令时,显示列表命令的帮助信息。
- -q, --quiet 不输出任何消息。
- -V, --version 显示此应用程序的版本。
–ansi 强制启用 ANSI 输出。
–no-ansi 禁用 ANSI 输出。 - -n, --no-interaction 不要询问任何交互式问题。
–no-plugins 禁用插件。
–no-cache 禁用 Poetry 源缓存。 - -C, --directory=DIRECTORY Poetry 命令的工作目录(默认为当前工作目录)。
- -v|vv|vvv, --verbose 增加消息的详细程度:1 为正常输出,2 为更详细的输出,3 为调试输出。
可用命令:
-
about 显示有关 Poetry 的信息。
-
*add[添加依赖] 向 pyproject.toml 添加新的依赖项。
- -D 仅添加到开发依赖中, 部署时不使用
- 参数可以是包名, git url, 本地path
-
*build 默认情况下,构建一个包,作为 tarball 和 wheel。
-
check 检查 pyproject.toml 文件的有效性
-
*config 管理配置设置。
-
export 将锁定文件导出到其他格式。
-
help 显示命令的帮助信息。
-
*init 在当前目录中创建一个基本的 pyproject.toml 文件。
-
*install 安装项目的依赖项, 安装到本地。(已有pyproject.toml, 安装它)
-
list 列出命令。
-
*lock[锁定依赖] 锁定项目的依赖项。
-
*new[创建项目] 在
处创建一个新的 Python 项目。(会组织好文件夹) -
publish 将包发布到远程存储库。
-
remove 从项目依赖项中删除包。
-
*run 在适当的环境中运行命令。
-
search 在远程存储库上搜索包。
-
*shell[虚拟环境] 在虚拟环境中生成一个 shell。
-
*show 显示有关包的信息。
-
update 根据 pyproject.toml 文件更新依赖项。
-
version 显示项目的版本或根据提供的有效版本规则增加版本号。
-
cache
- cache clear 按名称清除 Poetry 缓存。
- cache list 列出 Poetry 的缓存。
-
debug
- debug info 显示调试信息。
- debug resolve 调试依赖关系解析。
-
*env
- env info 显示有关当前环境的信息。
- env list 列出与当前项目关联的所有虚拟环境
- env remove 删除与项目关联的虚拟环境。
- *env use 激活或创建当前项目的新虚拟环境。
-
self
- self add 向 Poetry 运行时环境添加其他包。
- self install 安装此 Poetry 安装所需的已锁定包(包括附加组件)。
- self lock 锁定 Poetry 安装的系统要求。
- self remove 从 Poetry 运行时环境中删除其他包。
- self show 显示 Poetry 运行时环境中的包信息。
- self show plugins 显示当前安装的插件信息。
- self update 更新 Poetry 到最新版本。
-
source
- source add 为项目添加源配置。
- source remove 删除项目配置的源。
- source show 显示为项目配置的源信息。
poetry add
/poetry install
区别
poetry add library_name
installs the library and adds it to thepyproject.toml
file. Note - both installs the library and adds it to the file.
poetry install
is used when you’ve directly edited thepyproject.toml
file and added the dependency names manually. In that case, they aren’t installed yet, so,poetry install
takes care of that.namely, the
add
command adds packages to your pyproject.toml and installs them.Theinstall
command reads the pyproject.toml file from the current project, resolves the dependencies, and installs them.
5. 中间文件解释
pyproject.toml: 项目依赖, 打包发布声明(作者名字开源协议什么的)
poetry.lock: 确定项目的安装内容