zoukankan      html  css  js  c++  java
  • 【原创】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:

      换种形式来操作:

    ②仍然在控制台输入:

    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

  • 相关阅读:
    表单提交方式
    js--dom对象
    js--bom对象
    css布局的漂浮、position定位
    python语法学习第五天--lambda表达式、filter()、map()
    python语法学习第五天--函数(2)
    python3语法学习第五天--函数(1)
    python3语法学习第四天--序列
    leetcode| 84. 柱状图中最大的矩形
    leetcode| 56. 合并区间
  • 原文地址:https://www.cnblogs.com/oceanicstar/p/9390455.html
Copyright © 2011-2022 走看看