从另一个文件调用Python函数

时间:2015-08-17 20:08:10

标签: python python-import importerror

这个问题困扰了我好几天。

我有两个文件,update_attributes!helpers.py

launcher.py我定义了函数helpers.py,它打印了#34;你好"。

我想在hello()

中致电hello()

这是我在launcher.py.中写的:

launcher.py

但是当我运行它时,我明白了:

from helpers import hello
....
helpers.hello()

我该如何解决这个问题?

编辑以回答答案/评论

  1. 我正在使用OS X和Python 3.4
  2. 这两个文件位于同一目录中
  3. 我尝试了两种方式:

        from helpers import hello
    ImportError: No module named helpers
    

    from helpers import hello
    hello()
    

    但仍然是这个错误:

    import helpers
    helpers.hello()
    
  4. 我认为终端的CLASSPATH应该有问题。

    第二次编辑

    these answers中突出显示的问题是一个问题,但最终解决了resetting the classpath

7 个答案:

答案 0 :(得分:7)

问题在于这一行:

helpers.hello()

替换为:

hello()

现在可行,因为您只从hello模块导入了名称helpers。您尚未导入名称helpers本身。

所以你可以拥有这个:

from helpers import hello
hello()

或者你可以拥有:

import helpers
helpers.hello()

答案 1 :(得分:3)

我重置了CLASSPATH,它以某种方式工作正常。奇怪的问题。谢谢大家!

答案 2 :(得分:1)

python解释器找不到你的模块“帮助者”。

你使用什么操作系统?

当你在Unix / Linux或类似的情况下,并且你的文件在同一个目录中时,它应该可以工作。但我听说,例如在Windows上有麻烦。也许,必须设置搜索路径。

见这里: https://docs.python.org/2/tutorial/modules.html#the-module-search-path

编辑:迈克尔是对的,当你“从帮助者导入...”而不是模块是导入本身时,系统只知道你好!

只做

from helpers import hello
hello()

或者:

import helpers
helpers.hello()
  

仍然必须解决导入错误。为此,它将是有用的   了解你的系统和目录结构!在像Windows这样的系统上,可能需要相应地设置PYTHONPATH(参见上面的链接)。

答案 3 :(得分:1)

from helpers import hello
....
helpers.hello()   ## You didn't import the helpers namespace.

您的问题是理解命名空间的问题。您没有导入帮助程序名称空间...这就是解释程序无法识别帮助程序的原因。我强烈建议你阅读命名空间,因为它们在python中非常有用。

Namespace Document 1

Offical Python Namespace Document

看看上面的这些链接。

答案 4 :(得分:0)

无法评论,但这两个文件是否在同一个文件夹中?我会尝试:

from helpers.py import hello

答案 5 :(得分:0)

档案系统:

__init__.py
helpers.py      <- 'hello' function 
utils
   __init__.py  <- functions/classes
   barfoo.py
main.py

在主...

from helpers import hello
hello()
import utils        # which ever functions/classes defined in the __init__.py file. 
from utils import * # adds barfoo the namespace or you could/should name directly. 

按照importing modules in the docs

答案 6 :(得分:0)

我遇到了同样的问题:ModuleNotFoundError:没有名为“ Module_Name”的模块。 就我而言,模块和我调用它的脚本都在同一目录中,但是,我的工作目录不正确。使用以下命令更改工作目录后,导入工作成功:

import os
os.chdir("C:\\Path\to\desired\directory")