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()
Така можете да сте сигурни, че текущият файл е изпълнен, а не импортнат
>>> import sys
>>> sys.path
[
'',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-linux',
'/usr/lib/python3.4/lib-dynload',
'/usr/lib/python3.4/site-packages',
]
Връща списък със всички имена в модул
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 *
Можем да пропуснем търсенето в sys.path и директно да импортнем нещо от текущата директория
from . import panda
Можем да търсим и в "горния" възел
from .. import panda
Или:
from ..panda import tail
Long story short
pip install package-name-goes-here
Драми
/usr/lib/python3.4
⇨ трябват ни root права за инсталиране
Изолирани обкръжения за python кода ни, в които можем да инсталираме каквото си искаме и да ползваме която си искаме версия на python
$ virtualenv ~/panda_env
$ source ~/panda_env/bin/activate
(panda_env)$ which python
/home/pandyo/panda_env/bin/python
(panda_env)$ which pip
/home/pandyo/panda_env/bin/pip
(panda_env)$ pip install dateutils
…
>>> import dateutils
>>> dateutils
<module 'dateutils' from '/home/pandyo/panda_env/lib/python3.4/site-packages/dateutils/__init__.py'>
Когато приключим можем да изпълним shell функцията deactivate
или просто да излезем от shell-а
Изолация, разделяне на отговорности, поддържане на адекватни версии на зависимостите, …
Когато нещо много страшно се счупи триете една папка и инсталирате само пакетите, които са нужни за един проект
Само т'ва експлицитно писане на директории и source-ване на shell скриптове е малко грозно…
$ sudo pip install virtualenvwrapper
…
$ mkvirtualenv panda
$ workon panda
(panda)$
from setuptools import setup, find_packages
setup(
name="hello_world",
version="0.1",
packages=find_packages(),
install_requires=['world>=1'],
author="Me",
author_email="me@example.com",
description="This is an Example Package",
license="PSF",
keywords="hello world example examples",
url="http://example.com/hello_world/"
)
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',
],
)
python setup.py register
python setup.py sdist upload
pip install wheel
python setup.py bdist_wheel