我想用单元测试和包创建一个pybuilder项目.作为一个例子,修改了简单的python应用程序示例,将"helloworld"移动到打包"hello".
我的第一直觉是将包结构与"main"和"unittest"源相匹配:
+---src
+---main
| \---python
| \---hello
| helloworld.py
| __init__.py
|
\---unittest
\---python
\---hello
helloworld_tests.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
由于冲突的"hello"包,这不起作用.
BUILD FAILED - 'module' object has no attribute 'helloworld_tests'
Run Code Online (Sandbox Code Playgroud)
我看到pybuilder本身只是跳过单元测试中的顶级pybuilder包,但如果有多个顶级包则不会这样做.
我的第二个猜测是为单元测试创建额外的顶级包.
\---unittest
\---python
\---tests
| __init__.py
\---hello
helloworld_tests.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
有没有更好的解决方案或已建立的约定如何在包中组织python测试?
python unit-testing coding-style directory-structure pybuilder
如何在pybuilder中更改配置,以及pybuilder中的配置如何工作?
如何找出可能的配置值及其默认值,如何在commmmandline/in settings files中为每个项目/每个模块/覆盖或更改它们?哪些是设置文件?
我目前的项目是在 python 中。对于构建包生成 + 单元测试运行,我正在使用Pybuilder实用程序,它非常酷。我使用了车轮分布在其他系统中安装模块。
存在一个配置文件,应用程序从中读取某些设置。settings.ini 文件在以下路径中,
PROJECT-ROOT
|---- src
|-main
|-python
|- foo
|- conf
| |- settings.ini
|
|-test.py
|-access.py
Run Code Online (Sandbox Code Playgroud)
pybuilder 自动从 build.py 脚本创建 setup.py。问题是二进制轮分发没有打包非 python 文件(*.ini 文件)。在搜索 SO 帖子时,获得诸如在 MANIFEST.mf 中添加之类的信息将解决此问题。但是在添加的同时
project._manifest_include_directory('foo/conf', ('*.ini',))
Run Code Online (Sandbox Code Playgroud)
它只foo/conf/settings.ini在 sdist 中更新,而不是在 bdist(wheel) 上更新。我希望轮文件在 conf/ 目录中包含 settings.ini。在谷歌上搜索,得到了添加的信息 package_data在 setup.py字段将解决此问题的信息。但是使用 Pybuilder 的 build.py,我无法成功执行此操作。
任何人都可以帮我解决这个问题吗?
我的 gradle.build 文件中有以下 exec 命令。
exec {
workingDir System.getProperty("user.dir")
commandLine 'python3.6', 'buildscript.py'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'python3.6', '-m', 'virtualenv', 'env'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'source', 'env/bin/activate'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'pip3.6', 'install', 'pybuilder'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'pyb', '-E', 'env', '-X'
}
Run Code Online (Sandbox Code Playgroud)
这些都在执行 gradle build 时运行的构建任务中。理论上,这应该运行我创建的一个脚本,该脚本创建构建我的 python 程序所需的所有文件,然后它应该创建一个虚拟环境,激活它,在其中安装 pybuilder,然后运行 pybuilder。然而,命令:
exec {
workingDir System.getProperty("user.dir")
commandLine 'source', 'env/bin/activate'
}
Run Code Online (Sandbox Code Playgroud)
看来是失败了 它声称该目录/文件不存在,尽管它通过命令行工作。我不知道为什么会这样。这样做的全部目的是强制 Pybuilder 将我的程序依赖项安装到我创建的虚拟环境中。pyb -E env 从技术上讲应该为我激活虚拟环境,但无论出于何种原因,它都没有将我的依赖项安装到该虚拟环境。在我们的 Jenkins 节点上,这是一个问题,因为我们不希望它们全局安装,更不用说,我无论如何都没有 root 用户权限。
任何帮助将不胜感激。如果您知道另一种让 Pybuilder 正常工作的方法,那就同样好。
pybuilder ×4
python ×3
coding-style ×1
distutils ×1
gradle ×1
macos ×1
python-3.x ×1
unit-testing ×1
virtualenv ×1