有没有办法告诉tox测试自动化工具在安装所有软件包时使用PyPI镜像(显式测试依赖关系tox.ini和依赖关系setup.py)?
例如,pip install有一个非常有用的--use-mirrors选项,可以将镜像添加到包服务器列表中.
在我的virtualenv激活中,我喜欢设置export PYTHONPATH=<mypath>以便可以直接运行脚本。现在,当我tox从 virtualenv 中运行时,我收到以下令人震惊的红色警告:
WARNING: Discarding $PYTHONPATH from environment, to override specify PYTHONPATH in 'passenv' in your configuration.
Run Code Online (Sandbox Code Playgroud)
我确实理解这个警告,并且我对 tox 覆盖 PYTHONPATH 没什么意见,但这个警告很烦人。我可以离开 venv 并tox在没有它的情况下运行,但这也很烦人。
PYTHONPATH=""运行 tox 时明确归零是个好主意吗?
[testenv]
# Explicitely reset pythonpath to avoid the "discarding" warning
setenv = PYTHONPATH = ""
Run Code Online (Sandbox Code Playgroud)
tox这是否会影响我尚不知道的可能想要对路径执行的其他操作?
我使用tox来测试具有以下基本配置的 python 项目 ( tox.ini):
[tox]
envlist = py3
isolated_build = True
[testenv]
deps =
pytest
pytest-cov
commands =
pytest --cov {envsitepackagesdir}/foobar --cov-report xml --cov-report term
Run Code Online (Sandbox Code Playgroud)
不幸的是,该包的可选依赖项(如 中指定的setup.cfg)没有安装;原始点中相应的行是
pip install .[all]
Run Code Online (Sandbox Code Playgroud)
如何让 tox 安装所有可选依赖项?
嘿家伙所以我基本上使用tox来完成我的项目.
这是我的tox.ini文件
[tox]
envlist =
py27,
lint,
coverage
skipsdist = True
[testenv:py27]
deps = -rrequirements.txt
commands = python -m unittest discover -s ./tests
[testenv:coverage]
commands =
coverage run --source=tests -m unittest discover -s tests/
coverage html
coverage report
[testenv:lint]
commands = pylint ./foo
Run Code Online (Sandbox Code Playgroud)
每当我运行tox时,一切都在执行,基本上是linting,coverage.
但Tox正在显示所有事情的警告.
WARNING:test command found but not installed in testenv
Maybe you forgot to specify a dependency? See also the whitelist_externals envconfig setting.
Run Code Online (Sandbox Code Playgroud)
一切都成功但它仍然显示警告和错误
任何人都可以告诉我我做错了什么.
我的requirements.txt文件
requests==2.18.4
JsonForm==0.0.2
jsonify==0.5
jsonschema==2.6.0
JsonSir==0.0.2
python-dateutil==1.5
DateTime==4.2
urllib3==1.22
contextlib2==0.5.5
mock==2.0.0
patch==1.16
Run Code Online (Sandbox Code Playgroud) tox我通常使用which 调用来运行测试pytest。这种设置在许多项目中都运行良好。然而,在某些项目中,我有一些需要很长时间(几分钟)的测试。我不想每次都运行它们。我想装饰测试一样长。
像这样的东西:
$ tox --skip-long
Run Code Online (Sandbox Code Playgroud)
和
$ tox --skip-long
Run Code Online (Sandbox Code Playgroud) 查看tox global settingstox 文档中的部分,.tox工作目录的目录是在tox.ini所在目录中创建的:
toxworkdir={toxinidir}/.tox(PATH)\n Directory for tox to generate its environments into, will be created if \n it does not exist.\nRun Code Online (Sandbox Code Playgroud)\n\n有没有办法改变这个位置?
\n\n例如,我有一个项目如下:
\n\nawesome_project/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tox.ini\nRun Code Online (Sandbox Code Playgroud)\n\n我想tox.ini从awesome_projectdir 执行,但想将.toxdir写入而/tmp/.tox不是 in 中awesome_project/.tox。
感谢帮助。
\n我有一个内部 Python 包,我安装tox它
pip install git+ssh://git@bitbucket.org/org/repo.git
Run Code Online (Sandbox Code Playgroud)
这有效。
不起作用的是安装额外的server.
pip install git+ssh://git@bitbucket.org/org/repo.git[server]`
Run Code Online (Sandbox Code Playgroud)
git 克隆失败,错误代码为 128(无法克隆)
pip install git+ssh://git@bitbucket.org/org/repo.git [server]
Run Code Online (Sandbox Code Playgroud)
克隆有效,Invalid requirement: '[server]'(解析异常
pip install -e git+ssh://git@bitbucket.org/org/repo#egg=repo[server]
Run Code Online (Sandbox Code Playgroud)
无法检测“git+ssh://git@bitbucket.org/org/repo.git”的要求名称,请使用 #egg=your_package_name 指定一个
我想我可能会受到这个错误的影响:How can I install extras with `pip install git+ssh`?
我的(简化)tox.ini:
[tox]
skipsdist = True
envlist = begin,py35,py36,end
[testenv]
commands =
pip install -e git+ssh://git@bitbucket.org/org/repo#egg=repo[server]
Run Code Online (Sandbox Code Playgroud) 在我的tox.ini文件中,依赖项是通过requirements.txt也使用的文件安装的setup.py,如下所示:
该requirements.txt文件包含可接受的包范围django,具体取决于安装的 python 版本,如下所示:
Django>=1.11,<2 ; python_version == '2.7'
Django>=1.11,<3 ; python_version > '3'
Run Code Online (Sandbox Code Playgroud)
对于 python3,我想确保测试运行django 2.0以及django 2.1+默认安装的最新版本,遵守requirements.txt文件中指定的版本约束。为此,我使用命令强制安装所需的 django 版本,如下所示:
[tox]
envlist = {py27,py3}-django111,py3-django{20,21}
[testenv]
deps =
-r{toxinidir}/requirements.txt
commands =
django111: pip install 'Django>=1.11,<1.12'
py3-django20: pip install 'Django>=2.0,<2.1'
py3-django21: pip install 'Django>=2.1'
pytest
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以deps像这样添加到变量中:
[testenv]
deps =
-r{toxinidir}/requirements.txt
django111: Django>=1.11,<1.12
py3-django20: Django>=2.0,<2.1
py3-django21: Django>=2.1
commands =
pytest
Run Code Online (Sandbox Code Playgroud)
但pip不支持双重要求,即使版本约束的指定方式没有冲突,也会抛出错误。
commands …
使用 GitHub actions 矩阵策略,您可以指定您希望代码运行的 python 版本(例如),那么是否需要在 GitHub actions 工作流程中运行 tox?
是否有任何毒素提供了 gh 行动矩阵策略所没有的东西?
谢谢!
tox ×10
python ×9
virtualenv ×2
git ×1
pip ×1
pylint ×1
pypi ×1
pytest ×1
testing ×1
unit-testing ×1