我有3个非常简单的脚本。结构如下所示:
test.py
test_problem_folder
test_problem_1.py
test_problem_2.py
test.py:
import os
if __name__ == "__main__":
filename = "./test_problem_folder/test_problem_1.py"
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals(), locals())
test_problem_folder / test_problem_1.py:
import test_problem_2
test_problem_2.test()
test_problem_folder / test_problem_2.py:
def test():
print("Hello")
如果我尝试运行test.py,则会收到错误:
ModuleNotFoundError:没有名为'test_problem_2'的模块
如果我展平文件夹结构以使test_problem_ *与test.py是同一目录,我就不会遇到这个问题。我认为路径必须搞砸了,所以我尝试了os.chdir()到./test_problem_folder,但是仍然会出现同样的错误。我究竟做错了什么?我的真实场景更复杂,我需要使用exec而不是popen。
答案 0 :(得分:1)
我尝试了您的代码,如果我在python test_problem_1.py
下运行test_problem_folder
,一切正常。显然,Python路径对test_problem_folder
你可以将test_problem_folder
的abs路径附加到你的python路径,然后找到模块,你不必拥有__init__.py
test_problem_folder
文件
import os
import sys
if __name__ == "__main__":
sys.path.append("/path/to/.../test_problem_folder")
filename = "./test_problem_folder/test_problem_1.py"
exec(compile(open(filename, "rb").read(), filename, 'exec'), globals(), locals())
或者,您可以将test.py
目录附加到pythonpath,在__init__.py
下创建test_problem_folder
(这使得它成为除目录之外的python包)然后从模块{导入test_problem_1 {1}}
test_problem_folder