【原创】os.chdir设置的工作路径和sys.path之间到底是个啥关系?
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9390455.html
直接放上测试后的结论(测试代码和截图过多,有兴趣的小伙伴可自己测试,未来看情况更新本篇博客):
★这里仅仅讨论os.chdir()设置的工作路径在模块导入方面的问题,而非可读写文件的问题。
事实上,读写文件始终是统一的规则,即:有效的文件读写路径(直接用文件名来open)只与当前工作路径有关,与sys.path无关,与py文件所在当前目录也无关。
★这里仅仅讨论在执行py脚本中的os.chdir()语句,而非控制台下未指定py文件时设置的工作路径(毕竟开放环境下我们的工程实施不常用)
★默认的工作路径:
1、在windows控制台:
默认是运行python命令时的路径
2、在pycharm下:
默认是当前py文件所在目录
3、在控制台直接运行ipython:
默认是当前py文件所在的目录
4、spyder:
默认是右上角可选框中显示的目录
★在不同环境下,os.chdir()的效力好像不一样(有的会影响到sys.path,有的不会),但模块导入的原则始终是按sys.path列表中的路径来找的。
1、在windows控制台和pycharm下:
这里os.chdir()设置的工作路径仅仅是文件读写路径(就是直接用文件名来open,有效的文件读写路径),但是不会更改sys.path第一个元素指向的模块导入路径(当前文件所在目录)。因此即使通过os.chdir()设置了工作路径,也无法从新的工作路径中导入模块,仍然只能导入sys.path中路径下的模块(即可以导入当前文件所在目录下的模块);
2、在控制台直接运行ipython:
结果ipython是会默认将当前工作路径也作为模块导入的读取路径之一的(添加到了sys.path,会随着ipython的工作路径变化,动态变化),当然当前目录仍然在sys.path列表中(第一个元素)。此时,既可以从当前目录导入模块,又可以
3、测试了下spyder:
会默认将sys.path的第一个元素 指向 工作路径,也就是说此时os.chdir()设置的工作路径其实就是在操作修改sys.path中的第一个元素指向,因此模块导入的查询路径会跟随os.chdir()设置工作路径的变化而变化。
后续会根据情况放上测试例子:
一、目录结构
G:\\
├── a【a文件夹】
| ├── a1.py【我们运行的文件】
| └── a2.py【我们试图导入的同目录下文件】
|
└── b【b文件夹】
└── b2.py【我们试图导入的非同目录下文件】
二、测试代码
1、在控制台操作:
【首先确认控制台运行python的话,默认工作路径是什么?】
当前a1.py内的代码为:
import os print(os.getcwd())
os.chdir("G:\\b")
print(os.getcwd())
①在 G:\\ 下控制台输入:
G:\> python a/a1.py
执行结果为:
G:\
G:\b
换种形式来操作:
②仍然在控制台输入:
G:\>cd a G:\a>python
Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 15 2017, 03:27:45) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'G:\\a'
>>> os.chdir('G:\\b')
>>> os.getcwd()
'G:\\b'
这里可以看出:在windows控制台中运行python脚本,默认工作路径就是运行python命令时所在的路径。
……(未完待续)
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9390455.html
【原创】os.chdir设置的工作路径和sys.path之间到底是个啥关系?的更多相关文章
- Rstudio设置永久工作路径
Rstudio中 getwd() 获取工作路径 setwd() 设置工作路径 但这种方式设置后每次打开都要重新设置,现在介绍一种设置永久路径的方法
- Ubuntu18.04下给Jupyter-NoteBook设置默认工作路径(附Win设置)
上一篇Jupyter的文章:https://www.cnblogs.com/dotnetcrazy/p/9201976.html Linux 生成配置文件:jupyter-notebook --gen ...
- python 切换工作路径 为指定文件夹
切换工作路径为了更好的在目录下面执行针对当前项目的命令 比如 git.svn .打包 等操作 关键命令: os.chdir() 切换到指定路径: # sys.path[0] 当前脚本路径 # 当前脚本 ...
- 【python基础语法】OS模块处理文件绝对路径,内置的异常类型、捕获、处理(第9天课堂笔记)
import os """ 通过文件的路径去打开文件 相对路径:相对当前的工作路径去定位文件位置 .:代表当前路径 ..:代表上一级路径(父级路径) 绝对路径:相对于电脑 ...
- 如何修改myeclipse中web项目的工作路径或默认路径
如何修改myeclipse中web项目的工作路径或默认路径 博客分类: J2EE开发技术指南 安装好myeclipse后,第一次启动myeclipse时,都会弹出会弹出Workspace Laun ...
- python中os.path 与sys.path
看别人写的代码,会发现两个和路径设置有关的模块 os 和sys.我对这两个模块也不是特别了解.只是记录一下自己看到的,学到的. python 中我们会使用这两个模块和文件路径, 创建文件 之类的 操作 ...
- Python3基础 sys.path.append 增加模块的搜索路径
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 【转载】路径双反斜杠!!!Python IDLE或Python shell中切换路径 切换目录os.chdir("C:\\python37\\2019pythonshel37\\diedai")
Python IDLE或shell中切换路径在Python自带的编辑器IDLE中或者python shell中不能使用cd命令,那么跳到目标路径呢.方法是使用os包下的相关函数实现路径切换功能. im ...
- Python3基础 os chdir 改变工作目录
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
随机推荐
- CSS设计模式之三权分立模式篇 ( 转)
转自 海玉的博客 市面上我们常常会看到各种各样的设计模式书籍,Java设计模式.C#设计模式.Ruby设计模式等等.在众多的语言设计模式中我唯独找不到关于CSS设计模式的资料,即使在网上找到类似内容, ...
- String变量的两种创建方式
在java中,有两种创建String类型变量的方式: String str01="abc";//第一种方式 String str02=new String("abc&qu ...
- asp.net学习视频大全(共800集)
今天在网上找asp.net学习视频时,发现了一些好的学习资源,记录一下供大家学习. 资料名称 下载地址 <ASP.NET4.0从入门到精通>随书教学视频 http://down.51ct ...
- 关于ButterKnife 设置全局配置
先在项目的根目录的build.grade添加:classpath'com.neenbedankt.gradle.plugins:android-apt:1.8' 然后在app build.grade ...
- Resharper F12下载dll源码
原作者:赵青青 原文链接:Visual Studio(VS) F12 查看DLL源代码 Dot Peek 今天在调试时,又有这个需求,想查看dll的源代码,我决定从dot peek这个程序入手去查找相 ...
- redis的使用方式
常用的语法以及使用方式: key中不能包含回车空格等,key不要太长,占用内存. 概念介绍: 差集: a:{1,2,3} b:{2,3,4},以a为锚点,差集 ...
- 新发布 | 微软开源之路最新进展:FreeBSD落地由世纪互联营运的Microsoft Azure
微软和开源,是近几年业界孜孜不倦的讨论话题,微软也在开源之路越走越宽.最近与 FreeBSD 基金更紧密的合作踏出了微软在开源之路上的又一大步. 自2012年开始,微软在 FreeBSD 与其虚拟化平 ...
- 设计模式之装饰模式(Decorator)
1. 装饰者模式,动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 2.组合和继承的区别 继承.继承是给一个类添加行为的比较有效的途径.通过使用继承,可以使得子类在拥有 ...
- 再学UML-Bug管理系统UML2.0建模实例(四)
3.3 顺序图(实现模型) 在系统设计与实现阶段我们也可以使用顺序图进行建模,此时通过顺序图可以明确表示系统设计中对象之间的交互,考虑到具体系统实现,对象之间通过方法调用传递消息.在BMS系统中,对每 ...
- day3-基础 列表,元组,字典,模块
1.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 Country = ['China','England','America'] 通过下标访问列 ...