从另一个文件调用 Python 函数

Calling a Python function from another file

这个问题困扰了我几天。

我有两个文件,helpers.pylauncher.py

helpers.py 中我定义了函数 hello(),它打印 "hello".

我想在launcher.py.

打电话给hello()

这是我在launcher.py中写的:

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

但是当我 运行 它时,我得到了这个:

    from helpers import hello
ImportError: No module named helpers

我该如何解决这个问题?

根据答案/评论进行编辑

  1. 我正在使用 OS X 和 Python 3.4
  2. 两个文件在同一个目录下
  3. 两种方式我都试过了:

    from helpers import hello
    hello()
    

    import helpers
    helpers.hello()
    

    但还是这个错误:

    import helpers
    ImportError: No module named 'helpers'
    

我觉得应该是Terminal的CLASSPATH有问题

第二次编辑

was an issue, but in the end 中突出显示的问题已解决。

无法发表评论,请问这两个文件在同一个文件夹中吗?我会尝试:

from helpers.py import hello

python 解释器没有找到您的模块 "helpers"。

您使用什么操作系统工作?

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

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

编辑:Michael 是对的,当您执行 "from helpers import ..." 时,模块不是这样导入的,但系统只知道 hello!

随心所欲

from helpers import hello
hello()

或:

import helpers
helpers.hello()

Still the import error must be solved. For that, it would be useful to know your system and directory structure! On a system like Windows, it might be necessary, to set PYTHONPATH accordingly (see link above).

这一行有问题:

helpers.hello()

替换为:

hello()

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

所以你可以拥有这个:

from helpers import hello
hello()

或者你可以这样:

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

你的问题是理解命名空间的问题。您没有导入 helpers 命名空间...这就是解释器无法识别 helpers 的原因。我强烈建议您阅读命名空间,因为它们在 python.

中非常有用

Namespace Document 1

Offical Python Namespace Document

看看上面的这些链接。

文件系统:

__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

我重置了 CLASSPATH,但不知何故它工作正常。奇怪的问题。谢谢大家!

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

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