问题描述
问题
当我从 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)