如何使用 Poetry 从现有项目导入 requirements.txt
How to import requirements.txt from an existing project using Poetry
我正在现有项目中尝试 Poetry。它最初使用了 pyenv 和虚拟环境,所以我有一个包含项目依赖项的 requirements.txt
文件。
我想使用 Poetry 导入 requirements.txt
文件,以便我可以第一次加载依赖项。我查看了 poetry 的文档,但还没有找到执行此操作的方法。你能帮帮我吗?
我知道我可以手动添加所有包,但我希望有一个更自动化的过程,因为有很多包...
poetry
不直接支持这个。但是如果你有一个手工制作的所需包列表(最好没有任何版本号),它只包含主要依赖项而不包含依赖项的依赖项,你可以这样做:
$ cat requirements.txt | xargs poetry add
我找到的最好的方法是这个:
$ for item in $(cat requirements.txt); do poetry add "${item}"; done
一个班轮:
cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 echo poetry add
我没有足够的声誉来发表评论,但对 的答案的改进是省略回声并调用诗歌本身。
cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 poetry add
在我的例子中,这成功地将包添加到 pyproject.toml
文件。
作为参考,这是我的 requirements.txt
文件的片段:
pytz==2020.1 # https://github.com/stub42/pytz
python-slugify==4.0.1 # https://github.com/un33k/python-slugify
Pillow==7.2.0 # https://github.com/python-pillow/Pillow
并且在调用cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1
时(注意为了演示省略了xargs -n 1 poetry add
)会输出如下:
pytz
python-slugify
Pillow
# NOTE: this will install the latest package - you may or may not want this.
添加开发依赖与添加 -D
或 --dev
参数一样简单。
# dev dependancies example
cat requirements-dev.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 poetry add -D
最后,如果您的开发需求是从父需求文件安装的,例如:
-r base.txt
package1
package2
然后这将在 poetry 运行时产生错误,但是,它将继续通过 -r base.txt
行并按预期安装包。
在 Linux manjaro 上测试并按照说明安装了诗歌 here。
我很感激这可能有点晚,但你可以使用
poetry add $( cat requirements.txt )
只需使用普通 requirements.txt 并使用 awk 过滤掉版本号:
awk -F '==' '{print }' requirements.txt | xargs -n1 poetry add
-F
指定过滤器或拆分点。 $1 是拆分中的第一个参数。输入文件作为最后一个参数。之后,您可以使用 xargs -n 1
将其通过管道传输到 poetry add
以连续调用每一行的 poetry add
而不是一次使用 space 分隔的字符串。如果您想一次使用所有条目,只需省略 -n 1
。还要确保诗歌环境已经存在。
只消耗 requirements.txt 省略过滤器并使用
awk '{print }' requirements.txt | xargs -n1 poetry add
但是 cat
等其他工具也适用于这种情况。
这与诗歌相反
poetry export -f requirements.txt --without-hashes > requirements.txt
对于 Powershell:
$reqs = @(cat requirements.txt)
for($i = 0; $i -lt $reqs.length; $i++){poetry add $reqs[i]}
请注意,这不会忽略需求文件中的注释或任何其他内容。这严格地将其视为原始文本,因此它希望每一行都是一个包。
我发现这些答案中的 none 个就足够了,所以我创建了一个自己的答案:
https://github.com/src-r-r/python-stanza
这是一个新宝贝,所以欢迎投稿,但到目前为止它非常适合千篇一律:
- 自动检测
setup.py
并获取项目信息
- 允许为开发依赖项或普通依赖项指定多个 requirements.txt 文件
- 允许覆盖名称和版本。
- 如果包含在需求文件中,也会添加引用的需求(例如
-r ./special-requirements.txt
)。
如果您的需求文件中有 #
条评论(在行首或行尾),下面是一个有效的方法:
poetry add $(sed -e 's/#.*//' -e '/^$/ d' < requirements.txt)
我做了一个工具poetry-add-requirements.txt
just for this. Code
使用 pipx install poetry-add-requirements.txt
、
安装
然后 运行 poeareq
.
用法
运行 poetry-add-requirements.txt
,可选择指定您的 requirements.txt 文件和 --dev
开发依赖项。
poeareq
是 poetry-add-requirements.txt
的别名。
$ poeareq --help
usage: poeareq [-h] [-D] [requirements.txt files ...]
Add dependencies specified in requirements.txt to your Poetry project
positional arguments:
requirements.txt file(s)
Path(s) to your requirements.txt file(s) (default: requirements.txt)
options:
-h, --help show this help message and exit
-D, --dev Add to development dependencies (default: False)
特点
- 自动检测 requirements.txt 个文件的字符集并将规范化依赖规范提供给
poetry
。
- 遇到第一个
poetry add
错误时停止。
我正在现有项目中尝试 Poetry。它最初使用了 pyenv 和虚拟环境,所以我有一个包含项目依赖项的 requirements.txt
文件。
我想使用 Poetry 导入 requirements.txt
文件,以便我可以第一次加载依赖项。我查看了 poetry 的文档,但还没有找到执行此操作的方法。你能帮帮我吗?
我知道我可以手动添加所有包,但我希望有一个更自动化的过程,因为有很多包...
poetry
不直接支持这个。但是如果你有一个手工制作的所需包列表(最好没有任何版本号),它只包含主要依赖项而不包含依赖项的依赖项,你可以这样做:
$ cat requirements.txt | xargs poetry add
我找到的最好的方法是这个:
$ for item in $(cat requirements.txt); do poetry add "${item}"; done
一个班轮:
cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 echo poetry add
我没有足够的声誉来发表评论,但对
cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 poetry add
在我的例子中,这成功地将包添加到 pyproject.toml
文件。
作为参考,这是我的 requirements.txt
文件的片段:
pytz==2020.1 # https://github.com/stub42/pytz
python-slugify==4.0.1 # https://github.com/un33k/python-slugify
Pillow==7.2.0 # https://github.com/python-pillow/Pillow
并且在调用cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1
时(注意为了演示省略了xargs -n 1 poetry add
)会输出如下:
pytz
python-slugify
Pillow
# NOTE: this will install the latest package - you may or may not want this.
添加开发依赖与添加 -D
或 --dev
参数一样简单。
# dev dependancies example
cat requirements-dev.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 poetry add -D
最后,如果您的开发需求是从父需求文件安装的,例如:
-r base.txt
package1
package2
然后这将在 poetry 运行时产生错误,但是,它将继续通过 -r base.txt
行并按预期安装包。
在 Linux manjaro 上测试并按照说明安装了诗歌 here。
我很感激这可能有点晚,但你可以使用
poetry add $( cat requirements.txt )
只需使用普通 requirements.txt 并使用 awk 过滤掉版本号:
awk -F '==' '{print }' requirements.txt | xargs -n1 poetry add
-F
指定过滤器或拆分点。 $1 是拆分中的第一个参数。输入文件作为最后一个参数。之后,您可以使用 xargs -n 1
将其通过管道传输到 poetry add
以连续调用每一行的 poetry add
而不是一次使用 space 分隔的字符串。如果您想一次使用所有条目,只需省略 -n 1
。还要确保诗歌环境已经存在。
只消耗 requirements.txt 省略过滤器并使用
awk '{print }' requirements.txt | xargs -n1 poetry add
但是 cat
等其他工具也适用于这种情况。
这与诗歌相反
poetry export -f requirements.txt --without-hashes > requirements.txt
对于 Powershell:
$reqs = @(cat requirements.txt)
for($i = 0; $i -lt $reqs.length; $i++){poetry add $reqs[i]}
请注意,这不会忽略需求文件中的注释或任何其他内容。这严格地将其视为原始文本,因此它希望每一行都是一个包。
我发现这些答案中的 none 个就足够了,所以我创建了一个自己的答案:
https://github.com/src-r-r/python-stanza
这是一个新宝贝,所以欢迎投稿,但到目前为止它非常适合千篇一律:
- 自动检测
setup.py
并获取项目信息 - 允许为开发依赖项或普通依赖项指定多个 requirements.txt 文件
- 允许覆盖名称和版本。
- 如果包含在需求文件中,也会添加引用的需求(例如
-r ./special-requirements.txt
)。
如果您的需求文件中有 #
条评论(在行首或行尾),下面是一个有效的方法:
poetry add $(sed -e 's/#.*//' -e '/^$/ d' < requirements.txt)
我做了一个工具poetry-add-requirements.txt
just for this. Code
使用 pipx install poetry-add-requirements.txt
、
然后 运行 poeareq
.
用法
运行 poetry-add-requirements.txt
,可选择指定您的 requirements.txt 文件和 --dev
开发依赖项。
poeareq
是 poetry-add-requirements.txt
的别名。
$ poeareq --help
usage: poeareq [-h] [-D] [requirements.txt files ...]
Add dependencies specified in requirements.txt to your Poetry project
positional arguments:
requirements.txt file(s)
Path(s) to your requirements.txt file(s) (default: requirements.txt)
options:
-h, --help show this help message and exit
-D, --dev Add to development dependencies (default: False)
特点
- 自动检测 requirements.txt 个文件的字符集并将规范化依赖规范提供给
poetry
。 - 遇到第一个
poetry add
错误时停止。