tox插件-直接运行所有内容(tox不创建虚拟环境)
tox-direct的Python项目详细描述
直接毒性
tox插件:在运行tox的同一个解释器中直接运行tox-envs。
tox-direct
是你通常不应该需要的东西,但在某些情况下这是很方便的。不建议将此方法用作基于tox的自动化工作流的常规部分。tox为所有自动化活动创建独立的虚拟环境是其可靠性的主要原因之一,也是统一基于命令行和ci自动化的关键。
曾经说过:生活是一团糟的,有时候你只想在宿主解释器中运行某个环境。为此,现在有tox-direct
。
todo:也许可以将其扩展到能够在basepython中运行,而不是在主机环境中运行(如果它们不同的话)。因为我还不需要它,所以没有实现它。
安装
pip install tox-direct
概念
tox-direct
首先要确保安全,并且在未安装tox-direct
时,还应该能够正常降级。为了确保这一点,在tox.ini
中没有引入新的键。它只在env名称、命令行参数或环境变量上工作。
为了安全起见,以下活动将在直接运行时默认停用:
- 包生成
- DEPS安装
- 项目安装
有两种方法可以请求在直接模式下运行的环境:static和on request。on-request变量还提供了一个yolo选项(您只活一次;),这意味着所有内容都在主机解释器中运行。这将改变宿主解释器,并且通常只有在tox已经在虚拟环境中运行时才是安全的,并且是有意义的(或者可以工作)。
静态形式
如果testenv名称包含单词direct如果安装了tox direct,它将以direct模式运行。如果这是共享项目的一部分,则应确保在未安装tox-direct
的情况下也能正常工作(也称为正常降级)。
按要求表格
tox-direct
添加命令行参数并检查环境变量以直接模式运行任意环境。
使用tox-direct installed
:
$ tox --help [...] optional arguments: --direct [tox-direct] deactivate venv, packaging and install steps - run commands directly (can also be achieved by setting TOX_DIRECT) (default: False) --direct-yolo [tox-direct] do everything in host environment that would otherwise happen in an isolated virtual environment (can also be achieved by setting TOX_DIRECT_YOLO env var (default: False)
警告:tox-direct
不考虑不同的基本python,这意味着使用不同的基本python运行环境对于目前的tox-direct
来说毫无意义:它们都将在安装tox的同一环境中运行(实际上一次又一次地执行相同的操作)。
基本示例
假设您已经在某个virtualenv中工作了,它看起来如下:
$ which python ~/.virtualenvs/tmp/bin/python $ pip list pip list Package Version ------------------ ------- [...] tox 3.13.1 tox-direct 0.2.2 [...] $ tox --version 3.13.1 imported from ~/.virtualenvs/tmp/lib/python3.6/site-packages/tox/__init__.py registered plugins: tox-direct-0.2.2 at ~/.virtualenvs/tmp/lib/python3.6/site-packages/tox_direct/hookimpls.py
您有一个项目的tox.ini
如下:
[tox]; this is the default - put here to be explicitskipsdist=False[testenv:direct-action]; also the default to be explicitskip_install=Falsedeps=pytestcommands= pip list which python[testenv:normal]whitelist_externals=whichskip_install=Falseusedevelop=Truecommands=which python
TUN毒性:
$ tox -qr Package Version ------------------ ------- [...] tox 3.13.1 tox-direct 0.2.2 [...] /home/ob/.virtualenvs/tmp/bin/python Package Version ------------------ ------- [...] pytest 4.6.3 example-project 1.3 [...] /home/ob/oss/tox-dev/tplay/.tox/normal/bin/python _________________ summary _______________________ direct-action: commands succeeded normal: commands succeeded congratulations :)
direct-action
env显示来自tmp
虚拟env的包,pytest未安装,项目本身也未安装。
警告:如果在命令中安装了某些内容(例如,包含pip install
调用),则仍会发生这种情况,因为命令将在不进行进一步检查的情况下执行。
tox仍然在.tox/direct-action
处创建envdir,但它不包含virutal环境-它仅用于内部记帐和日志记录。通篇使用的解释器是~/.virtualenvs/tmp
——tox的起始宿主解释器。
环境在tox提供的隔离环境中运行。Pytest已安装,项目本身也已安装(因为在开发模式下安装项目不需要任何包)。如果usedevelop设置为False
,tox将崩溃,并提示您不能在直接模式下执行此操作(因为sdist不是在直接模式下构建的)。
以直接模式运行正常环境:
tox -qre normal --direct Package Version Location ------------------ ------- -------- [...] tox 3.13.1 tox-direct 0.2.2 [...] /home/ob/.virtualenvs/tmp/bin/python ____________________ summary _______ normal: commands succeeded congratulations :)
这一次它在主机上运行,没有安装任何额外的程序。
现在是yolo版本:
tox -qre normal --direct-yolo Package Version Location ------------------ ---------- -------- [...] example-project 1.3 pytest 4.6.3 [...] tox 3.13.1 tox-direct 0.2.2 [...] /home/ob/.virtualenvs/tmp/bin/python ______________________ summary _________________________________ normal: commands succeeded congratulations :)
pytest和安装在主机envi中的项目环境。
注意:yolo选项之所以被称为yolo,是为了防止您在系统python中以根用户身份运行它:)。