我想用tox
两个virtualenvs运行我的单元测试,因为我的应用程序必须支持2个不同的Python版本.
我的问题是tox
需要a setup.py
,但我没有,因为我的应用程序不是模块并且有自己的安装程序.现在我不想经历自动化安装过程的麻烦setup.py
,我只想运行我的单元测试而不必写一个setup.py
.
那可能吗?或者我怎么能写一个"空"的setup.py,什么都不做?你能指点我一些关于这个主题的distutils
文档(文档解释了如何写一个有意义的setup.py
,而不是空的)?
我们的python项目有一个requirements.txt文件,列出了一些依赖模块.我们曾经使用过
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
安装这些依赖项.我们现在使用tox来构建测试环境.我的问题是我们如何直接通过requirements.txt安装模块.
以下是我们的tox.ini和requirements.txt:
tox.ini:
[tox]
envlist=py27
[testenv]
deps=pytest
boto
commands=py.test
Run Code Online (Sandbox Code Playgroud)
rquirements.txt:
boto
Run Code Online (Sandbox Code Playgroud)
有没有办法从tox.ini中删除"boto"并添加类似的内容
deps_files=requirements.txt
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题tox
,py.test
,coverage
和pytest-cov
:当py.test
与--cov
选项是从启动tox
,这似乎需要__init__.py
的文件tests
是不会立即明显的文件夹.
在撰写这篇文章时,我通过添加上述内容解决了最初的问题tests/__init__.py
,但到目前为止我还没有完全理解为什么它确实有效或无效,所以我仍然在寻求帮助.请参阅下面的详细信息.
我在SO上找到了一个相关的问题,但它只会让它更加混乱,因为答案似乎与我到目前为止所得到的相反: `py.test`和`__init __.py`文件
另请参阅此处的官方文档:py.test - 良好的集成实践(页面底部).
简化的项目结构:
setup.py
tox.ini
.coveragerc
project/
__init__.py
module1.py
module2.py
tests/
__init__.py (optional, an empty file)
test_module1.py
test_module2.py
Run Code Online (Sandbox Code Playgroud)
相关部分tox.ini
:
[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
pytest
coverage
pytest-cov
[pytest]
python_files = test_*.py
norecursedirs = .tox
Run Code Online (Sandbox Code Playgroud)
相关部分.coveragerc
:
[run]
branch = True
omit = project/tests/*
Run Code Online (Sandbox Code Playgroud)
现在,结果如下:
py.test --cov=project …
如何在Travis-CI中使用Tox测试不同的Python版本?
我有一个tox.ini
:
[tox]
envlist = py{27,33,34,35}
recreate = True
[testenv]
basepython =
py27: python2.7
py33: python3.3
py34: python3.4
py35: python3.5
deps =
-r{toxinidir}/pip-requirements.txt
-r{toxinidir}/pip-requirements-test.txt
commands = py.test
Run Code Online (Sandbox Code Playgroud)
它运行我的Python单元测试在几个Python版本,并完美地工作.
我想在Travis-CI中设置一个构建,当我将更改推送到Github时自动运行它,所以我有一个.travis.yml
:
language: python
python:
- "2.7"
- "3.3"
- "3.4"
- "3.5"
install:
- pip install tox
script:
- tox
Run Code Online (Sandbox Code Playgroud)
这在技术上似乎有效,但它在每个Python版本中冗余地运行我的所有测试......来自每个版本的Python.因此,需要5分钟的构建需要45分钟.
我尝试python
从我的yaml文件中删除列表,因此Travis只运行一个Python实例,但这导致我的Python3.5测试失败,因为找不到3.5解释器.显然,这是一个已知的限制,因为Travis-CI不会安装Python3.5,除非您在配置中指定了确切的版本......但它不会为其他版本执行此操作.
有没有办法解决这个问题?
Python测试工具tox
似乎旨在与virtualenv一起使用.它还适用于基于conda/anaconda的Python安装吗?
我正在尝试运行 tox 命令,但它显示错误
ValueError: Unable to find resource t64.exe in package pip._vendor.distlib
ERROR: python3.7: could not install deps [-rrequirements.txt];
v = InvocationError("'C:\\path\\test_tox\\.tox\\python3.7\\Scripts
\\python.EXE' -m pip install -rrequirements.txt", 2)
Run Code Online (Sandbox Code Playgroud)
已经尝试了互联网上提供的大多数解决方案,但似乎没有任何效果。我不确定这的根本原因是什么
requirements.txt
:
dvc
dvc[gdrive]
sklearn
pandas
pytest
tox
Run Code Online (Sandbox Code Playgroud)
我制作了我的项目,setuptools
我想用它进行测试tox
.我在变量中列出了依赖项并添加到setup()
参数(tests_require
和extras_require
)中.我的项目需要安装tests_require
测试中列出的所有依赖项,但pip install
不安装它们.
我尝试了这个,但它不起作用:
install_command = pip install {opts} {packages}[tests]
Run Code Online (Sandbox Code Playgroud)
如何安装测试依赖项而无需管理多个依赖项列表(即在两者test_requirements.txt
和tests_require
变量中列出所有依赖项)?
我在setenv中使用以下命令从我运行的地方导入环境变量,但有没有办法导入所有变量,这样我就不需要逐个导入了.
例如:{env:TEMPEST_CONFIG:}和{env:TEMPEST_CONFIG_DIR:}用于导入这两个变量.
[testenv:nosetests]
setenv =
TEMPEST_CONFIG={env:TEMPEST_CONFIG:}
TEMPEST_CONFIG_DIR={env:TEMPEST_CONFIG_DIR:}
deps = {[testenv]deps}
commands =
find . -type f -name "*.pyc" -delete
bash {toxinidir}/tools/setup.sh
nosetests --with-xunit {posargs}
Run Code Online (Sandbox Code Playgroud) TL;博士:
我正在为我的一个项目设置CI,在github上托管,使用tox
和travis-ci
.在构建结束时,我converalls
会将覆盖率报告推送到coveralls.io
.我想让这个命令'有条件' - 只有当测试在travis上运行时才能执行; 不是当他们在我的本地机器上运行时.有没有办法让这种情况发生?
细节:
我正在尝试测试的包是一个python包.我正在使用/计划使用以下"基础架构"来设置测试:
py.test
多种多样的.tox
.这让我可以在本地运行测试,这对我来说非常重要.我不想每次需要测试运行时都要推送到github.我也用numpy
,并matplotlib
在我的包,因此在运行测试周期的空洞的数量上travis-ci
似乎过于浪费在我身上.因此,放弃tox
和.travis.yml
单独使用不是一种选择.travis-ci
相关的测试脚本如下所示:
.travis.yml
language: python
python: 2.7
env:
- TOX_ENV=py27
install:
- pip install tox
script:
- tox -e $TOX_ENV
Run Code Online (Sandbox Code Playgroud)
tox.ini
[tox]
envlist = py27
[testenv]
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
deps =
pytest
coverage
pytest-cov
coveralls
commands =
py.test --cov={envsitepackagesdir}/mypackage --cov-report=term --basetemp={envtmpdir}
coveralls
Run Code Online (Sandbox Code Playgroud)
这个文件让我在本地运行测试.但是,由于最后的coveralls
呼叫,测试原则上失败了:
py27 …
Run Code Online (Sandbox Code Playgroud) 我想在安装时生成一个python文件.
我想既这项工作python setup.py develop
,python setup.py install
和pip install
.到现在为止还挺好.
但是我也希望这与tox一起使用.这是我遇到问题的地方.
我使用的方法是调整develop
和install
命令以在setup.py中生成源代码,如下所示:
# make code as python 3 compatible as possible
from __future__ import absolute_import, division, print_function, unicode_literals
import subprocess
import setuptools
import os.path
import distutils.core
from setuptools.command.develop import develop
from setuptools.command.install import install
# Build anltr files on installation
# this is such a mess... it looks like there are
# no common steps to develop and install
class AntlrDevelopCommand(develop): …
Run Code Online (Sandbox Code Playgroud) python ×10
tox ×10
setuptools ×2
travis-ci ×2
unit-testing ×2
build ×1
conda ×1
coverage.py ×1
coveralls ×1
distutils ×1
easy-install ×1
pip ×1
pytest ×1
setenv ×1
virtualenv ×1