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

Joe*_*ley 5 python tox python-poetry

我有一个使用诗歌和毒素的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 = "poetry.masonry.api"
Run Code Online (Sandbox Code Playgroud)

毒物文件

[tox]
envlist = test, scripts
isolated_build = true
skipsdist = true

[testenv]
basepython = python3.7
whitelist_externals =
    pytest
    bash
commands =
    test: pytest
    scripts: bash -c 'python3 scripts/*.py'
Run Code Online (Sandbox Code Playgroud)

当我运行 tox 时,我得到

[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 = "poetry.masonry.api"
Run Code Online (Sandbox Code Playgroud)

Joe*_*ley -1

首先我需要安装依赖项poetry install。然后附加poetry run到命令的开头以启用依赖项。同样运行像这样的 python 脚本只会运行第一个程序,将其他程序的名称作为参数传递给第一个程序。而是使用for f in scripts/*.py; do python "$f"; done(参见此处

全部一起

poetry install
poetry run bash -c 'for f in scripts/*.py; do python "$f"; done'
Run Code Online (Sandbox Code Playgroud)