Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162575
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 622
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 19:12
文章分类

全部博文(67)

分类: LINUX

2016-10-17 16:43:44

1、module和package
  1.1 模块module
    module就是一个.py文件
    xxx.py可以直接被import
    同级目录可以import xxx
    也可用sys.path.append()临时添加路径,来import其他目录下的xxx.py
  1.2 包packages
    packages就是一个文件夹(一般要有__init__.py,root包可以不要),其中包括多个module
    以包的形式import
    -aaa
      |-__init__.py
      |-foo.py
    在aaa的同级文件夹下,即可import aaa,__init__.py定义的函数fun即可通过aaa.fun()访问,
    也可import aaa.foo,foo.py中定义的函数fun可以通过aaa.foo.fun()访问
  1.3 root包
    不含__init__.py的package
    
2、自定义模块、包的使用
    setup.py
    from distutils.core import setup  
    setup(name='nnn',  
           version='1.0',  
           py_modules=['foo'],  
          )
    python setup.py sdist生成一个.gz文件,可在别处解压安装
    python setup.py install安装,将gz中的文件copy到site-package目录中
    
示例:
  2.1
    -aaa/
      |-setup.py
      |-foo/
        |-__init__.py
        |-fff.py

    setup.py
    from distutils.core import setup    
    setup(name='nnn',  
           version='1.0',  
           packages = ['foo']  
         )
    python setup.py sdist即可生成一个.gz文件
    python setup.py install将文件copy到site-package目录中,文件结构为
    |-foo/
      |-__init__.py
      |-fff.py
    import foo后在foo/__init__.py定义的函数fun即可通过foo.fun()访问,但不可访问foo/fff.py中定义的函数
    import foo.fff后foo/fff.py中的函数fun可通过foo.fff.fun()访问,foo/__init__.py定义的函数fun可以通过foo.fun()访问(默认import了fff的上级foo)
    from foo import fff后foo/fff.py中的函数fun可通过fff.fun()访问,foo/__init__.py定义的函数不可访问
    from foo import *后foo/__init__.py中的函数fun可通过fun()访问,不能用foo.fun(),fff的都不能访问
    from foo.fff import *后foo/fff.py中的函数fun可通过fun()访问,不能用fff.fun(),foo的都不能访问
    总结:
    import foo.fff能用foo.fff和foo
    from foo import fff 只能用fff
  2.2
    -aaa/
      |-setup.py
      |-foo/
        |-__init__.py
        |-fff/
          |-__init__.py
          
    from distutils.core import setup
    setup(name='nnn',
           version='1.0',
           packages=['foo', 'foo.fff'],
          )
    install后在site-package下生成
    |-foo/
      |-__init__.py
      |-fff/
        |-__init__.py 
  2.3
    -aaa/
      |-setup.py
      |-fff.py
      |-ggg.py
      |-foo/
        |-__init__.py
        
    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          packages=[''],  
          )
    install后在site-package下生成
      |-fff.py
      |-ggg.py
    只安装了fff,ggg,没有安装foo      
    这就是root包,当前目录没有__init__.py,只将当前目录下的xx.py作为模块安装,包不会被安装     
  2.4
    -aaa/
      |-setup.py
      |-src/
        |-fff.py
        |-ggg.py

    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          package_dir={'': 'src'},  
          packages=[''],  
          )      
    效果同上
     package_dir={'a': 'b'}  这是一个dictionary,b是实际目录,a是一个安装后使用的名字用来替代b,当a为空时,就是root包
  2.5
    -aaa/
      |-setup.py
      |-fff.py
      |-foo/
        |-__init__.py
        |-ggg.py

    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          packages=['foo'],  
          )  
    install后在site-package下生成
    |-foo/
      |-__init__.py
      |-ggg.py
  2.6
    -aaa/
      |-setup.py
      |-fff.py
      |-src/
        |-__init__.py
        |-ggg.py
    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          package_dir={'foo': 'src'},
          packages=['foo'],  
          )     
    效果同上
  2.7
    -aaa/
      |-setup.py
      |-__init__.py
      |-fff.py
      |-ggg.py
    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          package_dir={'foo': ''},
          packages=['foo'],  
          )     
    效果同上
  2.8
    -aaa/
      |-setup.py
      |-fff.py
      |-src/
        |-__init__.py
        |-ggg.py
        |-subsrc/
          |-__init__.py
          |-hhh.py
        
    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          package_dir={'foo': 'src'},
          packages=['foo', 'foo.subsrc'],  
          )
    install后在site-package下生成
      |-foo/
        |-__init__.py
        |-ggg.py
        |-subsrc/
          |-__init__.py
          |-hhh.py
  2.9
    -aaa/
      |-setup.py
      |-fff.py
      |-src1/
        |-__init__.py
        |-ggg.py
      |-src2/
        |-__init__.py
        |-hhh.py
        
    from distutils.core import setup  
    setup(name='nnn',  
          version='1.0',  
          package_dir={'foo1': 'src1', 'foo2': 'src2'},
          packages=['foo1', 'foo2'],  
          )
    install后在site-package下生成
      |-foo1/
        |-__init__.py
        |-ggg.py
      |-foo2/
        |-__init__.py
        |-hhh.py
阅读(2207) | 评论(0) | 转发(0) |
0

上一篇:strace原理

下一篇:linux脚本后台运行

给主人留下些什么吧!~~