【原创】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 ...
随机推荐
- 运行jsp时,报错404
The origin server did not find a current reprsentation for the target resource or is not willing to ...
- mockito 初识
转载:http://blog.csdn.net/zhoudaxia/article/details/33056093 在平时的开发工作中,经常会碰到开发进度不一致,导致你要调用的接口还没好,此时又需要 ...
- jsp九大内置对象==欣欣
内置对象特点: 1. 由JSP规范提供,不用编写者实例化. 2. 通过Web容器实现和管理 3. 所有JSP页面均可使用 4. ...
- jQuery之检测分析纠错------地狱的镰刀
1. 答: 或者: $(selector).eq(0).hide(); 解答:get() 方法获得由选择器指定的 DOM 元素. 2. 答: 3, 答1: 答2: 4. slideDown()方法格式 ...
- 【起航计划ObjC 003】印第安老斑鸠ObjC的幻想 ---- ObjC经典问题
1.Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议. 2.#import和#include的区别是什么?#import<> 跟 #im ...
- linux常用指令集-持续更新...
0.查看所有java进程GC情况:for i in `jps|egrep -v "Jps|Launcher" |cut -d" " -f1`;do pwdx $ ...
- Java性能调优实践
1 导论 JVM主要有两类调优标志:布尔标志和附带参数标志 布尔标志:-XX:+FlagName表示开启,-XX:-FlagName表示关闭. 附带参数标志:-XX:FlagName=somethi ...
- 解决Image在canvas以及audio、video在AudioContext下跨域问题
媒体元素嘛,在对应的标签或对象上加上 crossOrigin = 'anonymous' 即可. 例如 Image 在canvas 上绘制时会跨域: <img crossOrigin=" ...
- 配置karma支持Chrome浏览器
准备:项目中已搭建好了karma. 前言:利用vue-cli初始化创建vue项目时,已经搭建好了测试框架 karma+mocha,但是此时karma默认启动的浏览器是 phantomjs,而我想用 C ...
- 再学UML-UML用例建模解析(一)
UML(统一建模语言)是当前软件开发中使用最为广泛的建模技术之一,通过使用UML可以构造软件系统的需求模型(用例模型).静态模型.动态模型和架构模型.UML通过图形和文字符号来描述一个系统,它是绘制软 ...