标签: python-poetry

从 python 2.7 升级到 3.7 时的诗歌和 python 版本错误

我已经开始学习自学 Python。该项目在我的 mac 上启动,安装版本为 python 2.7。在朋友的建议下,我安装了诗歌来进行依赖处理。这非常有效。

不久之后,我意识到 python 2.7 是多么过时并尝试升级。我是通过自制软件做到的,这似乎打破了很多。 python --versoin仍然显示 2.7,虽然我可以调用python3 --version并查看正确的我的项目似乎仍然停留在 2.7 上,即使#!/usr/bin/env python3是在文件的顶部。更糟糕的是poetry up,在项目中执行不会升级我的 python 依赖项并更改 pyproject.toml 中的该值会阻止一切。我有一个依赖似乎在此过程中已经损坏,但无法对损坏的诗歌/python 版本进行任何处理。错误在下面的诗中。

所以从顶部开始,我如何开始使用正确版本的python?

我的 bash_profile 有

PATH="/Library/Frameworks/Python.framework/Versions/3.7/bin:${PATH}"
export PATH
Run Code Online (Sandbox Code Playgroud)
poetry install

[EnvCommandError]                                                                           
Command ['/Users/username/Library/Caches/pypoetry/virtualenvs/PyGameEngine-py2.7/bin/python', '-'] errored with the following return code -6, and output:           
dyld: Library not loaded: @executable_path/../.Python                                                    
  Referenced from: /Users/username/Library/Caches/pypoetry/virtualenvs/PyGameEngine-py2.7/bin/python  
  Reason: image not found                                                                                
input was : import sys                                                                                   
if hasattr(sys, "real_prefix"):                                                                          
    print(sys.real_prefix)                                                                               
elif hasattr(sys, "base_prefix"):                                                                        
    print(sys.base_prefix)                                                                               
else:                                                                                                    
    print(sys.prefix)                     
Run Code Online (Sandbox Code Playgroud)

upgrade python-2.7 python-3.x python-poetry

5
推荐指数
1
解决办法
1553
查看次数

用诗歌管理 git 子模块的依赖关系

我们有一个存储库app-lib,它在其他 4个存储库中用作子模块,并且在每个存储库中,我都必须为子模块添加所有依赖项。因此,如果我在app-lib 中添加/删除依赖项,我必须调整所有其他存储库。我有办法告诉 Poetry 安装根 repo 依赖项和子模块中的依赖项吗?

my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }参数似乎仅适用于文件。而且我不知道将所有轮子存储在app-lib 中是否是好的设计。

我有点想合并根 toml 文件依赖项和子模块 toml 文件依赖项,然后安装它们。

谢谢

python dependencies git-submodules python-poetry

5
推荐指数
1
解决办法
852
查看次数

如何创建一个空的 python 包?

我想使用诗歌工具创建一个空(元)包,主要是为了简化将依赖项列表组合在一起的过程。如果我按如下方式创建 project.toml:

[build-system]
requires = ["poetry"]

[tool.poetry]
name = "metapackage"
version = "1.0.0"
description = "My empty metapackage"
authors = ["Me"]
license = "MIT"

[tool.poetry.dependencies]
numpy = "*"
Run Code Online (Sandbox Code Playgroud)

然后执行poetry build,出现错误:

$ mkdir -p metapackage
$ python -m poetry build --no-interaction --format wheel -vvvUsing virtualenv: /Users/duncan/opt/miniconda3/envs/py37
Building metapackage (1.0.0)

[ValueError]
metapackage is not a package.

