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安装
  • 项目安装

有两种方法可以请求在直接模式下运行的环境:staticon 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-actionenv显示来自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中以根用户身份运行它:)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java线程;创建一个单独的线程来定期执行某些操作   用java将SonarQube升级到5.2失败。util。同时发生的CancellationException:空   在线程对象上调用start时,线程上设置的java优先级无效   java如何在不使用reduce()或last()折叠的情况下获取通量的最后一项   java如何从ArrayList中获取元素?   应用了逻辑的JavaTwitterAPI   在这种情况下,怎样才能不让自己重复?安卓的java   JavaAndroid:线程可运行和处理程序。在run方法中发布问题(Handler.postXX在预期情况下不会按时运行)   java log4j grok与管道故障   使用循环返回命令选项时出现问题/仅运行一个命令(JAVA)   java双重比较问题   使用vertx的JWT公钥/私钥身份验证中的java握手   用Java将WMA和AAC音频转换为MP3   解析字符串java get index   与具有不同数据类型的密钥同名的java JSON