在不受之前从 GitHub 安装的情况下在 tox 中安装本地包 tox.ini

问题描述

问题

当我从 GitHub 安装 pacakge 时,如何使用 tox 安装本地包而不引用随机时间?

上下文

this PR 中,我尝试构建和测试我的包 dbt-synapse,然后再将新的次要版本发布到 PyPI。在某些时候(新手举动),我想我尝试使用以下行直接从特定的 GitHub 提交安装包。

pip install -e git+https://github.com/dbt-msft/dbt-synapse.git@345d7cafcb08bac25d23867a2e22c0e9b741f603#egg=dbt_synapse

Here's a gist of the requirements.txt,tox.ini,setup.py and some other files

当我调用 tox -e integration-synapse 开始测试时,将 deps 中的实际包列为 -e. 而不是仅 .,导致从 GitHub 安装该包(请参阅下面的 integration-synapse installed: 行,为了清楚起见缩短了)!

当 deps 仅有 . 时,但它会将其列为已安装(这似乎也不正确):dbt-synapse @ file:///Users/anders.swanson/repos/dbt-synapse

不幸的是,两者都没有给我我知道应该发生的事情。

integration-synapse recreate: /Users/anders.swanson/repos/dbt-synapse/.tox/integration-synapse
integration-synapse installdeps: -rrequirements.txt,-e.
integration-synapse installed: [...],-e git+https://github.com/dbt-msft/dbt-synapse.git@345d7cafcb08bac25d23867a2e22c0e9b741f603#egg=dbt_synapse,[...]
integration-synapse runtests: PYTHONHASHSEED='1932234374'
integration-synapse runtests: commands[0] | /bin/bash -c '/Users/anders.swanson/repos/dbt-synapse/.tox/integration-synapse/bin/python -m pytest -v test/integration/synapse.dbtspec'
======================================================================================================================================== test session starts =========================================================================================================================================
platform darwin -- Python 3.6.12,pytest-6.2.1,py-1.10.0,pluggy-0.13.1 -- /Users/anders.swanson/repos/dbt-synapse/.tox/integration-synapse/bin/python
cachedir: .pytest_cache
rootdir: /Users/anders.swanson/repos/dbt-synapse
plugins: dbt-adapter-0.4.0
collected 1 item        

tox.ini

[tox]
skipsdist = True
envlist = integration-synapse

[testenv:integration-synapse]
basepython = python3
commands = /bin/bash -c '{envpython} -m pytest -v test/integration/synapse.dbtspec'
passenv = DBT_SYNAPSE_DB DBT_SYNAPSE_PORT DBT_SYNAPSE_PWD DBT_SYNAPSE_SERVER DBT_SYNAPSE_UID
deps =
    -rrequirements.txt
    -e.

解决方法

如果你想从一个干净的状态开始,你可以删除隐藏的.tox文件夹并从头开始。

此外,您可以运行 tox -r,它会重新创建环境。

为了从您的本地开发环境测试代码,您不必将您的包包含在 deps 列表 (-e.) 中。 tox 将从您的 setup.py 构建包。

嗯……会的。但是在您的 tox.ini 中,您指定了 skipsdist = True,这意味着 tox 不应构建包。

您的 tox.ini 中还有一些问题,例如unit 和 flake8 envs 什么都不做。

为什么要使用 /bin/bash -c 结构?

不幸的是,我遗漏了一些头文件,所以我无法运行您的 tox.ini 文件,但我会像这样创建一个 tox.ini 文件...

[tox]
envlist = py36,py37,py38,py39,integration-synapse,flake8

[testenv]
deps = whatever needed for your unit tests
commands = python -m pytest ...unit tests...

[testenv:integration-synapse]
deps =
    pytest
    pytest-dbt-adapter
commands =
    python -m pytest -v test/integration/synapse.dbtspec
passenv = DBT_SYNAPSE_DB DBT_SYNAPSE_PORT DBT_SYNAPSE_PWD DBT_SYNAPSE_SERVER DBT_SYNAPSE_UID

[testenv:flake8]
skipsdist = True
deps = flake8
commands = flake8 setup.py ... (and more)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...