zoukankan      html  css  js  c++  java
  • Python的模块、包等概念的理解

    python包、模块与文件系统的对应关系

    包:对应于文件夹,模块:文件

    导入模块

    模块搜索路径
    导入一个叫spam的模块时,解释器先在当前目录中搜索名为spam.py的文件,然后在环境变量PYTHONPATH指向的目录列表中搜索,然后是环境变量PATH中的路径列表。如果PYTHONPATH没有设置,或者文件没有找到,接下来搜索安装目录,在UNIX中,通常是 /usr/local/lib/python

    实际上,解释器由sys.path变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录),PYTHONPATH
    和安装目

    sys.path.append(modulepath)

     

    使用该方法加入sys.path只能在运行时,下次运行编译器时就不存在,这里modulepath可以是包含.py/pyc/pyo/pyw等文件的zipegg

    clip_image002

    clip_image004

     

    __init__.py

    模块import前都会调用该文件

    clip_image006

    因此,可以在__init__.py文件中定义__all__

    __all__

    通过定义列表__all__,模块可以精确控制from module import *导入的名称集合,比如

    module.py

    __all__ = [‘bar’, ‘SomeClassName’, ‘SomeProperty’, ‘SomeFunction’]

    from . import somemodule

    .表示与调用模块相同的目录

    ..表示上级模块,比如from .. import somemodule

    单独导入包名称不会导入包中所包含的子模块,比如:

    import somepack

    somepack.somemodule(xx) #失败!

    但由于import somepack会执行somepack下的__init__.py,所以如果__init__.py中有

    from . import somemodule之类的语句,则somepack.somemodule(xx)可以执行。

    分发

    一定的格式规范:

    clip_image007

    添加setup.py文件

    clip_image008

    clip_image010

    clip_image012

    clip_image014

    clip_image016

    文件格式

    python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pycpyo本质上和py没有太大区别,只是对于这个模块的加载速度提高了,并没有提高代码的执行速度,通常情况下不用主动去编译pyc文件,文档上说只要调用了import model那么model.py就会先编译成pyc然后加载

    pypyc的区别

    pyc:预编译过的

    pyo

    优化的预编译

    python -O -m py_compile file.py

    pypyw的区别

    Windows.py python.exe 运行,.pyw pythonw.exe 运行

    python.exe 比较起来,pythonw.exe 有以下的不同:

    1)执行时不会弹出控制台窗口(也叫 DOS 窗口)

    2)所有向原有的 stdout stderr 的输出都无效

    3)所有从原有的 stdin 的读取都只会得到 EOF

     

    .pyw 格式是被设计来运行开发完成的纯图形界面程序的。

    纯图形界面程序的用户不需要看到控制台窗口。

     

     

    参考资料:

    Python sys.path详解

  • 相关阅读:
    MogileFS的实现和bug解决
    MogileFS介绍
    SAMBA
    NFS
    测试DNS服务的命令
    DNS中的AC、rndc、智能DNS解析和基础排错
    DNS的主从、子域授权和转发服务器
    DNS域名记录
    DNS
    JavaScript设计模式与开发实践随笔(二)
  • 原文地址:https://www.cnblogs.com/yaksea/p/2159442.html
Copyright © 2011-2022 走看看