Python 的 os.chdir 函数不起作用[重复]

Posted

技术标签:

【中文标题】Python 的 os.chdir 函数不起作用[重复]【英文标题】:Python's os.chdir function isn't working [duplicate] 【发布时间】: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。

【问题讨论】:

我会查看 ***.com/questions/279237/… 以导入您自己的自定义 python 模块。只要记住有一个__init__.py 文件来识别模块。 【参考方案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

【讨论】:

以上是关于Python 的 os.chdir 函数不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python_os模块

Python基础模块

python os模块

python os模块

Python中的OS模块全

Python3基础 os chdir 改变工作目录