博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PYTHONPATH 可以跨版本 方便使用 (本文为windows方法)转~
阅读量:7034 次
发布时间:2019-06-28

本文共 1707 字,大约阅读时间需要 5 分钟。

 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:\Python3\lib 下找到,如下图:

   而D:\Python3\Lib\site-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:\Python3\workspace\PythonLab\src\Utilities.py", line 13, in 
import urllib.request.urlopenImportError: 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模块是否可以包含其他子模块?)

 

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

转载地址:http://sqjal.baihongyu.com/

你可能感兴趣的文章
让IE支持CSS3圆角的方法
查看>>
mysql navicat编码保持一致不乱码
查看>>
滑轮滚动到页面底部ajax加载数据
查看>>
不写C,写心情
查看>>
音视频学习
查看>>
我的友情链接
查看>>
使您轻松地进行多线程应用程序编程
查看>>
Unity内存优化技术测试案例
查看>>
剖析:未来搬家公司的发展
查看>>
平林xia抽象
查看>>
eclipse 解决编译出现GBK或UTF8 编码错误的方法
查看>>
CSS综合复习(三)
查看>>
脚本化文档
查看>>
多线程
查看>>
linux双网卡绑定简要步骤
查看>>
setsockopt()用法
查看>>
sed命令实例
查看>>
20180102-正则表达式和grep
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
查看>>