我有两个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”而不告诉它查看根目录。它似乎能够找到其他文件夹及其模块和功能,但不是像这样的简单测试功能。任何想法,为什么我可能会收到此错误?
答案 0 :(得分:0)
您需要一个主脚本,放在与simulations
和src
相同的目录中。从那里,您可以执行所有其他脚本。或者只需将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)
到目前为止,此解决方案运行良好。