使用另一个运行python文件

时间:2018-02-13 14:41:13

标签: python python-3.x

注意: - 在将问题标记为重复之前等待,请完整阅读。

我要使用另一个来run一个python文件。 我尝试过使用runpyos.system& subprocesssubprocessos.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.systemsubprocess.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可执行文件的路径。

1 个答案:

答案 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