注意: - 在将问题标记为重复之前等待,请完整阅读。
我要使用另一个来run
一个python文件。
我尝试过使用runpy
,os.system
& subprocess
。 subprocess
和os.system
命令的问题在于,如果我只使用python
运行,那么安装了python2和python3的系统就会失败。如果我用python3
运行它,那么单人安装的人就会失败。
runpy
的问题在于它根据我的需要不起作用。
以下是运行我的目录结构
test\
average\
average.py
average_test.py
many similar directories like average...
run_tests.py
平均内容是
def average(...args):
# Do something
average_test.py的内容
from average import average
def average_test():
assert average(1,2,3) == 2
现在,如果我使用runpy.run_path
,它会抛出一个ImportError,说average
不是模块。 os.system
和subprocess.call
完美无缺,但我希望我的" testing_framework"将被许多人使用,所以我不能使用上述两个功能。还没有其他方法可以做到这一点。我已经研究了整个SO和谷歌,但没有找到解决方案。
同样sys.path.append/insert
也无济于事,因为我无法告诉我的用户"将其添加到他们的每个文件中。
有没有简单的方法可以做到这一点?我的意思是pytest
完成这一点所以必须有办法。
感谢主持人阅读我的问题。
编辑我忘了提及我要在if __name__ == '__main__'
块中运行代码,我也尝试使用另一个SO答案的代码片段也失败了。该片段是
def exec_full(filepath):
global_namespace = {
"__file__": filepath,
"__name__": "__main__",
}
with open(filepath, 'rb') as file:
exec(compile(file.read(), filepath, 'exec'), global_namespace)
请注意,目录结构只是一个示例,用户可能拥有不同的代码/目录结构。
注意: - 我找到了答案。我需要做subprocess.call([sys.executable,file_path])
。 sys.executable
返回当前版本的python可执行文件的路径。
答案 0 :(得分:0)
Create an empty __init__.py in average folder And then try to import from average import average it would work like charm :) test\ average\ average.py average_test.py __init__.py many similar directories like average... run_tests.py