Traceback (most recent call last):
  File "/Users/duncan/opt/miniconda3/envs/py37/lib/python3.7/site-packages/clikit/console_application.py", line 131, in run
    status_code = command.handle(parsed_args, io)
  File "/Users/duncan/opt/miniconda3/envs/py37/lib/python3.7/site-packages/clikit/api/command/command.py", line 120, in handle
    status_code = self._do_handle(args, …
Run Code Online (Sandbox Code Playgroud)

python python-packaging python-poetry

5
推荐指数
1
解决办法
2630
查看次数

使用 tox 运行脚本时诗歌依赖项不可用

我有一个使用诗歌和毒素的Python项目。它有源代码、测试和脚本(juptext 笔记本)。我无法在脚本中导入开发依赖项,但可以在测试中导入。

当我遇到这个问题时,我创建了以下最小示例。一开始不行,后来我就摆弄了一下,现在可以了。因此,我删除了存在实际问题的项目,这样除了项目名称、位置、虚拟环境和 .git 目录之外,它是无法区分的,但这仍然不起作用。

更新删除所有构建工件和最小示例的 virtualenv 使其再次停止工作

更新将行添加到scripts: poetry installtox 命令修复了最小的示例

源代码、测试和脚本的布局如下

foo
  +--foo
  |  +--__init__.py
  |
  +--tests
  |  +--__init__.py
  |  +--test_foo.py
  |
  +--scripts
  |  +--foo_script.py
  |
  +--pyproject.toml
  +--tox.ini
Run Code Online (Sandbox Code Playgroud)

这些文件要么是空的,要么如下所示:

foo_script.py

import requests
Run Code Online (Sandbox Code Playgroud)

测试_foo.py

import requests
import pytest

def test():
    assert True
Run Code Online (Sandbox Code Playgroud)

pyproject.toml

[tool.poetry]
name = "foo"
version = "0.1.0"
description = ""
authors = ["foo maker"]

[tool.poetry.dependencies]
python = "^3.7"
requests = "*"

[tool.poetry.dev-dependencies]
pytest = "^4.6"

[build-system]
requires = ["poetry>=0.12"]
build-backend …
Run Code Online (Sandbox Code Playgroud)

python tox python-poetry

5
推荐指数
1
解决办法
4871
查看次数

从 pyproject.toml 文件更新包版本的最佳方法

我的工作流程在包的init .py 中嵌入了一个__version__包变量。当使用诗歌(或类似的)更新包版本时,我也希望我的嵌入变量得到更新。poetry version patch__version__

我目前使用预提交挂钩(git),如下所示:

#!/bin/bash


read name version < <(poetry version)

read pversion < <(python -c  "from ${name} import __version__;print(__version__)")

init=${name}/__init__.py

if [[ "${pversion}" != "${version}" ]]; then
    (
cat <<-UPDATEINIT
""" ${name} package"""
__version__ = "${version}"
UPDATEINIT
    ) >$init
    git add $init
fi
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法我错过了,因为那个钩子看起来有点“笨重”。

python-3.x python-poetry

5
推荐指数
1
解决办法
1127
查看次数

如何用诗歌管理可编辑的共享库?

我有 2 个 python 项目 A 和 B

  • A依赖于B
  • B 是一个共享库,被其他项目使用
  • B 构建和安装需要很长时间

以前,当我必须在新计算机上设置开发环境时,工作流程是:

  1. 创建虚拟环境
  2. git 克隆 A 和 B
  3. 运行 B 的设置开发
  4. 运行A的设置开发

现在我可以编辑 A 和 B 并将更改推送到 git,而不必每次都在 A 和 B 上重新运行安装程序。

现在,我想将诗歌融入我的工作流程中。理想情况下,我希望能够git clone A运行poetry install A并让它镜像我的上述设置,但是我在通过 A 的设置安装 B 的同时仍然保持 B 可编辑时遇到了麻烦。基于这个线程,似乎在两个项目之间共享 venv 是不可能的。

我的权宜之计是:

  • git 克隆 A 和 B
  • 诗歌装置B
  • 编辑A的pyproject.toml指向我手动安装的B目录( B = {path = "../B/"})
  • 诗歌装置A

我真的不喜欢这个工作流程,因为 A 的 pyproject.toml 现在只能在我的计算机上运行。我查看了问题线索和诗歌文档,但找不到处理这种情况的解决方案。非常感谢任何和所有建议。

A的pyproject.toml

[tool.poetry.dependencies]
python = "^3.7"
# B …
Run Code Online (Sandbox Code Playgroud)

python git virtualenv continuous-deployment python-poetry

5
推荐指数
1
解决办法
2295
查看次数

如何使用 docker 和 monorepo 组织共享库

我拥有的

我有 2 个 python 应用程序共享一些代码,足以让我尝试将共享部分隔离到模块/包/库中(我故意使术语含糊不清,因为我不确定解决方案是什么) 。我的所有代码都在单一存储库中,因为我希望克服管理比我们团队成员更多的存储库的一些烦恼。

目前我的文件布局如下所示:

+ myproject
  + appA
  | + python backend A
  | + js frontend
  + appB
  | + B stuff
  + libs
    + lib1
    + lib2
Run Code Online (Sandbox Code Playgroud)

appAappB使用lib1lib2(它们本质上是抽象共享数据库的数据模型)。appA是一个具有多个组件的Web应用程序,并非所有组件都是Python的。它被部署为涉及一堆容器的 Docker 堆栈。我用诗歌来管理我的依赖关系,以确保可重复的构建等...每个 python 组件(appAappB...)都有自己的pyproject.toml文件,虚拟环境等...

appB是单独部署的。

如果有什么区别的话,所有开发都在 Linux 上进行。

我需要的

我正在寻找一种干净的方法来处理库:

  • 的开发appA是在本地docker-compose设置中完成的。后端会在文件更改时自动重新加载(使用 docker 卷),我希望库中的更改也能发生这种情况。
  • 开发appB更简单,但正在迁移到 docker,所以问题将是相同的。

我尝试过的

  • 我最初的“解决方案”是将 libs 文件夹复制到临时位置以在appA. …

python docker docker-compose python-poetry

5
推荐指数
1
解决办法
2197
查看次数

Python-poetry 错误:设置 settings.virtualenvs.in-project 不存在

我正在设置poetry在项目目录中创建虚拟环境。我进入了:

诗歌配置 settings.virtualenvs.in-project true

并收到错误

[ValueError] 设置 settings.virtualenvs.in-project 不存在

还有文字

home/alex/.poetry/lib/poetry/_vendor/py2.7/subprocess32.py:149: RuntimeWarning: _posixsubprocess 模块未被使用。如果您的程序使用线程,子进程的可靠性可能会受到影响。“程序使用线程。”,运行时警告)

