我决定使用poetry,一切都很顺利,根据需要添加了现有项目模块的依赖项。\n当我尝试添加 googlesearch-python 包时,我收到了以下 SolverProblemError:
\nRun Code Online (Sandbox Code Playgroud)(.env) C:\\Users\\marti\\OneDrive\\Documents\\Master_s_thesis\\Code\\Mastersthesis>poetry add googlesearch-python\nUsing version ^2020.0.2 for googlesearch-python\n\nUpdating dependencies\nResolving dependencies...\n\n SolverProblemError\n\n Because googlesearch-python (2020.0.2) depends on beautifulsoup4 (4.9.1) which depends on soupsieve (<2.0), googlesearch-python (2020.0.2) requires soupsieve (<2.0).\n And because googlesearch-python (2020.0.2) depends on soupsieve (2.0.1), googlesearch-python is forbidden.\n So, because no versions of googlesearch-python match >2020.0.2,<2021.0.0\n and mastersthesis depends on googlesearch-python (^2020.0.2), version solving failed.\n\n at ~\\.poetry\\lib\\poetry\\puzzle\\solver.py:241 in _solve\n 237\xe2\x94\x82 packages = result.packages\n 238\xe2\x94\x82 except OverrideNeeded as e:\n 239\xe2\x94\x82 return self.solve_in_compatibility_mode(e.overrides, …
我使用以下命令创建了本地 pypi 服务器
\ndocker run -p 5151:8080 -v ~/.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest -P .htpasswd packages\nRun Code Online (Sandbox Code Playgroud)\n然而,当我尝试使用诗歌上传我的包时,我得到:
\npoetry publish -r myrepo\n\n\nPublishing mypack (0.1.0) to myrepo\n - Uploading mypack-0.1.0-py3-none-any.whl 100%\n\n UploadError\n\n HTTP Error 405: Method Not Allowed\n\n at ~/.poetry/lib/poetry/publishing/uploader.py:216 in _upload\n 212\xe2\x94\x82 self._register(session, url)\n 213\xe2\x94\x82 except HTTPError as e:\n 214\xe2\x94\x82 raise UploadError(e)\n 215\xe2\x94\x82 \n \xe2\x86\x92 216\xe2\x94\x82 raise UploadError(e)\n 217\xe2\x94\x82 \n 218\xe2\x94\x82 def _do_upload(\nRun Code Online (Sandbox Code Playgroud)\n我将本地存储库定义如下:
\n诗歌配置 repositories.myrepo http://localhost:5151/simple
\n和
\n诗歌配置 http-basic.myrepo 用户密码
\n我错过了什么?
\n对于我的项目,我有时喜欢创建不同的 git 分支,这些分支使用不同的 python 包来尝试完成相同的任务,这样我就可以看到我最喜欢使用哪个分支(即哪一组包)。相应地,我为每个分支创建单独的环境。
我更熟悉 Anaconda 和 conda 包管理器工具,它允许为单个项目轻松创建多个环境,只需为每个环境提供单独的 .yml 文件,并激活/停用与每个 .yml 文件关联的环境名称。
有没有办法用诗歌来做类似的事情?通过玩弄诗歌和我读过的文档,当您位于用诗歌初始化的目录中时,诗歌会自动识别虚拟环境,并且poetry.lock该环境有一个文件。poetry.lock有没有一种方法可以为单个项目设置多个文件以拥有多个诗歌环境,并在它们之间进行切换?或者如果没有,诗歌中是否有其他方式来模拟我使用 conda 描述的体验?
我喜欢从精心设计的 Python 项目中获取灵感。
最后一个给我启发的是诗歌库。
我从中复制了很多,但这篇文章的主题是black和isort。
两者都配置良好pyproject.toml:
[tool.isort]
profile = "black"
...
known_first_party = "poetry"
[tool.black]
line-length = 88
include = '\.pyi?$'
exclude = '''
/(
...
)/
'''
Run Code Online (Sandbox Code Playgroud)
格式设置如下Makefile:
format: clean
@poetry run black poetry/ tests/
Run Code Online (Sandbox Code Playgroud)
我认为运行make format会运行black,它将在内部运行isort,但是当我运行时isort .,它随后正确地格式化了导入语句。然后好像black没跑isort。
问:内部运行吗?blackisort
我有一个my-project使用子模块的项目my-submodule。子模块具有与my-project&poetry.lock文件不同的依赖关系pyproject.toml。
my-project我已经安装了使用所需的依赖项poetry add。这些 deps 已安装,并在 的根文件夹中创建poetry.lock&文件。pyproject.tomlmy-project
现在,我还想安装子模块的依赖项。假设子模块的路径是path/to/submodule/from/root,如何安装子模块的依赖项并使这些依赖项反映在poetry.lock&中pyproject.toml文件中?
这里已经提出了类似的问题:Managing dependency of git submodules with Poetry,但那里没有提供解决方案。
使用诗歌,有时在检查依赖关系时诗歌会指示由于兼容性问题而无法安装某些东西。
例如,我的项目中有numpy==1.19.2. 现在,当我尝试安装时,pandas我得到以下信息
$: poetry add pandas
The currently activated Python version 3.6.9 is not supported by the project (>=3.8,<3.11).
Trying to find and use a compatible version.
Using python3.9 (3.9.7)
Using version ^1.3.4 for pandas
Updating dependencies
Resolving dependencies... (0.6s)
SolverProblemError
Because no versions of pandas match >1.3.4,<2.0.0
and pandas (1.3.4) depends on numpy (>=1.20.0), pandas (>=1.3.4,<2.0.0) requires numpy (>=1.20.0).
So, because my_project depends on both numpy (1.19.2) and pandas (^1.3.4), version solving failed.
Run Code Online (Sandbox Code Playgroud)
如何确定 …
我想使用诗歌分发一个 python 包并使其作为 cli 可执行,就像black, pipenv, poetry,flake8朋友一样。
示例用法如下:
\npython -m my-package [args]\nRun Code Online (Sandbox Code Playgroud)\n到目前为止,我已经成功构建了一个轮子并使用以下配置将其安装在 docker 映像上:
\npyproject.toml
[tool.poetry]\nname = "my-package\nversion = "0.1.0"\ndescription = "A cli tool"\nauthors = []\npackages = [\n { include = "src/main.py" },\n]\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\nRun Code Online (Sandbox Code Playgroud)\n构建命令:
\npoetry build -f wheel\npoetry export -o dist/requirements.txt\nRun Code Online (Sandbox Code Playgroud)\nDocker 镜像:
\nFROM python:3.8-slim as base\n\nCOPY dist/requirements.txt /requirements.txt\nRUN pip install --no-cache-dir --upgrade -r /requirements.txt\nARG APP_VERSION\nCOPY …Run Code Online (Sandbox Code Playgroud) 每当我尝试添加带有诗歌的新包(使用poetry add <package_name>)时,我都会收到以下连接错误:
ConnectionError\n\n ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))\n\n at ~/.poetry/lib/poetry/_vendor/py3.8/requests/adapters.py:498 in send\n 494\xe2\x94\x82 low_conn.close()\n 495\xe2\x94\x82 raise\n 496\xe2\x94\x82 \n 497\xe2\x94\x82 except (ProtocolError, socket.error) as err:\n \xe2\x86\x92 498\xe2\x94\x82 raise ConnectionError(err, request=request)\n 499\xe2\x94\x82 \n 500\xe2\x94\x82 except MaxRetryError as e:\n 501\xe2\x94\x82 if isinstance(e.reason, ConnectTimeoutError):\n 502\xe2\x94\x82 # TODO: Remove this in 3.0.0: see #2811\nRun Code Online (Sandbox Code Playgroud)\n我已经尝试过的事情:
\n环境:我使用的是诗歌版本 1.1.12,带有 WSL-2。
\n File "project.py", line 5, in <module>
from tkinter.filedialog import askopenfilenames
ModuleNotFoundError: No module named 'tkinter'
Run Code Online (Sandbox Code Playgroud)
当我想用诗歌运行 python project.py 运行我的项目时,这种情况总是会发生,但如果我本机运行它就可以完美地工作。所以我猜问题是将 Tkinter 添加到 .toml 文件中,但是当我将 tk 添加到依赖项时,它无法正常工作。我应该怎么办?
如何使用 PyPy (最好pypy3)而不是标准 python poetry?
也就是说,应该存储什么pyproject.toml?还需要其他改变吗?
python-poetry ×10
python ×7
anaconda ×1
connection ×1
dependencies ×1
docker ×1
isort ×1
pypiserver ×1
pypy ×1
python-3.x ×1
python-black ×1
python-wheel ×1
tkinter ×1
wsl-2 ×1