我有一个包配置为在容器构建期间使用诗歌进行构建/安装。我不明白为什么poetry install说它已经安装了我的软件包,但没有找到它。不过,poetry build后面跟着一个pip install轮子效果很好。如果包名称与根文件夹的文件夹名称相同,是否需要指定子包,或者如何让诗歌使用安装完整的包poetry install?我尝试了对pyproject.toml文件的各种调整,包括设置packages。
文件结构如下所示:
\n.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_pkg\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_pkg\n \xc2\xa0\xc2\xa0 \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app.py\n\nRun Code Online (Sandbox Code Playgroud)\n该pyproject.toml文件如下所示:
[tool.poetry]\nname = "my_pkg"\nversion = "0.1.0"\ndescription = "My Package"\n\n[tool.poetry.dependencies]\npython = ">=3.8,<3.11"\n...\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\nRun Code Online (Sandbox Code Playgroud)\n问题是运行后未安装该软件包poetry install。
% poetry install\nInstalling dependencies from lock file\n\nPackage operations: 70 installs, 4 updates, 0 removals\n\n \xe2\x80\xa2 Installing …Run Code Online (Sandbox Code Playgroud) Poetry 官方文档严格建议使用官方安装程序。然而,自制有诗歌公式。
brew install poetry
Run Code Online (Sandbox Code Playgroud)
通常,我喜欢将所有内容保留在自制程序中,以便轻松管理安装。
使用自制软件而不是推荐的安装脚本安装诗歌有什么缺点和风险?
Python 的诗歌依赖管理器允许通过命令指定可选的依赖:
$ poetry add --optional redis
Run Code Online (Sandbox Code Playgroud)
这导致此配置:
[tool.poetry.dependencies]
python = "^3.8"
redis = {version="^3.4.1", optional=true}
Run Code Online (Sandbox Code Playgroud)
但是,您如何实际安装它们?文档似乎暗示:
$ poetry install -E redis
Run Code Online (Sandbox Code Playgroud)
但这只是抛出和错误:
Installing dependencies from lock file
[ValueError]
Extra [redis] is not specified.
Run Code Online (Sandbox Code Playgroud) 我希望能够在开发过程中运行/导入我的包,使用诗歌作为我的依赖项和环境管理工具。我根本不知道如何在诗歌中做到这一点(无需在每个解释器中操作 sys.path )
诗歌文档似乎表明这应该默认完成:
当前项目默认以可编辑模式安装。
但我已经在多个项目中尝试过此操作,并且当前项目永远无法从虚拟环境中的解释器导入。它总是失败并带有ModuleNotFoundError. 我也看不到这个安装应该如何或在哪里进行。
该文档还描述了在可编辑模式下添加路径依赖项:
[tool.poetry.dependencies]
my-package = {path = "../my/path", develop = true}
Run Code Online (Sandbox Code Playgroud)
但这总是失败,并显示“无法打开文件”或“目录似乎不是 python 包”。该目录有__init__.py,我正在使用带有 src 目录的默认诗歌设置。
诗歌文档说,脚本部分可用于在安装包时安装脚本或可执行文件。但它没有显示任何如何将参数传递给脚本的示例。
如何接收argparse函数中的参数?
我想从我的私人 GitHub 存储库安装一个包。使用 GitHub 访问令牌,我可以这样指定:
[tool.poetry.dependencies]
python = "^3.8"
<package> = {git = "https://<token>@github.com/<user>/<repo>", rev = "0.1.3"}
Run Code Online (Sandbox Code Playgroud)
它有效。但是,我不想pyproject.toml直接指定我的访问令牌。还有其他方法可以指定吗?
有没有办法poetry install在 Gitlab CI 中缓存命令(.gitlab-ci.yml)?
例如,node yarn有一种缓存方法yarn install(https://classic.yarnpkg.com/lang/en/docs/install-ci/ Gitlab部分),这使得阶段更快。
我有一个 Numpy 作为 Poetrypyproject.toml文件中的依赖项,但安装失败。
error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
error: Command "clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DNO_ATLAS_INFO=3 -DHAVE_CBLAS -Ibuild/src.macosx-12-arm64-3.9/numpy/core/src/umath -Ibuild/src.macosx-12-arm64-3.9/numpy/core/src/npymath -Ibuild/src.macosx-12-arm64-3.9/numpy/core/src/common -Inumpy/core/include -Ibuild/src.macosx-12-arm64-3.9/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/Users/moo/Library/Caches/pypoetry/virtualenvs/dex-ohlcv-qY1n4duk-py3.9/include -I/opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/include/python3.9 -Ibuild/src.macosx-12-arm64-3.9/numpy/core/src/common -Ibuild/src.macosx-12-arm64-3.9/numpy/core/src/npymath -c numpy/core/src/multiarray/array_assign_scalar.c -o build/temp.macosx-12-arm64-3.9/numpy/core/src/multiarray/array_assign_scalar.o -MMD -MF build/temp.macosx-12-arm64-3.9/numpy/core/src/multiarray/array_assign_scalar.o.d -faltivec -I/System/Library/Frameworks/vecLib.framework/Headers" failed with exit status 1
[end of output]
note: This error originates …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 pypi 和私人存储库安装依赖项,这是我的原始版本pyproject.toml,遵循官方文档:
[tool.poetry]\nname = "project_name"\nversion = "0.1.0"\ndescription = ""\nauthors = ["Me <me@gmyself.com>"]\n\n[[tool.poetry.source]]\nname = "private"\nurl = "https://url/to/private_repo"\nsecondary = true\n\n[tool.poetry.dependencies]\npython = "^3.9"\nFlask = "^2.1.2"\nprivate_package = "*"\n\n[tool.poetry.dev-dependencies]\nblack = "^22.6.0"\nmypy = "^0.961\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\nRun Code Online (Sandbox Code Playgroud)\n然而,运行poetry install诗歌会导致尝试安装私人存储库中的每个要求,至少这是我从生成的回溯中了解到的:
\xe2\x9d\xaf poetry install\nUpdating dependencies\nResolving dependencies... (0.2s)\n\n RepositoryError\n\n 403 Client Error: Forbidden for url: https://url/to/private_repo/mypy/\n\n at ~/.local/lib/python3.9/site-packages/poetry/repositories/legacy_repository.py:393 in _get\n 389\xe2\x94\x82 if response.status_code == 404:\n 390\xe2\x94\x82 return\n 391\xe2\x94\x82 response.raise_for_status()\n 392\xe2\x94\x82 except requests.HTTPError as e:\n \xe2\x86\x92 393\xe2\x94\x82 raise RepositoryError(e)\n …Run Code Online (Sandbox Code Playgroud) 我无法构建我的 docker 镜像。通过 Poetry 安装依赖项时,它会抛出“连接已满”错误。在我的主机上不会发生这种情况。我该如何解决这个问题。我需要增加池大小吗?如果是,怎么办?
我的 Dockerfile
FROM python:3.10-alpine AS python
ENV PYTHONUNBUFFERED=true
WORKDIR /app
FROM python as poetry
ENV POETRY_HOME=/opt/poetry
ENV POETRY_VIRTUALENVS_IN_PROJECT=true
ENV PATH="$POETRY_HOME/bin:$PATH"
RUN python -c 'from urllib.request import urlopen; print(urlopen("https://install.python-poetry.org").read().decode())' | python -
COPY pyproject.toml poetry.lock ./
RUN poetry install --no-interaction --no-ansi -vvv
Run Code Online (Sandbox Code Playgroud)