【问题标题】:Use own package in tox+pytest在 tox+pytest 中使用自己的包
【发布时间】:2019-03-01 05:04:58
【问题描述】:

我有想要测试的 python 应用程序。 这个应用程序正在导入很多包,例如:

import time
import sys
.
.
.
import mypackage

mypackage 是我自己的包。

当我启动应用程序时,一切正常。但是,一旦我尝试运行 tox 来测试它,我就会收到以下错误:

Collecting mypackage
Could not find a version that satisfies the requirement mypackage (from versions: )
No matching distribution found for mypackage

我了解 tox 无法安装 mypackage 依赖项,因为它不在 pip 中。您知道如何在此类应用程序上运行 tox 或如何使用 tox 安装自己的软件包吗?

我的 tox.ini 文件的内容:

[tox]
envlist = py36

[testenv]
deps =
    pytest
    coverage
    time
    sys
    mypackage
commands =
    python setup.py develop
    coverage erase
    coverage run -m pytest myapp/tests/
    coverage report --omit='.tox/*' 

【问题讨论】:

    标签: python pytest tox


    【解决方案1】:

    Tox 遍历 deps 中描述的所有包,并尝试使用pip install 安装所有包。如pip installing packages page 所述,您可以:

    pip install /path/my/package

    这意味着 deps 部分不仅接受来自 PyPI 的包,还接受路径指定的本地包。

    只需将带有 setup.py 的包的根路径添加到 deps 部分即可。

    deps =
        pytest
        coverage
        time
        sys
        /projects/py/mypackage
    

    【讨论】:

    • 这里有什么特别的陷阱吗?我尝试在 tox.ini deps 中添加一个条目,其中包含带有 mypackage 的 setup.py 文件的目录的绝对路径。但是 tox 似乎并没有以安装该软件包的方式调用 pip 。错误是ERROR: code: could not install deps [pytest, coverage, pytest-cov, /Users/me/git/github/mywork/mypackage]; v = InvocationError('/Users/me/git/github/mywork/.tox/code/bin/python -m pip install pytest coverage pytest-cov mypackage', 1)
    【解决方案2】:

    如果您使用pip 而不是python setup.py,我认为这应该可以通过多种方式实现:

    1. 您可以通过pip install /path/to/private/dependency 手动安装依赖项,可以在安装要测试的包之前或在同一行中。这具有(次要)优势,您还可以使用-e 在可编辑模式下安装依赖项。
    2. 您可以使用pip install--find-links 选项,如对this question 的回答中所述 - 这具有依赖处理本身自动完成的优点,您只需指定自己的安装包并告诉pip在哪里可以找到其他东西。重要的是,这也可以使用 environment variables 指定,因此您不必在 git 存储库的任何地方硬编码本地路径。

    注意:我不确定选项 (2) 是否仅适用于 git 存储库或仅适用于适当的档案...我记得不久前与 --find-links 有过相关问题.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2019-12-06
      • 2021-10-12
      • 1970-01-01
      • 2021-11-09
      相关资源
      最近更新 更多