由PYTHONPATH谈起
来源:互联网 发布:中银淘宝信用卡年费 编辑:程序博客网 时间:2024/04/30 00:09
使用下面的代码可以打印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 <module> 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://www.cnblogs.com/feichexia/archive/2012/11/29/PYTHONPATH.html
- 由PYTHONPATH谈起
- 由PYTHONPATH谈起
- 由Access Violation谈起
- 由kindEditor谈起
- 由家里网络故障谈起
- PYTHONPATH
- pythonpath
- 由软件加壳谈起
- 由软件加壳谈起
- 由软件加壳谈起
- 由软件加壳谈起
- 由GOOGLE的操作系统谈起
- 【转】由string与String谈起
- 由双缓冲绘图技术谈起到Delphi源码实现
- 由Sql语句与存储过程语句的讨论谈起
- 由signal谈起--typedef 指向函数的指针
- 由signal谈起--typedef 指向函数的指针
- 由七夕送什么礼物谈起-售前的本质
- 1.PHP连接mysql中文乱码问题
- Android View 流程简读 <1>
- C++中 引用&与取地址&的区别
- 1002 Problem B
- android实现ListView字母排序并调整字母位置
- 由PYTHONPATH谈起
- 初识RecyclerView(二)
- 窗口消息
- 打包war包部署到Tomcat。调用接口时,pad端提示:连接服务器异常。但后台无任何异常抛出
- 搜狐云平台前端实习生面试总结
- JDeodorant 的使用
- DNS 截持模拟及环境搭建
- activiti 组任务指定办理人三种方式(十一)
- MySql模糊查询like通配符使用详细介绍