前言
poetry 是一个用于管理 python 项目的依赖和构建过程的工具。它简化了包管理和虚拟环境的创建,让开发者更容易管理项目的依赖关系。它的出现让我们对依赖卸载更干净。
1. 为什么pip install poetry 会造成依赖冲突
直接使用 pip install poetry
安装 poetry 可能会造成依赖冲突,原因主要是 pip
在全局环境中安装包的方式可能导致多个项目或工具之间的依赖冲突。这些冲突通常发生在以下几种情况下:
1.1 全局环境依赖混淆:
pip install poetry
会将 poetry 及其依赖项安装到 python 的全局环境中。如果全局环境中已经存在某些依赖项,并且它们的版本与 poetry 依赖的版本不同,安装可能会覆盖这些依赖项,导致其他依赖同样库的工具或项目无法正常工作。- 例如,poetry 依赖某个特定版本的
tomlkit
库,而系统中的某个项目依赖不同版本的tomlkit
。安装 poetry 后,tomlkit
版本被改变,系统中的其他项目可能因此失败。
1.2 工具和项目之间的冲突:
- 当你在全局环境中安装多个工具(例如,poetry 和另一个 python 工具),这些工具可能依赖于同一个库但要求不同版本。
pip
在安装时并不会为每个工具创建独立的环境,所以这会导致一个工具的依赖被另一个工具的依赖覆盖,从而导致功能失效。
1.3 缺乏依赖隔离:
pip
默认安装到全局环境中,所有项目和工具共享同一个依赖池。这意味着不同项目或工具之间无法隔离它们的依赖,这会增加依赖冲突的风险。- 由于全局环境中所有包共享一个空间,因此多个包之间的版本需求可能不一致,造成某些包运行失败。
1.4 多出很多额外依赖:
下载之前:
下载之后:
2. 不推荐pipx安装
这里有个机翻 https://www.tobyblogs.cn/poetrycn/1/
3. poetry高级安装
3.1 默认安装路径
by default, poetry is installed into a platform and user-specific directory:
~/library/application support/pypoetry
on macos.~/.local/share/pypoetry
on linux/unix.%appdata%\pypoetry
on windows.
3.2自定义安装
如果您想更改此设置,可以定义 $poetry_home 环境变量:
curl -ssl https://install.python-poetry.org | poetry_home=/etc/poetry python3 -
如果要安装预发行版本,可以通过将 --preview 选项传递给安装脚本或使用 $poetry_preview 环境变量来实现:
curl -ssl https://install.python-poetry.org | python3 - --preview curl -ssl https://install.python-poetry.org | poetry_preview=1 python3 -
如果要安装特定版本,可以使用 --version 选项或 $poetry_version 环境变量:
curl -ssl https://install.python-poetry.org | python3 - --version 1.2.0 curl -ssl https://install.python-poetry.org | poetry_version=1.2.0 python3 -
4. 安装poetry实战
4.1 下载安装脚本文件
windows+r 输入powershell
然后在powershell中输入:
invoke-webrequest -uri https://install.python-poetry.org -outfile install-poetry.py
在当前路径下可以看到install-poetry.py被生成
4.2 通过脚本安装poetry
然后通过这个install-poetry.py安装poetry
首先创建自定义文件夹
cd d:\program files: d: mkdir poetry
然后切换到install-poetry.py所在的目录,输入以下命令
$env:poetry_home = "d:/program files/poetry"; python install-poetry.py
4.3 配置环境变量
把poetry安装目录下的bin添加到系统环境变量
ps d:\program files\poetry\bin> get-childitem | format-list name, length, lastwritetime name : poetry.exe length : 0 lastwritetime : 2024/8/18 14:09:11
检查是否安装成功
ps c:\users\administrator> poetry --version poetry (version 1.8.3) ps c:\users\administrator>
4.4 修改poetry下载的三方包虚拟环境
查看poetry配置
ps c:\users\administrator> poetry config --list cache-dir = "c:\\users\\administrator\\appdata\\local\\pypoetry\\cache" experimental.system-git-client = false installer.max-workers = null installer.modern-installation = true installer.no-binary = null installer.parallel = true keyring.enabled = true solver.lazy-wheel = true virtualenvs.create = true virtualenvs.in-project = null virtualenvs.options.always-copy = false virtualenvs.options.no-pip = false virtualenvs.options.no-setuptools = false virtualenvs.options.system-site-packages = false virtualenvs.path = "{cache-dir}\\virtualenvs" # c:\users\administrator\appdata\local\pypoetry\cache\virtualenvs virtualenvs.prefer-active-python = false virtualenvs.prompt = "{project_name}-py{python_version}" warnings.export = true ps c:\users\administrator>
不想让poetry下载的三方包在默认路径下,让他下载到我们自定义的目录。 virtualenvs.in-project
是 poetry 的一个配置选项,用于决定虚拟环境是否应该放在项目目录内。
virtualenvs.in-project = true
: 如果这个选项设置为 true
,poetry 会在项目的根目录下创建一个 .venv
文件夹,并在其中创建虚拟环境。这意味着每个项目都有一个独立的虚拟环境位于项目目录内,便于管理和隔离。
ps c:\users\administrator> poetry config virtualenvs.in-project true ps c:\users\administrator> poetry config --list cache-dir = "c:\\users\\administrator\\appdata\\local\\pypoetry\\cache" experimental.system-git-client = false installer.max-workers = null installer.modern-installation = true installer.no-binary = null installer.parallel = true keyring.enabled = true solver.lazy-wheel = true virtualenvs.create = true virtualenvs.in-project = true virtualenvs.options.always-copy = false virtualenvs.options.no-pip = false virtualenvs.options.no-setuptools = false virtualenvs.options.system-site-packages = false virtualenvs.path = "{cache-dir}\\virtualenvs" # c:\users\administrator\appdata\local\pypoetry\cache\virtualenvs virtualenvs.prefer-active-python = false virtualenvs.prompt = "{project_name}-py{python_version}" warnings.export = true
4.5 在老项目中使用poetry
cd myproject poetry init
poetry init --no-interaction 不适用交互模型,生产的toml文件配置是默认参数
4.6 在新项目中使用poetry
poetry new my_project
到此这篇关于python中poetry安装依赖的文章就介绍到这了,更多相关poetry安装依赖内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论