由于conda和ros2的环境实在太容易冲突了。我真的不敢再使用conda,着实是有些搞不明白这解释器之间的关系。
conda的卸载和ros2的安装暂不赘述,下面着重来说如何在Ubuntu中使用poetry进行包管理及遇到的问题。
1 安装poetry
由于在有写入权限的限制,在Ubuntu中想直接安装一个poetry实在是太困难了,下面介绍几种安装的情况。下面这几个命令先别急着复制安装,我使用的是最后一种。
1.0 官方下载方式
curl -sSL https://install.python-poetry.org | python3 -
1.1 本地用户的临时环境
pip install -i --user https://pypi.tuna.tsinghua.edu.cn/simple poetry
这个指令将会把poetry安装到当前用户的.local文件夹下,但是遗憾的是没有添加环境变量,我们虽然可以成功安装,但是却不能够使用它。
从理论上来讲,如果我们将./local/bin下的路径添加到终端的环境变量的话,那么我们应该是可以使用poetry命令的。
1.2 sudo命令安装——root用户的临时环境
可以看到,上面的方法中制定了‘--user’参数将包安装到当前用户,如果使用
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple poetry
来安装的话,那么就会安装到/root/.local下。但是也是没有添加环境变量的。
所以我推荐下面的方法。虽然在你的电脑上直接安装不一定就会有权限限制,但是如果是使用下面这种安装方法那么几乎是必然不会出问题的。毕竟我这前疮百孔的环境都能装(是的,虽然是前前天才重装的系统,但是已经玩脱好几次了)。
1.3 python -m 安装
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple poetry
这样之后应该就可以使用poetry了,但是不是使用poetry,而是使用
python -m poetry
如果每次都使用这个的话,难免会有些麻烦,这个时候我们就可以使用zsh的别名功能了。
要创建别名,请在终端中执行以下命令:
alias mypt='python -m poetry'
这将创建一个名为mypt的别名,将其映射到python -m poetry命令。 但是这样只能将别名应用到当前终端,要想一直能用,要添加到./zshrc文件中。
要使用别名,请在终端中输入别名名称并按回车键。例如,要使用mypt别名来运行poetry,在终端中执行以下命令:
mypt --version
这将显示poetry的版本号。平常我们也可以使用别名来简化经常使用的命令,或者将复杂的命令映射到易于记忆的名称。
如果是在bash中的话,那么应该也可以靠软链接达到同样的效果。
2 使用poetry进行环境管理
2.1 poetry init
poetry init
是一个用于创建新Python项目的命令。它会在当前目录中创建一个pyproject.toml
文件,该文件包含有关项目的元数据和依赖项的信息。pyproject.toml
是poetry项目的核心配置文件,它描述了项目如何构建、测试和运行,并列出了项目所需的依赖项和版本约束条件。下面我们来进行尝试,我在mmdetection的仓库中进行尝试。
可以看到,在初始化之后,这个工具会询问一些信息。
Would you like to define your main dependencies interactively? (yes/no)
是poetry init
命令的一个提示,询问是否想要交互式地定义项目的主要依赖项。
如果选择回答“yes”,则poetry init
命令将向你询问要添加的依赖项。你可以根据需要添加依赖项的名称、版本范围、Git URL或其他信息来添加。就像选择yes之后的情况一样,跟着走就行了。
如果您选择回答“no”,则poetry init
命令将使用默认设置创建pyproject.toml
文件,并在其中包含一个空的依赖项列表。你可以待会儿使用poetry add
命令手动添加依赖项。
最后,它会生成pyproject.toml文件。
2.2 poetry install
用下面的命令把toml文件“变现”
poetry install
这将根据 `pyproject.toml` 文件中指定的依赖项安装所需的所有包,以及它们的依赖项。默认情况下,这将在一个名为 `.venv` 的虚拟环境中安装依赖项。如果您需要将依赖项安装到全局环境中,可以使用 `--no-virtualenv` 标志。
运行时首先会爆出位置,方便我以后删了它。
Creating virtualenv mmdetrely-kp0XzG9G-py3.10 in /home/zhaocake/.cache/pypoetry/virtualenvs
如果你要更改虚拟环境的位置,可以使用 `--path` 标志指定自定义路径,例如:
poetry install --path /path/to/custom/venv
这将在 `/path/to/custom/venv` 中创建虚拟环境并安装依赖项。
2.3 poetry shell
使用这个命令激活虚拟环境
使用shell退出虚拟环境。
而且很离谱的一点是,在下载包的时候,明明看见很多包都下载的是macosx的版本,但是竟然真的可以安装和使用。可能poetry真的是一个很务实的包管理工具吧。
2.4 poetry add
首先,要理解这个命令的参数,就要理解依赖项
在 Poetry 中,有三种类型的依赖项:
- 生产依赖项(默认类型):这些是您的项目所必需的依赖项,用于构建和运行项目。
- 开发依赖项:这些是用于开发、测试和维护项目的依赖项,例如测试框架、文档生成器等。开发依赖项不会被包含在项目构建中,而是在开发过程中使用。
- 可选依赖项:这些是您的项目可以使用但不是必需的依赖项。例如,如果您的项目可以在不同的数据库上运行,则可能存在多个数据库适配器,其中一些是可选的。
该命令的语法为
poetry add <package>[@<version>] [--dev] [--optional]
其中 <package>
是要添加的依赖包的名称,<version>
是可选的版本号。如果没有指定版本号,Poetry 将使用 ^
符号自动添加一个版本约束符号。
--dev
标志表示将包添加到开发依赖项中,而不是默认的生产依赖项中。--optional
标志表示将包添加到可选依赖项中。
并且因为在虚拟环境中没有poetry,你需要先推出虚拟环境,再执行命令。执行命令后要重新使用poetry install!
2.5 poetry update
如果不是使用上面的add修改包,而是直接编辑了toml文件的话,再运行install就会报错了,这个时候要使用的命令是update.
其他
1 poetry换源
由于常规来说下载包速度确实挺慢,所以我们要换源。
依然是熟悉的清华镜像,这个真的好用。
2 安装pytorch
我知道很多看我文章的朋友是要碰pytorch的,别的不说,pytorch作为当前数一数二的深度学习框架,多多少少还是要在这里提一句。
poetry对pytorch的支持目前可并不友好。我的建议是先把虚拟环境创建下来,再把pytorch用pip安装,虽然这样对包的管理很不到位,但也不失为一种解决办法。或者就使用其他的包管理工具也是不错的。
这是一篇整理自issue的可能的pytorch的poetry安装方式,并且我尝试,有在云机器上成功,但是在本地似乎依然有下载一些莫名奇妙的东西的可能。
Poetry安装pytorch || 整理自github项目Poetry下的issue_早上真好的博客-CSDN博客