在 python 中处理 util 函数

Handling util functions in python

在我们当前的 c 项目中,我们使用 python 脚本来支持和测试目的,例如单元测试、集成测试、基准测试和通信。

当前文件夹结构(大部分文件未显示):

.
|-- workingcopy1
|-- |-- config
|-- |-- |-- __init__.py
|-- |-- |-- parameters_one.py
|-- |-- |-- parameters_two.py
|-- |-- |-- parameters_three.py
|-- |-- src
|-- |-- |-- main_application_c_code.c
|-- |-- tests
|-- |-- |-- tools
|-- |-- |-- |-- display_communication_activity.py
|-- |-- |-- run_all_unit_tests.py
|-- |-- tools
|-- |-- |-- script1.py
|-- |-- |-- script2.py
|-- |-- |-- script3.py
|-- |-- utils
|-- |-- |-- python_utils
|-- |-- |-- |-- __init__.py
|-- |-- |-- |-- communication_utils.py
|-- |-- |-- |-- conversion_utils.py
|-- |-- |-- |-- constants.py
|-- |-- |-- |-- time_utils.py
|-- workingcopy2
...
|-- workingcopy3
...

有些 python 文件旨在作为脚本文件 ($ python script1.py) 执行,有些旨在作为模块包含在其他 python 文件中。

我们想要实现的是一种结构,使我们能够拥有可供以下人员使用的参数和实用函数:

也应该可以检查多个工作副本

到目前为止,所有脚本的顶部都有以下几行:

import os, sys
current_path = os.path.abspath(os.path.dirname(__file__))
sys.path.append(os.path.join(current_path, '..', 'utils')) # Variates depending on script location in file tree
sys.path.append(os.path.join(current_path, '..', 'config')) # Variates depending on script location in file tree
import python_utils.constants as constants
import config.parameters_one as parameters

大约有 20 多个脚本文件,这变得很难维护。有没有更好的方法来实现这个目标?

您应该将文件夹转换为 Python 模块,方法是向其中添加一个空的 __init__.py 文件。

此外,您可以添加 Python shebang,因此它们无需从 shell (Should I put #! (shebang) in Python scripts, and what form should it take?) 显式调用 Python 命令即可执行。

一旦您的文件夹成为模块,您只需添加主源路径,您就可以更轻松地导入子模块。 此外,您应该使用可以为您处理路径的虚拟环境 (virtualenv) (http://docs.python-guide.org/en/latest/dev/virtualenvs/)(也许还有允许您使用额外功能的 virtualenvwrapper)

我想添加一些您可以在此处使用的额外策略: python 的一个很酷的事情是一切都是一个对象,因此您可以将脚本模块作为变量导入并传递给 运行 的函数,初始化适当的路径。此外,该函数可以通过查看文件夹 "discover" 脚本并 walking 通过它。

同样,所有这些都可以通过预先 post 激活 virtualenvwrapper hooks.

轻松处理