PyPa setup.py 个测试脚本
PyPa setup.py test scripts
我正在尝试遵循 python packaging docs 中的建议和结构。在设置函数中,您可以使用 tests_require
指定测试的依赖项。您可以通过指定 scripts
在安装时 运行 脚本。但是在测试设置的情况下,我可以有一个只有 运行 的脚本吗?
编辑:我 setup.py 的重要部分
from setuptools import setup
# To use a consistent encoding
from codecs import open
from os import path
import subprocess
from setuptools import setup
from setuptools.command.test import test
class setupTestRequirements(test, object):
def run_script(self):
cmd = ['bash', 'bin/test_dnf_requirements.sh']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
ret = p.communicate()
print(ret[0])
def run(self):
self.run_script()
super(setupTestRequirements, self).run()
...
setup(
...
scripts=['bin/functional_dnf_requirements.sh'],
install_requires=['jira', 'PyYAML'],
tests_require=['flake8', 'autopep8', 'mock'],
cmdclass={'test': setupTestRequirements}
)
并不意味着scripts
中的文件会在安装包时执行。关键字 scripts
用于标记包中的 python 文件,这些文件旨在 运行 在包安装后作为独立程序(可能名称有点误导)。示例:您有一个文件 spam
,其内容为:
#!/usr/bin/env python
if __name__ == '__main__':
print('eggs!')
如果您通过将此文件添加到 setup.py
中的 scripts
来将其标记为脚本:
from setuptools import setup
setup(
...
scripts=['spam'],
)
安装包后,您可以 运行 spam
作为终端中的独立程序:
$ spam
eggs!
阅读 this tutorial 了解有关命令行脚本的更多信息。
现在,如果你想在测试中执行自定义代码,你必须覆盖默认的 test
命令。在你的 setup.py
:
from setuptools.command.test import test
class MyCustomTest(test):
def run(self):
print('>>>> this is my custom test command <<<<')
super().run()
setup(
...
cmdclass={'test': MyCustomTest}
)
现在,当 运行ning 测试时,您会注意到一个额外的打印:
$ python setup.py test
running test
>>>> this is my custom test command <<<<
running egg_info
...
running build_ext
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
编辑:如果你想在执行测试前运行自定义bash脚本,调整MyCustomTest.run()
方法。示例脚本 script.sh
:
#!/usr/bin/env bash
echo -n ">>> this is my custom bash script <<<"
在 setup.py
中调整 MyCustomTest
class:
import subprocess
from setuptools import setup
from setuptools.command.test import test
class MyCustomTest(test):
def run_some_script(self):
cmd = ['bash', 'script.sh']
# python3.5 and above
# ret = subprocess.run(cmd, stdout=subprocess.PIPE, universal_newlines=True)
# print(ret.stdout)
# old python2 versions
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
ret = p.communicate()
print(ret[0])
def run(self):
self.run_some_script()
super().run()
输出:
$ python setup.py test
running test
>>> this is my custom bash script <<<
running egg_info
writing spam.egg-info/PKG-INFO
writing dependency_links to spam.egg-info/dependency_links.txt
writing top-level names to spam.egg-info/top_level.txt
reading manifest file 'spam.egg-info/SOURCES.txt'
writing manifest file 'spam.egg-info/SOURCES.txt'
running build_ext
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
我正在尝试遵循 python packaging docs 中的建议和结构。在设置函数中,您可以使用 tests_require
指定测试的依赖项。您可以通过指定 scripts
在安装时 运行 脚本。但是在测试设置的情况下,我可以有一个只有 运行 的脚本吗?
编辑:我 setup.py 的重要部分
from setuptools import setup
# To use a consistent encoding
from codecs import open
from os import path
import subprocess
from setuptools import setup
from setuptools.command.test import test
class setupTestRequirements(test, object):
def run_script(self):
cmd = ['bash', 'bin/test_dnf_requirements.sh']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
ret = p.communicate()
print(ret[0])
def run(self):
self.run_script()
super(setupTestRequirements, self).run()
...
setup(
...
scripts=['bin/functional_dnf_requirements.sh'],
install_requires=['jira', 'PyYAML'],
tests_require=['flake8', 'autopep8', 'mock'],
cmdclass={'test': setupTestRequirements}
)
并不意味着scripts
中的文件会在安装包时执行。关键字 scripts
用于标记包中的 python 文件,这些文件旨在 运行 在包安装后作为独立程序(可能名称有点误导)。示例:您有一个文件 spam
,其内容为:
#!/usr/bin/env python
if __name__ == '__main__':
print('eggs!')
如果您通过将此文件添加到 setup.py
中的 scripts
来将其标记为脚本:
from setuptools import setup
setup(
...
scripts=['spam'],
)
安装包后,您可以 运行 spam
作为终端中的独立程序:
$ spam
eggs!
阅读 this tutorial 了解有关命令行脚本的更多信息。
现在,如果你想在测试中执行自定义代码,你必须覆盖默认的 test
命令。在你的 setup.py
:
from setuptools.command.test import test
class MyCustomTest(test):
def run(self):
print('>>>> this is my custom test command <<<<')
super().run()
setup(
...
cmdclass={'test': MyCustomTest}
)
现在,当 运行ning 测试时,您会注意到一个额外的打印:
$ python setup.py test
running test
>>>> this is my custom test command <<<<
running egg_info
...
running build_ext
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
编辑:如果你想在执行测试前运行自定义bash脚本,调整MyCustomTest.run()
方法。示例脚本 script.sh
:
#!/usr/bin/env bash
echo -n ">>> this is my custom bash script <<<"
在 setup.py
中调整 MyCustomTest
class:
import subprocess
from setuptools import setup
from setuptools.command.test import test
class MyCustomTest(test):
def run_some_script(self):
cmd = ['bash', 'script.sh']
# python3.5 and above
# ret = subprocess.run(cmd, stdout=subprocess.PIPE, universal_newlines=True)
# print(ret.stdout)
# old python2 versions
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
ret = p.communicate()
print(ret[0])
def run(self):
self.run_some_script()
super().run()
输出:
$ python setup.py test
running test
>>> this is my custom bash script <<<
running egg_info
writing spam.egg-info/PKG-INFO
writing dependency_links to spam.egg-info/dependency_links.txt
writing top-level names to spam.egg-info/top_level.txt
reading manifest file 'spam.egg-info/SOURCES.txt'
writing manifest file 'spam.egg-info/SOURCES.txt'
running build_ext
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK