为什么python中的导入顺序会弄乱导入的导入中的函数?

2024-09-24 04:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下场景[文件的结构如下所示]。你知道吗

我有一个脚本script.py,它包含一个函数,我调用这个函数来渲染图像。渲染器使用对某个库(opendr)的一些调用。你知道吗

我很沮丧地发现,如果脚本函数中的导入是按一定顺序进行的,那么我的渲染图像将完全是黑色的,但以不同的方式排列渲染将非常好。你知道吗

在处理了导入之后,我在script.py:数据中发现了两个有问题的导入_路径.data\u路径渲染。渲染。我进一步挖掘并发现了两个文件中有问题的导入:PI1inrender.pyPI2indata_paths.py。如果PI1是在PI2之前导入的,那么它就工作了,否则就不行了。我甚至尝试过导入PI1,然后data_paths.py(导入PI2),然后render.py(导入PI1),它就工作了。唯一重要的事情似乎是在PI2之前导入PI1,不管导入的文件在哪里。你知道吗

现在PI1是一个外部库调用,所以我对此无能为力,而PI2是一个内部库调用。所以我进一步调查。如果我将PI2导入的函数复制到data_paths.py,则呈现工作正常(相同的名称,或者不同的名称-这无关紧要)。 如果我注释了utils.py中定义的所有其他函数,但是PI2导入的函数和script.py中需要的另一个函数,则它不起作用。你知道吗

我不明白为什么我会有这种行为,我如何才能确保我不会再有这种错误,因为我将使用render.py中的函数很多,我不想总是乱丢我的导入,永远不能确定它是否会工作。你知道吗

我知道导入在script.py中的顺序很重要,但我不明白为什么它会影响导入导入的函数。我也不明白为什么将函数get_machine.py移动到data_paths.py会有帮助,但是注释原始文件中所有多余的内容却没有帮助

很抱歉,我不能提供一个适当的演示,这是相当多的代码下的许可证和整个库安装。你知道吗

# script.py
from data_paths import data_paths
from render import render

def main():
  render()

这是怎么回事渲染.py像疯子一样

# render.py
from opendr.renderer import ColoredRenderer # problematic import 1
# ... other imports

def render():
  # function body

这就是数据_路径.py看起来像

# data_paths.py
from utils import get_machine # problematic import 2

if get_machine=='whatever':
  RANDOM_GLOBAL_VARIABLE1 = 'value1'
else:
  RANDOM_GLOBAL_VARIABLE1 = 'value2'

ANOTHER_GLOBAL_VARIABLE1 = 1
ANOTHER_GLOBAL_VARIABLE2 = 1

class data_paths:
  a bunch of functions

最后,实用程序.py地址:

# utils.py
def get_machine():
  # function body

def needed_function():
  # function body

def not_needed_function1():
  # function body

def not_needed_function2():
  # function body

Tags: 文件函数pyimportdatagetdefscript