gpt4 book ai didi

Python导入依赖

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:18 26 4
gpt4 key购买 nike

我正在动态创建一些我想在包装器中运行的 python 代码。这是一个过于简化的例子。

[包装器.py]

import cv2
img = cv2.imread('pic.png',0)

__import__("fragment")

cv2.imshow('pic',img)

[片段.py]

img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)

我希望包装器设置任何导入和变量,然后导入将执行某些操作(即使图像灰度化)的片段,然后再执行一些标准化操作(即显示图像)。

片段会发生变化(遗传算法),所以我更愿意将它们与设置分开,设置将保持不变,只会让片段的操作变得更加复杂。

当我运行该程序时,由于未定义 cv2 和 img(范围错误),我在片段上出现依赖性错误。有没有办法通过更正我上面使用的方法或其他方法来实现这一点?

我希望我也可以在 ram 中创建文件的组合,然后执行它或使用包含所有需要的包装的自身版本覆盖片段,但我想看看是否有什么东西清洁第一。

真诚的,保罗。

最佳答案

The fragments will be changing (genetic algorithm) so I would prefer to keep them separate from the setup which will be constant and will just get make manipulating the fragments more complicated.

无论您在 fragment.py 中实现的遗传算法有多复杂,我都看不到导入 cv2(以及最终更多模块)会如何影响它方式或其他方式。

但是,我同意你声明的第一部分,因为你要尊重 separation of concerns的原则。 让你的代码更简洁。

针对您的问题,我看到的解决方案是设置一个配置文件 config.py,您可以在其中设置所有导入。但是,将 config.py 导入其他文件是没有用的,除非您成功地使 cv2 等模块在其他地方一劳永逸。您可以通过 dynamically importing them 实现 config.py 文件中:

cv2=__import__('cv2')

在您的主程序、fragment.py 文件或任何模块中,您只需运行以下命令即可使用 cv2:

import config
config.cv2.imread('pic.png')

import config ↔ 你不再需要运行:import cv2。这是因为此技巧将 cv2 呈现为跨多个模块可用的全局变量。

同样的想法也适用于您需要在 config.py 文件中声明的其他变量,例如 img

鉴于这些事实,这是我针对您的问题的解决方案。请注意,我没有使用类和函数:我更愿意直接解决您的问题,而不是让事情过于简单明了。

代码组织:

config.py 文件对应于您的wrapper.py:

solution/
├── application.py
├── cfg
│   ├── config.py
│   └── __init__.pyc
├── gallery
│   └── pic.png
└── genalgos
├── fragment.py
└── __init__.py

配置文件:

# This will make cv2 global and thus you won't need to import it in ./genalgos/fragment.py
# You can use the same idea for all your other imports
cv2=__import__('cv2')
imgc=cv2.imread('./gallery/pic.png') # imgc is global

片段.py:

# The only import you can not avoid is this one
import cfg.config

# imgs is global
# By importing cfg.config you do not need to import cv2 here
imgf=cfg.config.cv2.cvtColor(cfg.config.imgc,cfg.config.cv2.COLOR_BGR2GRAY)

应用程序.py:

import cfg.config
import genalgos.fragment
if __name__=="__main__":

"""
Display the image 'imgc' as it is in 'cfg/config' file
"""
cfg.config.cv2.imshow('Pic in BGR',cfg.config.imgc)
cfg.config.cv2.waitKey(0)
cfg.config.cv2.destroyAllWindows()

"""
Display the grascaled image 'imgf' as it is in 'genalgos/fragment' file which
itself is obtained after transforming imgc of 'cfg/config' file.
"""
cfg.config.cv2.imshow('PIC Grayscaled',genalgos.fragment.imgf)
cfg.config.cv2.waitKey(0) # Press any key to exit
cfg.config.cv2.destroyAllWindows() # Unpaint windows and leave

关于Python导入依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35453680/

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