【问题标题】:How to run a Python file not in directory from another Python file?如何从另一个 Python 文件运行不在目录中的 Python 文件?
【发布时间】:2012-12-15 04:15:50
【问题描述】:

假设我有一个文件 foo.py,我想在文件中执行一个文件 bar.py。但是,bar.py 与 foo.py 不在同一个目录中,它在一个名为 baz 的子目录中。 execfile 会工作吗? os.system呢?

【问题讨论】:

    标签: python python-3.x exec


    【解决方案1】:

    只需添加一个空的__init__.py 文件以表明baz 是一个模块,并且从foo.py 执行:

    from baz import bar
    

    当然,除非您有充分的理由不将 baz 制作成模块(并使用 execfile)。

    【讨论】:

      【解决方案2】:

      导入系统, 通过在运行时附加路径来更改“sys.path”,然后导入有帮助的模块

      【讨论】:

        【解决方案3】:

        问题意味着您想将这些作为脚本运行,所以是的:您可以在 2.X 或 subprocess 中使用 execfile(调用解释器并将脚本作为参数传递)。您只需要提供文件的绝对路径。

        # Python 2.X only!
        execfile ('c:/python/scripts/foo/baz/baz.py')
        

        当然,按字面意思去做是很脆弱的。如果 baz 始终是 foo 的子目录,您可以从 foo 的 file 中派生它:

        baz_dir = os.path.join(os.path.dirname(__file__), "baz")
        baz_file = os.path.join(baz_dir, "baz.py")
        execfile(baz_file)
        

        如果这两个文件都位于您的 python 可以看到的位置 - 即文件夹位于 sys.path 或已使用 site 添加到搜索路径中,您可以从 foo 导入 baz 并直接调用它的函数.如果您需要实际对来自 baz 的信息采取行动,而不是仅仅触发一个动作,这是一个更好的方法。 As long as there is an init.py in each folder你可以这样做

        import baz
        baz.do_a_function_defined_in_baz() 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-06
          • 2015-11-28
          • 2013-02-24
          • 2021-05-29
          • 2022-08-22
          相关资源
          最近更新 更多