【问题标题】:Python's os.chdir function isn't working [duplicate]Python 的 os.chdir 函数不起作用[重复]
【发布时间】:2014-06-30 10:32:22
【问题描述】:

我的脚本运行失败时出现了一些非常神秘的行为。显然,下面的脚本是微不足道的,什么都不做,但它在真实脚本中重现行为。这是名为test.py 的文件中的代码。

import os
os.chdir('/home/jacob/twcSite')
import app

app 位于'home/jacob/twcSite',与当前目录不同,包含test.py。如果我在命令行输入python test.py,我会得到ImportError: No module named app。但是,如果我只是键入 python 来启动交互式解释器并复制粘贴完全相同的三个命令,那么它就可以正常工作而不会出现导入错误。

什么可能导致此错误?这是相同版本的python。完全相同的代码行。为什么在这两种情况下我都会得到不同的行为?只是为了提供更多详细信息,如果您在调用os.chdir 之前和之后将输出打印到os.getcwd(),它确实声称已更改为正确的目录(尽管显然情况并非如此)。我正在运行 Ubuntu 14.04,Python 版本 2.7.6。

【问题讨论】:

标签: python


【解决方案1】:

改变目录不会改变你的导入路径,它只是改变打开文件的目录等等。

sys.path

import sys
sys.path.append('/home/jacob/twcSite')
import app

【讨论】:

  • 你能解释一下为什么当我直接将代码输入解释器时代码可以工作,而当我将其作为文件中的脚本运行时却不行?
  • 好的,成功了。谢谢!
  • 当您在解释器中运行时,它实际上可能正在更改目录,并且代码为live 它可以工作。但是当你运行python example.py 时,它是从shell 启动的,所以它的工作方式不同。不过这只是猜测。
  • 好的,这是合理的解释。只是为了让这更复杂——当我在 OSX 机器上运行脚本时,它的工作方式完全错误。直到我尝试在 linux 机器上运行它,它才开始给我带来麻烦。但你告诉我的方式在这两种情况下都适用。
  • 很好的解决方案,效果很好
【解决方案2】:

更改当前目录不是处理在 Python 中查找模块的方法。由于该目录不包含在 Python 搜索范围内,您可以使用以下代码手动添加它:

import os.path, sys
app_dir = os.path.join('home', 'jacob', 'twcSite')
sys.path.insert(0, app_dir)

import app

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 2017-11-23
    • 2019-06-04
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多