在 tox 中安装本地包,不受之前从 GitHub 安装的影响

install local package in tox unencumbered by previous install from GitHub

问题

当我从 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 这 afaik 意味着 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)