• Django的搜索路径与Import机制

    如何Import模块
    服务器君一共花费 11.200 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    留意到前面的 urls.py 文件:

    from django.conf.urls.defaults import *
    from PythonProject.views import hello, current_datetime, hours_ahead
    
    urlpatterns = patterns('',
        ('^hello/$', hello),
        ('^time/$', current_datetime),
        (r'^time/plus/(\d{1,2})/$', hours_ahead),
    )
    

    留意到这句:

    from PythonProject.views import hello, current_datetime, hours_ahead
    

    Python 的 import 机制是怎样的呢?

    在 Python 中,每个 py 文件被称之为模块,每个具有 __init__.py 文件的目录被称为包。只要模块或者包所在的目录在 sys.path 中,就可以使用 import 模块或 import 包来使用。 

    在这之前,先介绍 Python 搜索路径。

    Python 搜索路径

    Python 搜索路径 就是使用 import 语句时,Python 所查找的系统目录清单。

    举例来说,假定你将 Python 路径设置为 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。

    如果执行代码 from foo import bar ,Python 将会首先在当前目录查找 foo.py 模块( Python 路径第一项的空字符串表示当前目录)。 如果文件不存在,Python将查找 /usr/lib/python2.4/site-packages/foo.py 文件。

    如果你想看Python搜索路径的值,运行Python交互解释器,然后输入:

    >>> import sys
    >>> print sys.path
    

    通常,你不必关心 Python 搜索路径的设置。 Python 和 Django 会在后台自动帮你处理好。

    Import 用法

    如果想使用非当前模块中的代码,需要使用Import,这个大家都知道。

    如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py:

    import b 
    

    但是如果要import一个不同目录的文件(例如b.py)该怎么做呢?

    首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即可,例如:

    import sys 
    sys.path.append('c:\xxxx\b.py') # 这个例子针对 windows 用户来说的 
    

    大多数情况,上面的代码工作的很好。但是如果你没有发现上面代码有什么问题的话,可要注意了,上面的代码有时会找不到模块或者包(ImportError: No module named xxxxxx),这是因为:

    sys模块是使用c语言编写的,因此字符串支持 '\n', '\r', '\t'等来表示特殊字符。所以上面代码最好写成:

    sys.path.append('c:\\xxx\\b.py') 
    # 或者
    sys.path.append('c:/xxxx/b.py') 
    

    这样可以避免因为错误的组成转义字符,而造成无效的搜索目录(sys.path)设置。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  2. [Python程序设计] Django后台管理系统 2 个条目
  3. [移动开发] Content Provider内容提供者 3 个条目
  4. [PHP程序设计] 声明式编程范式 12 个条目
  5. [移动开发] Activity 初步知识 2 个条目
  6. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  7. [软件工程与项目管理] 呈现器的布局与绘制 11 个条目
  8. [移动开发] Layout_weight属性解析 5 个条目
  9. [移动开发] Android 开发调试工具 ADB 3 个条目
  10. [运维管理] 路由器与交换机 4 个条目
  11. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  12. [Python程序设计] Python Web部署的背景知识 9 个条目
窗口 -- [八点]