Python导入模块错误,";导入错误:无法导入名称X";

Python导入模块错误,";导入错误:无法导入名称X";,python,module,path,directory,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, wo

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

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

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

“src”保存我运行模拟的主项目的源代码

我的testingDirectories.py文件在“simulations”中,而testFile.py在“src”中

testFile.py的内容如下:

def testFunction(m):
    return 'hello, world'
import sys
import os

from src.testFile import testFunction

testFunction('hello')
testingDirectories.py的内容如下:

def testFunction(m):
    return 'hello, world'
import sys
import os

from src.testFile import testFunction

testFunction('hello')
当我运行简单演示时,它会给我一个错误:

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

本演示的重点是确定程序是否可以找到目录“src”,而无需告诉它查找根目录。它似乎能够找到其他文件夹及其模块和函数,但不是像这样的简单测试函数。你知道我为什么会出现这个错误吗?

你需要一个主脚本,放在与
模拟和
src
相同的目录中。从那里,您可以执行所有其他脚本。或者只需将
src
包含到
模拟中,并添加一些
\uuuuuu init\uuuuu
文件

或者,您可以创建此结构:

|mypackage
    |__init__.py
    |simulations
        |__init__.py
        |testingDirectories.py
    |src
        |__init__.py
        |testFile.py
\uuuu init\uuuuu.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
您可以从src.testFile导入第二个模块,只需

希望这有帮助

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

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

os.walk('.')
查找所有文件和文件夹,并将模块名称存储在字典中以便于查看

然后,我为main.py提供了一些函数,使用户只需从命令行通过main.py运行脚本,而无需找到每个模块并从那里运行脚本

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

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

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

可能相关:将目录添加到PATH env变量。这应该可以解决问题。或者,您可以将testDirectory.py保存在相同级别的“模拟”和“src”文件中,然后它将能够找到src。或者,您可以使用imp.load\u source从任何地方使用“imp”模块导入任何模块