- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Poetry 构建带有 cython 扩展的包。现在我想为它编写测试(最好使用 nosetest)。问题是我需要预编译二进制文件,通常使用 setup.py build_clib build_ext --inplace
对我来说最好的解决方案是运行测试而不在目录中创建额外的 .py
或 .sh
文件,因为我已经有了 build.py
。在虚拟环境中安装包后运行测试就可以了,就像在readthedocs服务器上实现的一样。
我也熟悉了 taskipy
,所以我的 pyproject.toml
中的一些 bash 命令也可以。欢迎与 pyproject.toml
一起使用的任何其他包。
也许 Poetry 有任何钩子(Hook),因为它在创建 .whl
分发文件时进行了 cythonizes 和 comiles。
我们将不胜感激。
UPD Tox 看起来是合适的工具,但它在目录中时看不到 pyproject.toml
。非常欢迎在包或教程中使用 tox 和 cython 的 repos 链接。
最佳答案
如果扩展是分发的一部分,除了运行 poetry install
之外你不需要做任何事情 - poetry
将就地构建扩展作为项目的可编辑安装。
在其他情况下,您可以在测试中嵌入调用 distutils
命令作为套件设置/拆卸的一部分。我对 nose
不是很熟悉,但这里有一个简单的例子。假设我有一个 fib.pyx
(这是 Cython 书中的一个例子):
def fib(long n):
'''Returns the nth Fibonacci number.'''
cdef long a=0, b=1, i
for i in range(n):
a, b = a + b, a
return a
一个 test_fib.py
模块,用于构建 fib
库并在测试成功时将其删除:
from distutils.dist import Distribution
from distutils.core import Extension
from pathlib import Path
from Cython.Build import cythonize
fib_source = Path('fib.pyx')
# distutils magic. This is essentially the same as calling
# python setup.py build_ext --inplace
dist = Distribution(attrs={'ext_modules': cythonize(fib_source.name)})
build_ext_cmd = dist.get_command_obj('build_ext')
build_ext_cmd.ensure_finalized()
build_ext_cmd.inplace = 1
build_ext_cmd.run()
fib_obj = Path(build_ext_cmd.get_ext_fullpath(fib_source.stem))
# the lib was built, so the import will succeed now
from fib import fib
def teardown_module():
# remove built library
fib_obj.unlink()
# if you also want to clean the build dir:
from distutils.dir_util import remove_tree
remove_tree(build_ext_cmd.build_lib)
remove_tree(build_ext_cmd.build_temp)
# sample tests
def test_zero():
assert fib(0) == 0
def test_ten():
assert fib(10) == 55
您可能正在自定义 build.py
中自定义 setup_kwargs
。要重用此代码,请调整 dist
初始化,例如:
from build import build
setup_kwargs = {}
build(setup_kwargs)
dist = Distribution(attrs=setup_kwargs)
...
pytest
例子使用 pytest
可以更方便地组织事物。创建一个名为 conftest.py
的文件,其中包含提取到 Hook 的设置/拆卸代码:
# conftest.py
from distutils.core import Extension
from distutils.dist import Distribution
from distutils.dir_util import remove_tree
from pathlib import Path
from Cython.Build import cythonize
def pytest_sessionstart(session):
fib_source = Path('fib.pyx')
dist = Distribution(attrs={'ext_modules': cythonize(fib_source.name)})
build_ext_cmd = dist.get_command_obj('build_ext')
build_ext_cmd.ensure_finalized()
build_ext_cmd.inplace = 1
build_ext_cmd.run()
session.fib_obj = Path(build_ext_cmd.get_ext_fullpath(fib_source.stem))
def pytest_sessionfinish(session):
session.fib_obj.unlink()
现在测试变得更加清晰,设置代码在整个测试 session 中运行一次。上面的测试示例,重新访问:
from fib import fib
def test_zero():
assert fib(0) == 0
def test_ten():
assert fib(10) == 55
关于python - 诗歌 + Cython + 测试(Nosetests),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60501869/
当我将它加载到 Jenkins 中时,我首先注意到了这个项目的问题。更令人费解的是,我已经能够按如下方式重现它: 在项目的原始版本中,以下命令按预期运行测试: .venv/bin/python set
.noserc [nosetests] with-xunit 使用以下命令运行 Nose 测试 nosetests -w ./test/unit_test 当我使用nosetests 运行测试时,它不
嗨,所以我想知道是否有办法修复nosetests断言失败的输出。我有一个名为“t.py”的简单脚本: import unittest from nose.tools import assert_equ
我有一些功能: def reverse_number(num): try: return int(num) except ValueError: ret
我正在使用 Jenkins 设置一个 Python 持续集成服务器,nosetests 不断运行相同的测试两次。我不会在任何地方导入测试。这是我正在运行的命令: nosetests --with-xc
我正在尝试为随机输入数字游戏编写一些测试,但不太确定如何继续。 我正在关注来自 http://inventwithpython.com/chapter4.html 的 Python 游戏 使用文件 t
我正在(我必须)在 python 中动态创建测试以与 nosetests 一起运行,如下所示: def my_verification_method(param): """ descripti
我尝试用 Nose 测试但是当我运行下面的测试用例时 import unittest class TestSuite(unittest.TestCase): b = [] def se
使用 nose 1.3.7 和命令行选项后的文档列表 --xunit-prefix-with-testsuite-name Whether to prefix the class name under
NoseTests 的文档看起来非常简单,但我无法在任何地方找到初始设置的答案。我已经完成 pip install nosetests 并且一切顺利,但是当我在我的 django 项目的根目录下键入“
我正在尝试使用 nosetests 在这样的目录结构中运行我的测试 src - file1.py - ... test - helper.py - test_file1
我正在尝试编写一个包含生成器的测试类,并使用 nosetests 运行测试。但是,我对 nosetests 测试运行器似乎隔离测试类中的方法的方式感到困惑,因此它们不共享相同的 self: class
我正在使用 pycharm 并尝试运行单独的测试。我的“运行所有测试有效(使用 py.test),但我想运行特定测试。当我尝试运行 Nosetest 时,我收到此错误: django.core.exc
我编写的 Nose 单元测试相当完整,但结果是它们可能需要一段时间才能运行。我希望能够传递一个可选的命令行参数来运行一些快速版本的测试(例如,尝试一些可能的输入,而不是每个可能的输入)。 理想情况下,
对于我的代码导入的第 3 方模块,我从 nosetest 收到弃用警告。 有人知道如何消除这些警告吗? 我知道以下标志适用于同一代码的任意 python 运行: python -W ignore::
过去两天我一直在网上搜索,试图了解我在使用 WebTest 时遇到的问题。但是,我并不高兴,想知道这里是否有人可以提供帮助。 我正在使用 nose 在我正在开发的 Web 应用程序上运行测试,但似乎在
我是通过“艰难地学习 Python”来学习 Python 的,但我被困在了练习 46 ( http://learnpythonthehardway.org/book/ex46.html )。 我安装了
我试图将 nosetests 限制到特定目录,但是在测试运行期间,它包括我目标目录的父目录,这样做会引发错误。 以下是测试运行输出的关键元素: nose.importer: DEBUG: Add pa
我可以使用 nosetests 在 workflow 文件夹中运行测试: workflow maks$ nosetests .......... ---------------------------
我正在为用 python 编写的 Web 应用程序进行测试。 假设我的 test_login.py 模块中有 5 个测试。 每个测试都是一个类。 通常有一个扩展 TestFlow 类的基础测试,这是我
我是一名优秀的程序员,十分优秀!