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
阅读(1303) | 评论(0) | 转发(0) |