如何使用 Poetry 从现有项目中导入 requirements.txt

Fel*_*ipe 38 python pip python-poetry

我正在现有项目中试用Poetry。它最初使用 pyenv 和 virtual env 所以我有一个requirements.txt包含项目依赖项的文件。

我想requirements.txt使用 Poetry导入文件,以便我可以第一次加载依赖项。我已经查看了诗歌的文档,但我还没有找到一种方法来做到这一点。你可以帮帮我吗?

我知道我可以手动添加所有包,但我希望有一个更自动化的过程,因为有很多包......

fin*_*mer 61

poetry不直接支持这个。但是如果你有一个手工制作的所需包列表(最好没有任何版本号),它只包含主要依赖项而不包含依赖项的依赖项,你可以这样做:

$ cat requirements.txt|xargs poetry add
Run Code Online (Sandbox Code Playgroud)

  • 如果您确实有版本号,您可以使用“catrequirements.txt|”进行修改。xargs -I % sh -c '诗歌加“%”'` (13认同)
  • 您可以使用“xargs诗添加<requirements.txt”来避免不必要的“cat” (9认同)
  • 这很好,但有两个问题:1)它不会在第一个错误时停止并继续运行“poetry add”2)如果“requirements.txt”使用某种外来编码,它将无法工作。[我的答案](/sf/ask/4393490391/#72456245)解决了这两个问题并提供了额外的功能。 (2认同)
  • @Mateen Ulhaq 你的摄影技巧<3 (2认同)

Jam*_*ker 11

我很欣赏这可能有点晚了,但你可以使用

poetry add `cat requirements.txt`
Run Code Online (Sandbox Code Playgroud)

  • 另外 ```poetry add $(catrequirements.txt)``` 对于那些讨厌反引号的人来说效果更好:-D (13认同)
  • 要忽略评论,“poetry add $(sed 's/#.*//'requirements.txt)”对我有用。 (10认同)
  • 这也适用于requirements.txt中的版本 (4认同)
  • 欢迎来到 StackOverflow。虽然此代码可以解决问题,但[包括解释](https://meta.stackexchange.com/q/114762) 如何以及为何解决问题将真正有助于提高帖子的质量,并且可能会产生结果更多的赞成票。请记住,您是在为将来的读者回答问题,而不仅仅是现在提问的人。考虑编辑您的答案以添加解释并指出适用的限制和假设。 (2认同)
  • @Ruli这是一个完整的答案。它很清楚,不需要进一步解释,而且它就是有效的。这是这里最好的答案。 (2认同)

Ael*_*ius 11

针对 Windows PowerShell 用户的一句话:

    @(cat requirements.txt) | %{&poetry add $_}
Run Code Online (Sandbox Code Playgroud)

有关使用 PowerShell 进行管道参数的更多信息,请参阅此有用的答案


Dan*_*els 10

我没有足够的声誉来发表评论,但对@Liang的回答的增强是省略回声并调用诗歌本身。

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
Run Code Online (Sandbox Code Playgroud)

并且在调用时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.
Run Code Online (Sandbox Code Playgroud)

添加开发依赖项就像添加-Dor--dev参数一样简单。

# dev dependancies example
cat requirements-dev.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 poetry add -D
Run Code Online (Sandbox Code Playgroud)

最后,如果您的开发需求是从父需求文件安装的,例如:

-r base.txt

package1
package2
Run Code Online (Sandbox Code Playgroud)

然后这将在诗歌运行时产生错误,但是,它将继续越过该-r base.txt行并按预期安装软件包。

按照此处的说明安装了诗歌的 Linux manjaro 上进行了测试。


Ted*_*y C 7

poetry-add-requirements.txt我专门为此制作了一个工具。代码

安装它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)
Run Code Online (Sandbox Code Playgroud)

特征

  • 自动检测requirements.txt文件的字符集并将规范化的依赖项规范提供给poetry.
  • 出现第一个poetry add错误时停止。


小智 6

我发现的最好的方法是这个(unix shell 命令):

for item in $(cat requirements.txt); do poetry add "${item}"; done

  • 我认为第一个 $ 是杂散字符,不是必需的 (2认同)

Loc*_*cke 6

只需使用简单的requirements.txt并使用awk过滤掉版本号:

awk -F '==' '{print $1}' requirements.txt | xargs -n1 poetry add
Run Code Online (Sandbox Code Playgroud)

-F指定过滤器或分割点。$1 是分割中的第一个参数。输入文件作为最后一个参数。之后,您可以将其通过管道连续poetry add调用每一行,而不是立即使用空格分隔的字符串。如果您想一次使用所有条目,只需省略xargs -n 1poetry add-n 1。还要确保诗歌环境已经存在。

仅使用requirements.txt省略过滤器并使用

awk '{print $1}' requirements.txt | xargs -n1 poetry add
Run Code Online (Sandbox Code Playgroud)

但其他工具cat也适合这种情况。


Lia*_*ong 5

一班轮:

cat requirements.txt | grep -E '^[^# ]' | cut -d= -f1 | xargs -n 1 poetry add