07. Модули

07. Модули

07. Модули

2 април 2014

Модули 101

.pyc

import

В този ред на мисли, показвали ли сме ви това:

import __hello__

Модули

from module import a, b, c
a()

Модули

from module import a, b, c
a()

from module import a as b
b()

Модули

from module import a, b, c
a()

from module import a as b
b()

from django.contrib.auth.models import User
my_user = User()

Модули

from django.db import models
my_model = models.Model()

Модули

import datetime
now = datetime.datetime.now()

if __name__ == "__main__":

Така можете да сте сигурни, че текущият файл е изпълнен, а не импортнат

Search Path

Search Path

import sys
print(sys.path)

dir()

Връща списък със всички имена в модул

import sys
dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__',
'__loader__', '__name__', '__package__', '__spec__', '__stderr__',
'__stdin__', '__stdout__', '_clear_type_cache', '_current_frames',
'_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions',
'abiflags', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix',
'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info',
'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info',
'float_repr_style', 'getallocatedblocks', 'getcheckinterval',
'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding',
'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof',
'getswitchinterval', 'gettrace', 'hash_info', 'hexversion',
'implementation', 'int_info', 'intern', 'maxsize', 'maxunicode',
'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache',
'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',
'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace',
'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info',
'warnoptions']

Пакети

panda/
    __init__.py
    head.py
    body.py
    belly.py
    eyes.py
    tail.py
    # ...

Импортване на всичко от даден модул

from panda import *

__all__

Релативни пътища

Можем да пропуснем търсенето в sys.path и директно да импортнем нещо от текущата директория

from . import panda

Можем да търсим и в "горния" възел

from .. import panda

Или:

from ..panda import tail

Инсталиране на пакети

Long story short

pip install package-name-goes-here

От къде ги тегли?

PyPI - the Python Package Index

Как да качим пакет там?

Пример

from distutils.core import setup

setup(name='Distutils',
  version='1.0',
  description='Python Distribution Utilities',
  author='Greg Ward',
  author_email='gward@python.net',
  url='http://www.python.org/sigs/distutils-sig/',
  packages=['distutils', 'distutils.command'],
)

Distutils addition meta-data

Classifiers

setup(...,
    classifiers=[
      'Development Status :: 4 - Beta',
      'Environment :: Console',
      'Environment :: Web Environment',
      'Intended Audience :: End Users/Desktop',
      'Intended Audience :: Developers',
      'Intended Audience :: System Administrators',
      'License :: OSI Approved :: Python Software Foundation License',
      'Operating System :: MacOS :: MacOS X',
      'Operating System :: Microsoft :: Windows',
      'Operating System :: POSIX',
      'Programming Language :: Python',
      'Topic :: Communications :: Email',
      'Topic :: Office/Business',
      'Topic :: Software Development :: Bug Tracking',
    ],
)

List trove classifiers

Добре, имаме го и сега какво?

Терминология

Въпроси?