【问题标题】:execfile in it's working directory from other fileexecfile 在它的工作目录中来自其他文件
【发布时间】:2012-11-23 15:10:02
【问题描述】:

我有这样的结构:

c
|-myMain.py
|-.....\someDir
              |-startup.py
              |-subDir
                     |-x.py

我发现很少有类似的问题,答案让我想到了这一点:

#myMain.py
import os
if __name__ == '__main__':
    os.chdir("c:\\......\\someDir")
    execfile("startup.py")

#startup.py
from subDir import x
if __name__ == '__main__':
    x.doSomething()

问题是当我运行 myMain.py 时,startup.py 中的导入失败:

ImportError: No module named subDir

但是,当我直接运行 startup.py 时它可以工作。任何帮助将不胜感激。

【问题讨论】:

  • subDir__init__.py 文件吗?
  • FWIW,您可以避免对硬编码的完全限定路径执行chdir(),例如STARTUP_FILE = os.path.join(os.path.dirname(__file__), 'someDir', 'startup.py'),后跟execfile(STARTUP_FILE)

标签: python python-import working-directory execfile


【解决方案1】:

为了让 python 将subDir 视为有效的 python 结构,您必须将其设为package。您可以通过在该目录中包含 __init__.py 文件来使其成为一个包。该文件可以为空。

一旦subDir 有这样一个文件,from subDir import x 语句应该可以工作。

【讨论】:

  • 好的,现在可以了,但我还必须按照@martineau 的建议添加到 someDir 的路径
【解决方案2】:

未来的读者:

Pradyumna 的回答 from here 为我解决了这个问题:

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

[即sys.path.append(execfile的目录)]

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多