【问题标题】:How can I import a library that was already imported from a parent script?如何导入已经从父脚本导入的库?
【发布时间】:2019-08-31 21:19:32
【问题描述】:

我不知道如何清晰准确地解释这个问题......

但我正在尝试运行一个主脚本 (main.py),该脚本导入多个库(如“os”模块),并且该脚本应导入另一个子脚本 (child.py)。

问题是 'child.py' 必须使用这个 'os' 模块,但它不能从 'main.py' 中获取。

我尝试运行“main.py”并得到: NameError: name 'os' is not definied.

我的目录结构:

main/
|__ main.py
|__ sub/
    |__ child.py
    |__ __init__.py

[main.py] 内容:

import os
from sub.child import function

function()

[child.py] 内容:

def function:
    os.system('clear')
    <more code that require 'os' module>

我在这里缺少什么? 我正在尝试从“main.py”导入所有库,以避免在运行另一个脚本时等待太多(不希望它们之后导入很多库,我想从主文件导入所有内容)。

【问题讨论】:

    标签: python import module package parent


    【解决方案1】:

    我正在尝试从“main.py”导入所有库,以避免在运行另一个脚本时等待太多(不希望它们在之后导入很多库,我想从主文件中导入所有内容) .

    这不是它的工作方式。您应该在实际使用它的模块中导入一个模块,并且只在那里。

    所以需要在子模块中导入os模块才能使用:

    # child.py
    import os
    
    def function():
        os.system('clear')
        # more code that uses `os`
    

    如果在main.py 中实际上不使用os,则不应将其导入那里:

    # main.py
    from sub.child import function
    
    function()
    

    也正如@user10987432 指出的那样;如果您担心import 语句会减慢您的代码速度,那么您的优先级就会混淆。它不仅是过早优化的一种形式,而且最重要的是,甚至很难想到 import 语句是瓶颈的时候——也就是说——这可能是不可能的,而且不是问题。

    【讨论】:

    • You should import a module in the module that actually uses it and only there. 确实如此,正如 Python 之禅告诉我们的那样Explicit is better than implicit.
    • 此外,我还要补充一点,如果您担心import 语句会减慢您的代码速度,那么您的优先级就会混淆。它不仅是一种过早优化的形式,而且最重要的是,我什至无法想到 import 语句是瓶颈的时间——也就是说——我认为这是不可能的,而且这是一个没有问题。
    • @ruohola 无论如何。
    • 感谢大家指点。在自己的模块中使用所有导入以使其更“便携”是有意义的。
    • 我已经标记了。谢谢。只是为了确保(如果有人搜索这个问题),我错过了def function 上的()...我不知道python 是否接受这个没有括号。
    【解决方案2】:

    我认为您的代码最初没有 import os 行,但您在源代码中更正了这一点并重新导入了文件。

    问题在于 Python 缓存模块。如果您多次导入,则每次返回相同的模块时 - 它不会被重新读取。您在第一次导入时所犯的错误将继续存在。

    编辑后重新导入imtools.py文件,必须使用reload(imtools)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多