gpt4 book ai didi

python - 在 python 中处理 util 函数

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:10 24 4
gpt4 key购买 nike

在我们当前的 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 文件中。

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

  • 测试代码
  • 其他实用程序代码
  • 用于监控我们系统的小型 Python 应用程序。 IE。自定义基准测试工具

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

直到这个日期,所有脚本的顶部都有以下几行:

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 多个脚本文件,这变得很难维护。有没有更好的方法来实现这一点?

最佳答案

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

此外,您还可以添加 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 的一个很酷的事情是一切都是对象,因此您可以导入脚本模块并将其作为变量传递给运行它们的函数,初始化适当的路径。此外,该函数可以通过查看文件夹和 walking 来“发现”脚本。通过它。

同样,所有这些都可以从 pre-post activate virtualenvwrapper hooks 轻松处理。 .

关于python - 在 python 中处理 util 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com