zoukankan      html  css  js  c++  java
  • PYTHONPATH 可以跨版本 方便使用 (本文为windows方法)转~

     PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。

       使用下面的代码可以打印PYTHONPATH:

    print(os.sys.path)

       我的某个项目的PYTHONPATH如下:

    复制代码
    [
    'D:\Python3\workspace\PythonLab\src',
    'D:\aptana3\plugins\org.python.pydev_2.7.0.2012080220\pysrc',
    'D:\Python3\python33.zip', 'D:\Python3\DLLs',
    'D:\Python3\lib',
    'D:\Python3',
    'D:\Python3\lib\site-packages'
    ]
    复制代码

       比如我使用下面的import语句:

    import urllib

       Python解释器会逐个从上面的路径列表选出一个路径然后搜索urllib模块直到找到为止。这里最后在 D:Python3lib 下找到,如下图:

       而D:Python3Libsite-packages目录下全部是第三方Python模块,比如我之前安装的xlrd模块(处理Excel的Python模块):

       与PYTHONPATH有关的一个问题是Eclipse下使用PyDev开发Python可能遇到的Unresolved Import问题,其解决方法就是设置项目的PYTHONPATH,将要导入的模块所在的目录添加到PYTHONPATH中:

       或者全局设置某个Python解释器的PYTHONPATH:

       在urllib模块目录下有下面这些文件:

       request是urllib模块下的一个子模块,所以我们可以这样导入request模块:

    import urllib.request

       或者:

    from urllib import request

       而urlopen是urlrequest模块下的一个函数,我们可不可以这样导入

    import urllib.request.urlopen

        然后像下面这样直接调用urlopen呢?

    resp = urlopen('http://baidu.com')

       答案是不能,会报下面的错:

    Traceback (most recent call last):
      File "D:Python3workspacePythonLabsrcUtilities.py", line 13, in <module>
        import urllib.request.urlopen
    ImportError: No module named 'urllib.request.urlopen'; urllib.request is not a package

       即没有一个模块的名称是”urllib.request.urlopen",那要如何导入某个函数呢,答案是使用from [Module Name] import [Function Name]语法,比如下面:

    from urllib.request import urlopen

       然后直接调用上面的urlopen函数就没有任何问题了。这种方法的缺陷就是这样导入之后,urlopen就定死了,你不能再写一个叫urlopen的函数,不然会覆盖这个函数。但我们也可以不导入函数,而使用函数的“全限名”(或者导入request子模块后,通过 request.urlopen('http://baidu.com') )来调用:

    urllib.request.urlopen('http://baidu.com')

       上面得到的教训是:

     使用import xx语法时,xx只能是模块路径(一个模块一般是指一个package或者一个以.py为后缀的文件,不一般的情况包括.pth、.dll以及其他扩展形式)。
    而且一般只有package模块下面才可以包含子模块(不知道准确不准确,DLL模块是否可以包含其他子模块?)

       以上难免有遗漏疏忽之处,还望大家指正。

  • 相关阅读:
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
    构建之法阅读笔记02
    构建之法阅读笔记01
    管理系统的简单解析---web
    Java中的异常处理
    多态
    重写与重载
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/bigbigtree/p/3362228.html
Copyright © 2011-2022 走看看