我该如何解决错误?

似乎错误与python的版本有关。

我使用的是 Ubuntu 16.04 版本

诗歌版本1.0.5

python python-poetry

5
推荐指数
1
解决办法
2309
查看次数

为什么 pip freeze 会返回一些“乱码”而不是 package==VERSION?

这是我所做的:

? pip freeze
aiohttp @ file:///Users/aiven/Library/Caches/pypoetry/artifacts/50/32/0b/b64b02b6cefa4c089d84ab9edf6f0d960ca26cfbe57fe0e693a00912da/aiohttp-3.6.2-py3-none-any.whl
async-timeout @ file:///Users/aiven/Library/Caches/pypoetry/artifacts/0d/5d/3e/630122e534c1b25e36c3142597c4b0b2e9d3f2e0a9cea9f10ac219f9a7/async_timeout-3.0.1-py3-none-any.whl
attrs @ file:///Users/aiven/Library/Caches/pypoetry/artifacts/7f/e7/44/32ca3c400bb4d8a2f1a91d1d3f22bbaee2f4727a037aad898fbf5d36ce/attrs-20.2.0-py2.py3-none-any.whl
chardet @ file:///Users/aiven/Library/Caches/pypoetry/artifacts/c2/02/35/0d93b80c730b360c5e3d9bdc1b8d1929dbd784ffa8e3db025c14c045e4/chardet-3.0.4-py2.py3-none-any.whl
...
Run Code Online (Sandbox Code Playgroud)

点子版本:

? pip -V
pip 20.2.3 from /Users/aiven/projects/foobar/venv/lib/python3.8/site-packages/pip (python 3.8)
Run Code Online (Sandbox Code Playgroud)

我期待这样的事情:

> pip freeze
foo==1.1.1
bar==0.2.1
Run Code Online (Sandbox Code Playgroud)

pip freeze -h 不是很有帮助...

对于上下文:我使用poetry.

python pip python-poetry

5
推荐指数
1
解决办法
230
查看次数

相当于诗歌中的`python setup.py develop`

使用setuptools,我可以使用python3 setup.py develop并且python3可以找到我的开发目录,而无需设置PYTHONPATH或运行安装。当前开发目录中的任何更改都可以立即使用,无需python3 setup.py develop/install再次运行。这在开发过程中节省了相当多的时间。

有诗的等价物吗?

更新有一个功能请求https://github.com/python-poetry/poetry/issues/1214

setuptools python-poetry

5
推荐指数
1
解决办法
1336
查看次数