Показаны сообщения с ярлыком Python. Показать все сообщения
Показаны сообщения с ярлыком Python. Показать все сообщения

Организация модулей в Python

How do I organize my modules (source files)? (Archive)

The first line of each file shoud be #!/usr/bin/env python. This makes it possible to run the file as a script invoking the interpreter implicitly, e.g. in a CGI context.
Next should be the docstring with a description. If the description is long, the first line should be a short summary that makes sense on its own, separated from the rest by a newline.
All code, including import statements, should follow the docstring. Otherwise, the docstring will not be recognized by the interpreter, and you will not have access to it in interactive sessions (i.e. through obj.__doc__) or when generating documentation with automated tools.
Import built-in modules first, followed by third-party modules, followed by any changes to the path and your own modules. Especially, additions to the path and names of your modules are likely to change rapidly: keeping them in one place makes them easier to find.
Next should be authorship information. This information should follow this format:
__author__ = "Rob Knight, Gavin Huttley, and Peter Maxwell"
__copyright__ = "Copyright 2007, The Cogent Project"
__credits__ = ["Rob Knight", "Peter Maxwell", "Gavin Huttley",
                    "Matthew Wakefield"]
__license__ = "GPL"
__version__ = "1.0.1"
__maintainer__ = "Rob Knight"
__email__ = "rob@spot.colorado.edu"
__status__ = "Production"
Status should typically be one of "Prototype", "Development", or "Production". __maintainer__should be the person who will fix bugs and make improvements if imported. __credits__differs from __author__ in that __credits__ includes people who reported bug fixes, made suggestions, etc. but did not actually write the code.


источник

Уровни логирования в Python

LevelWhen it’s used
DEBUGDetailed information, typically of interest only when diagnosing problems.
INFOConfirmation that things are working as expected.
WARNINGAn indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.
ERRORDue to a more serious problem, the software has not been able to perform some function.
CRITICALA serious error, indicating that the program itself may be unable to continue running.

Python FAQ – часто задаваемые вопросы по Python

Вопрос: Как установить Python-пакет из .tar.gz архива?
Ответ:
pip install relative_path_to_seaborn.tar.gz  
pip install absolute_path_to_seaborn.tar.gz  
pip install file:///absolute_path_to_seaborn.tar.gz  

Вопрос: Как установить Python-пакет из исходников?
Ответ:
$ mkdir /pypi && cd /pypi
$ ls -la
$ cd ~/src/myapp
$ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi
$ easy_install --always-unzip --allow-hosts=None --find-links=/pypi .

Вопрос: Как установить pip  на Windows?
Ответ:
Начиная с Python 3.4 и Python 2.7.9 pip поставляется по умолчанию.

Установка pycharm-community-2016.2.3 на ubuntu-16.04.1-desktop-amd64

$ sudo apt-get update

Если не собираетесь еще писать код на Java:
$ sudo apt-get install default-jre

Если собираете писать код на Java:
$ sudo apt-get install default-jdk


JetBrains особо не стал мучить себя созданием .deb пакета под Ubuntu. Поэтому тупо запаковал своё творение в .tar.gz архив.

Устанавливать будем в /opt, потому что это аналог папки Program Files в Windows. Папка /opt официально предназначена для дополнительного ПО. Все советуют устанавливать .tar.gz приложения в /opt. Нам понадобятся rw разрешения, чтобы писать в эту папку.


Как стартануть сервер из папки

Есть установлен Python, то можно дать команду:
python -m http.server 8000

Сервер будет доступен по адресу: http://localhost:8000


--

error: Unable to find vcvarsall.bat

На Windows 10 + Python 3.5.1 при установке библиотеки simple-crypt с помощью pip:
$ ./pip install simple-crypt
может возникать следующая ошибка:
    error: Unable to find vcvarsall.bat

Причина этого несчастья в том, что что при установке не был найден компилятор C.

Можно не заморачиваться и взять готовый пакет отсюда (если он там есть конечно):

Всякие разные решения:


ValueError: unknown locale: UTF-8

Traceback (most recent call last):
  File "/usr/local/bin/sphinx-build", line 11, in <module>
    sys.exit(main())
  File "/Library/Python/2.7/site-packages/sphinx/__init__.py", line 51, in main
    sys.exit(build_main(argv))
  File "/Library/Python/2.7/site-packages/sphinx/__init__.py", line 61, in build_main
    from sphinx import cmdline
  File "/Library/Python/2.7/site-packages/sphinx/cmdline.py", line 19, in <module>
    from docutils.utils import SystemMessage
  File "/Library/Python/2.7/site-packages/docutils/utils/__init__.py", line 20, in <module>
    import docutils.io
  File "/Library/Python/2.7/site-packages/docutils/io.py", line 18, in <module>
    from docutils.utils.error_reporting import locale_encoding, ErrorString, ErrorOutput
  File "/Library/Python/2.7/site-packages/docutils/utils/error_reporting.py", line 47, in <module>
    locale_encoding = locale.getlocale()[1] or locale.getdefaultlocale()[1]
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 511, in getdefaultlocale
    return _parse_localename(localename)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 443, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
make[2]: *** [html] Error 1
make[1]: *** [install-doc] Error 2

make: *** [git-cola.app] Error 2

UnicodeDecodeError: 'ascii' codec can't decode byte

BUG

$ icdiff a/b.json c/d/j.json
Traceback (most recent call last):
  File "/usr/local/bin/icdiff", line 603, in <module>
    start()
  File "/usr/local/bin/icdiff", line 511, in start
    diff_files(options, a, b)
  File "/usr/local/bin/icdiff", line 598, in diff_files
    codec_print(line, options)
  File "/usr/local/bin/icdiff", line 518, in codec_print
    sys.stdout.write(s.encode(options.output_encoding))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 140: ordinal not in range(128)

Устройство асинхронных фреймворков для Python

Асинхронный подход появился еще очень давно, когда надо было эмулировать параллельное выполнение задач на одноядерных процессорах и старых архитектурах.

«Асинхронность» и «параллельность» — довольно-таки ортогональные понятия, и один подход задачи другого не решает. 

Тем не менее асинхронности нашлось отличное применение в наше высоконагруженное время быстрых интернет-сервисов с тысячами и сотнями тысяч клиентов, ждущих обслуживания одновременно. 

Откровенно говоря, есть только два варианта работы с сокетом — синхронный и асинхронный.

С синхронным в целом все понятно — пришел клиент, открылся сокет, передали данные, если это все — сокет закрылся. В этом случае пока мы не закончили локальный диалог с одним клиентом — не можем начать его с другим. По такому принципу обычно работают простые серверы, которым не надо держать сотни и тысячи клиентов. В случае если нагрузка возрастает, но не критично — можно создать еще один или несколько потоков (или даже процессов) и обрабатывать подключения еще и в них. Это обкатанный годами, стабильно работающий подход, который, например, использует сервер Apache, — никаких неожиданностей, данные от клиентов обрабатываются в порядке строгой очереди, а в случае запуска какого-то «долгого» кода — например, каких-то вычислений или хитрого запроса в БД — это все никак не влияет на других клиентов.

Но есть проблема: сервер не может плодить потоки и процессы вечно — есть же, в конце концов, вполне ощутимые ресурсы, которые тратятся при каждом таком действии, и имеется верхний порог использования этих ресурсов. И вот тогда все вдруг вспомнили про асинхронность и системные вызовы для неблокирующего ввода-вывода. Зачем плодить кучу сокетов и потоков, выедать ресурсы, если можно данные от многих клиентов сразу одновременно слушать на одном сокете?