Python导入模块错误,“导入错误:无法导入名称X”

时间:2014-06-20 07:23:28

标签: python module path directory

我有两个python模块,一个名为testingDirectories.py,另一个名为testFile.py

我的目录中有两个文件夹:simulations和src

“模拟”应该包含正在运行的单个模拟的所有源代码。

“src”包含我运行模拟的主项目的源代码。

我的testingDirectories.py文件位于“simulations”中,而testFile.py位于“src”中。

testFile.py的内容如下:

def testFunction(m):
    return 'hello, world'

testingDirectories.py的内容如下:

import sys
import os

from src.testFile import testFunction

testFunction('hello')

当我运行简单的演示时,它给了我一个错误:

from src.testFile import testFunction
ImportError: cannot import name testFunction

这个演示的目的是弄清楚程序是否可以找到目录“src”而不告诉它查看根目录。它似乎能够找到其他文件夹及其模块和功能,但不是像这样的简单测试功能。任何想法,为什么我可能会收到此错误?

2 个答案:

答案 0 :(得分:0)

您需要一个主脚本,放在与simulationssrc相同的目录中。从那里,您可以执行所有其他脚本。或者只需将src添加到simulations,然后添加一些__init__个文件。

或者,你可以建立这个结构:

|mypackage
    |__init__.py
    |simulations
        |__init__.py
        |testingDirectories.py
    |src
        |__init__.py
        |testFile.py

__init__.py很好。第二步,将其包含在PYTHONPATH中。

$ set PYTHONPATH=%PYTHONPATH%;C:\my_python\mypackage

然后,在testingDirectories.py

from mypackage.src.testFile import testFunction
testFunction('hello')

另一种方式?使用-m开关执行该程序。

$ cd C:\my_python\mypackage\simulations\
$ python -m simulations.testingDirectories

您可以使用from src.testFile ...

导入第二个模块

希望这有帮助!

答案 1 :(得分:0)

我最终做了什么(因为显然相对路径在Python中是一个相当常见的问题):

我创建了一个名为main.py的文件,用于执行

os.walk('.')

发现所有文件和文件夹,并将模块名称存储在字典中以便于查看。

然后我给了main.py一些函数,允许用户通过main.py简单地从命令行运行我的脚本,而不是必须找到每个单独的模块并从那里运行它。

这是我用来使用用户定义的字符串运行模块和函数的代码:

def runModuleFunction(moduleName, funcName, params):
    m = __import__(moduleName)
    func = getattr(m, funcName)
    return func(params)

到目前为止,此解决方案运行良好。