zoukankan      html  css  js  c++  java
  • python中sys.path--学习

    本着下定义开头吧:python中import某个A模块时,首先会从python的内置模块中查找是否含义该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常

    接着说明下python的两种加载py文件的方式:

    • python xxx.py
    • python -m xxx.py

    第一种方式是直接运行方式

    第二种方式是把模块当做脚本来启动

    可能看起来说的python运行方式和sys.path有点大相径庭,但实际上两种不同方式的运行导致sys.path[0]的值是有差异的

    第一种方式:sys.path[0]是当前脚本的运行目录

    第二种方式:sys.path[0]是空值字符串,也就是当前执行python的目录

    sys.path是一个python搜索模块的路径列表:
     eg、下边的X.py文件中打印出sys.path内容:

    import sys
    print sys.path

    python x.py运行

    其中sys.path[0]是 I: estful_code ester,对应调用python解释器的脚本所在的目录。 其实就是存放需要运行的代码的路径

    python -m x.py运行

    什么是python解释器?

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

    由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

    常见的Python解释器有: CPython IPython   PyPy  Jython   IronPython   

     使用场景:

     在实际开发中,默认包含了当前目录为搜索路径,所以,当前目录下的模块和子模块均可以正常访问。但是若一个模块需要import平级的不同目录的模块,或者上级目录里面的模块,就可以通过修改path来实现

     修改path的两种方法:

    方法一:函数添加
    这是即时生效的方法,就是在模块里面修改sys.path值,这种方法修改的sys.path作用域只是当前进程,进程结束后就失效了。
    个人比较推荐这种方法,比较干净, 避免一些冲突问题。

    比如现在的代码目录结构:

    /src/configs/config.py
    /src/common/Database.py

    假如Database.py期望导入config. py,则可以增加上级目录到sys.path列表里面:

    parent_path = os.path.dirname(sys.path[0])
    if parent_path not in sys.path:
        sys.path.append(parent_path)
    import configs.config

    方法一:修改环境变量

    添加系统环境变量PYTHONPATH,在这个环境变量中输入相关的路径,不同的路径之间用逗号(英文的!)分开。路径会自动加入到sys.path中。

     

     

  • 相关阅读:
    Maven(一)之Maven入门
    由浅入深讲解数据库中Synonym的使用方法
    sql server 中查询数据库下有多少张表以及同义词等信息
    SQLServer中同义词Synonym的用法
    SQL Server在用户自定义函数(UDF)中使用临时表
    java 异常
    java算法之冒泡排序法
    如何用Java实现反转排序
    关于eclipse的注释和反注释的快捷键
    java获取随机数
  • 原文地址:https://www.cnblogs.com/clarenceyang/p/10650250.html
Copyright © 2011-2022 走看看