Архив автора: admin

Python 201: Введение в distutils (Перевод)

В прошлый раз мы узнали как создавать модули и пакеты. Сегодня мы возьмём этот пакет и посмотрим, как при помощи distutils мы можем сделать этот пакет доступным для других людей. Мы научимся: 
  • создавать файл setup.py
  • создавать source distribution
  • создавать установщик для Windows

Начнём!

Пишем наш первый скрипт “setup.py”

Когда вы пишете ваш скрипт setup.py, Вы должны держать в голове его расположение. Если он будет находиться в папке с вашим пакетом, то это приведёт к ошибке при попытке им воспользоваться. Если он будет расположен где-то далеко, то скорее всего Вы при установке добавите ещё и те файлы, которые бы распространять не хотели. Поэтому для простоты мы создадим новую папку, куда и скопируем созданную вчера папку “mymath”. И тут же сохраним наш setup.py. Структура новой папки будет выглядеть так:
myNewFolder/
mymath/
setup.py
Внимание: Если у Вас нет кода, созданного в прошлой статье, его можно скачать тут

Теперь неплохо бы этот файл наполнить кодом:

from distutils.core import setup
 
setup(name = "mymath",
version = "0.1",
description = "A Simple Math Package",
author = "Mike Driscoll",
author_email = "mike@somedomain.com",
url = "http://www.blog.pythonlibrary.org/2012/07/08/python-201-creating-modules-and-packages/",
packages=["mymath"]
)
Что же, выглядит не плохо. Если мы хотим добавить в наш setup.py ещё какие-то пакеты, то мы просто перечисляем их в списке packages. Кроме того есть список py_modules, куда можно добавить отдельные модули. Если Вы будете рыться в документации, то Вы обнаружите, что Вы можете добавлять даже файлы, не являющиеся скриптами Python используя класс Extension библиотеки distutils. Например, это может понадобиться для добавления файлов С или чего-то в этом роде, что можно встретить в сторонних пакетах, вроде lxml.

Distutils: Как распространять исходники и установщики для Windows

После того, как мы сохранили наш файл со скриптом, мы можем создать архив с исходниками, который будет использован для распространения нашего замечательного пакета. Откройте терминал (или командную строку в Windows) и перейдите в созданную вами папку. Затем выполните следующую команду

python setup.py sdist

Вы увидите что-то вроде этого:

C:UsersmdriscollDocumentsmymath-setup>python setup.py sdist
running sdist
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
writing manifest file 'MANIFEST'
creating mymath-0.1
creating mymath-0.1mymath
copying files to mymath-0.1…
copying README.txt -> mymath-0.1
copying setup.py -> mymath-0.1
copying mymath__init__.py -> mymath-0.1mymath
copying mymathadd.py -> mymath-0.1mymath
copying myma
thdivide.py -> mymath-0.1mymath

copying mymathmultiply.py -> mymath-0.1mymath
copying mymathsubtract.py -> mymath-0.1mymath
creating dist
creating 'distmymath-0.1.zip' and adding 'mymath-0.1' to it
adding 'mymath-0.1PKG-INFO'
adding 'mymath-0.1README.txt'
adding 'mymath-0.1setup.py'
adding 'mymath-0.1mymathadd.py'
adding 'mymath-0.1mymathdivide.py'
adding 'mymath-0.1mymathmultiply.py'
adding 'mymath-0.1mymathsubtract.py'
adding 'mymath-0.1mymath__init__.py'
creating 'distmymath-0.1.zip' and adding 'mymath-0.1' to it
adding 'mymath-0.1PKG-INFO'
adding 'mymath-0.1README.txt'
adding 'mymath-0.1setup.py'
adding 'mymath-0.1mymathadd.py'
adding 'mymath-0.1mymathdivide.py'
adding 'mymath-0.1mymathmultiply.py'
adding 'mymath-0.1mymathsubtract.py'
adding 'mymath-0.1mymath__init__.py'
removing 'mymath-0.1' (and everything under it)

Что бы всё это могло значить? Только то, что distutils создал новую папку, названную dist, в которой теперь находится zip файл (mymath-0.1.zip) со всеми файлами вашего пакета. Если же Вы работаете на *nix — то получите tarball.
Далее, если Вы хотите создать установщик под Windows — это тоже будет легко сделать. Вам для этого понадобится такая команда:
python setup.py bdist_wininst

Эта  команда создаст папку build (на которую Вы можете не обращать внимание) и файл с названием mymath-0.1.win32.exe в вашей папке dist, который Вы можете запустить под Windows для установки вашего пакета. Так давайте попробуем!

Как установить ваш пакет?

В случае исходников, Вам надо их распаковать / разархивировать и затем выполнить следующую команду:
python setup.py install

Если всё было сделано верно и всё работает верно, то пакет будет установлен в вашей системе (для той версии python, которую Вы используете для запуска этой команды — прим. пер.). Если Вы запустите установщик Windows, то возникнет такой мастер установки:

Обратите внимание, что тут показаны все метаданные, которые мы указывали в нашем скрипте setup.py. Круто, правда? В любом случае, если Вы выполните все шаги мастера — Вы опять же установите пакет на свою систему.
Внимание: при такой установке пакет будет установлен в вашу основную версию Python. Если Вы не хотите этого — используйте virtualenv.

Итоги

Теперь Вы должны уметь создавать установщики и устанавливать свои пакеты при помощи distutils. Если Вы хотите загрузить ваш пакет в Python Packages Index (PyPI) — смотрите руководство. Удачи и кодируйте удовольствие!

Чтение на будущее

Источник

Автор: Ishayahu Lastov

Советы целителей: как правильно собирать лекарственные растения?

Чтобы лекарственное растение помогло, собирать его нужно правильным способом и в правильном месте. Цветы боярышника, белой акации и рябины можно собирать в июне. Немало в этот период и цветущих трав. Собирая травы собственноручно, человек вкладывает в них свою энергетику. Старые люди говорили, что, беря цветы, листья или почки у растения, обязательно нужно попросить у Бога благословения: «Отец Небо, Земля-Мать, благословите это растение брать!». Конечно, можно пользоваться и травами из аптеки. Но при этом мы не знаем, где они собраны. А еще, поскольку не вложили в них своего труда, то и относимся к лечению ими более легкомысленно.

В первую очередь нужно знать общие правила сбора. Цветы кустистых растений всегда нужно собирать с тыльной, не солнечной стороны, утром до 12.00, когда ультрафиолетовые лучи – еще не такие сильные. Собирают цветы и травы сухими, без росы и не после дождя. Цветы кустистых растений берут вместе с побегом. Время для сбора выбирают в пору буйного цветения растения. Не стоит ожидать, пока оно начнет отцветать.

Собирать травы нужно в экологически чистых местах. От трассы нужно отойти хотя бы 2-3 километра, чтобы растения были чистыми. В начале июня запасаются зверобоем. Масло из зверобоя очень полезно для тех, кто имеет болезнь витилиго – кожное заболевание, которое трудно лечится. Но, чтобы это растение помогло, собрать ее нужно правильно. Нельзя надолго оставлять сорванное растение — эфирные масла улетучиваются и целебные свойства уменьшаются. Поэтому масло из зверобоя нужно делают сразу на месте сбора. Для этого нужно взять с собой в поле банку оливкового для наружного использования или нерафинированного подсолнечного масла. Срывая цветы, сразу бросать их в масло. Набрав полную банку, закрыть крышкой. Придя домой, крышку заменить стеклянной и поставить банку на солнечное окно.

Таким способом делают вытяжку из этого растения, не используя пресс. На окне банка должна оставаться 21 день. Дальше масло отцеживают и хранят в темном месте. Для лечения втирают в пораженные участки кожи 1-3 раза в день.

Если же зверобой собирают для приготовления чая, то срезают всю наземную часть стебля в первые две недели его цветения. Сушить можно целыми гроздьями, не обрывая со стебля цветы и листья, в чистом, сухом, хорошо проветриваемом месте. Но не на балконе – на растение не должны попадать прямые солнечные лучи. Лучше — в комнате под столом. На пол застелить бумагу, а сверху накрыть марлей. Хотя бы один раз в день переворачивать.

Зверобой имеет большую целебную силу. Он хорошо лечит дисбактериоз, болезни кишечно-желудочного тракта, улучшает перистальтику желудка, помогает при отравлениях. Но его нельзя передозировать. Особенно – мужчинам. Им чай из самого зверобоя принимать не рекомендуется – он плохо влияет на потенцию. Лучше заваривать чай из 3-5 трав. Причем в такой сбор все травы берут по столовой ложке, а зверобоя – чайную ложку. А вот женщинам зверобой не вредит. Напротив, регулирует работу яичников.

Так же, сразу же на месте сбора, в банку со спиртом собирают цветы боярышника. Собрав, накрывают стеклянной крышкой и оставляют на солнце 21 день. Употребляют по 20 капель четыре раза в день. Он помогает при лечении сердечнососудистых заболеваний, вегето-сосудистой дистонии. А тем, кто имеет проблемы с сосудами, помогут цветы белой акации. Спиртовая настойка этих цветов полезна при тромбофлебитах, тромбозных узлах, варикозном расширении вен, разных кожных заболеваниях. Собирают цветы акации тоже сразу в спирт. На солнце держат семь дней. Дальше выкладывают в миску, добавляют один порезанный лимон в расчете на литровую банку. Перемешивают и опять наполняют банку и еще 7 дней держат на солнце. Даже тем, кто не имеет проблем с сосудами, такой настойкой хорошо протирать кожу – она хорошо снимает сухость, помогает при трещинах на стопах. Используют настойку после ванны, втирая в ноги снизу вверх.

Цветет в июне черная и красная ря

Бутоньерка для жениха

Бутоньерка для жениха

В этом уроке делает симпатичную бутоньерку для жениха.

 

Бутоньерка для жениха

Бутоньерка для жениха

Читать

Введение в pyfpdf – Простая библиотека для создания PDF на Python (Перевод)

Сегодня мы посмотрим на простую библиотеку для создания PDF, которая называется pyfpdf и является портом библиотеки FPDF для PHP. Она не может заменить Reportlab, но даёт Вам более чем простую возможность создавать PDF файлы. Давайте на неё посмотрим.

Установка pyfpdf

К сожалению, у этого пакета не setup.py или eggs, что облегчило бы нам его установку. Вместо этого Вам придётся скачать его, разархивировать и скопировать получившуюся папку в папку site-packages. Последняя версия создаёт папку pyfpdf-1.54b, так что Вам придётся переименовать её в pyfpdf, если Вы хотите использовать примеры из их руководства или из этой статьи. Кроме того, Вы можете просто скопировать его в virtualenv.

Тест-драйв pyfpdf

Как и при знакомстве с любой новой библиотекой, для того, чтобы понять, как она работает, Вам надо написать несколько примеров. Вот простейший код, с помощью которого Вы можете создать PDF:

import pyfpdf
 
pdf = pyfpdf.FPDF(format='letter')
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Welcome to Python!", align="C")
pdf.output("tutorial.pdf")
Обратите внимание, что когда Вы инициализируете ваш FPDF объект, Вы должны сообщить ему, что хотите, чтобы результат был с размером «letter». По умолчанию его значение «A4». Далее мы должны добавить страницу, задать шрифт и поместить туда какой-нибудь текст. Вызов pdf.cell немного не очевиден. Первые два аргумента — ширина и высота и определяет место, где будет располагаться ваш текст. Параметр align принимает в качестве значения один символ. В нашем случае мы центрируем текст, передавая символ «С». Последняя строка принимает два параметра — имя файла и путь. Если путь не задан, то файл будет располагаться в рабочей папке скрипта.
А что, если мы хотим добавить ещё одну строку? Это можно сделать, добавляя текст в конец файла, добавив ещё одну «ячейку». Если Вам нужен разрыв строки — можно использовать такой код:
import pyfpdf
 
pdf = pyfpdf.FPDF(format='letter')
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Welcome to Python!", ln=1, align="C")
pdf.cell(200,10,'Powered by FPDF',0,1,'C')
pdf.output("tutorial.pdf")

Добавляем Цацки: заголовки, нижние колонтитулы и разрывы страниц

В руководстве показано, как можно добавить заголовок, нижний колонтитул и разрыв страниц. Но этот способ не работает, так как надо изменить имя метода и код надо переписать, используя this вместо self (не знаю о чём он — прим. пер.). Вот что должно быть в идеале:

import pyfpdf
 
########################################################################
class MyPDF(pyfpdf.FPDF):
""""""
 
#----------------------------------------------------------------------
def header(self):
"""
Заголовок на каждой странице
"
""
# добавляем логотип
self.image("logo.png", x=10, y=8, w=23)
# располагаем логотип справа
self.cell(w=80)
 
# устанавливаем шрифт для заголовка, B=Bold
self.set_font("Arial", style="B", size=15)
# заголовок страницы
self.cell(40,10, "Python Rules!", border=1, ln=0, align="C")
# вставляем разрыв строки в 20 pixels
self.ln(20)
 
#----------------------------------------------------------------------
def footer(self):
"""
Нижний колонтитул на каждой странице
"
""
# располагаем footer в 15mm от конца страницы
self.set_y(-15)
 
# устанавливаем шрифт, I=italic
self.set_font("Arial", style="I", size=8)
 
# отображаем номер страницы по центру
pageNum =
"Page %s/{nb}" % self.page_no()
self.cell(0, 10, pageNum, align="C")
 
#----------------------------------------------------------------------
if __name__ == "__main__":
pdf = MyPDF
()
pdf.
alias_nb_pages()
pdf.
add_page()
pdf.
set_font("Times", size=12)
 
# добавляем несколько строк на страницу
for i in range(1, 50):
pdf.
cell(0, 10, "Line number %s" % i, border=0, ln=1)
pdf.
output("tutorial2.pdf")
Итак, мы создали подкласс FPDF, переопределили его методы header и footer, так как в оригинальном классе они всего лишь заглушки. В нашем заголовке мы создаём объект изображения и задаём его координаты х/у и его ширину w. Кроме того, вы можете передать и его высоту, если Вас беспокоит соотношение сторон. После этого мы его позиционируем и добавляем строку текста для заголовка. Наконец, мы добавляем разрыв строки.
Footer мы помещаем на 15 мм выше конца страницы. Его шрифт — 8pt Arial Italic. Ошибка в официальном руководстве была в том, что он вызывал self.PageNo(), который не существует. Зато есть метод page_no, который, видимо, его заменяет, так что я его и испо
льзовал. Наконец, в конце скрипта мы создаём наш PDF объект и записываем в него несколько строк. Если Вы запустите этот скрипт, Вы получите 3-х страничный документ.

Подведение итогов

В руководстве говорится так же об использовании цветов, но это я оставлю Вам в качестве домашнего задания. Ничего по поводу рисования, вставки таблиц или графиков, встраивания собственных шрифтов и многих других вещей, доступных в Reportlab, я не нашёл, но, опять же, это и предполагалось в качестве простой библиотеки для создания PDF. Если Вам нужны более продвинутые инструменты — смотрите в сторону Reportlab или проектов, созданных на его основе (rst2pds или xhtml2pdf).

Домашнее чтение

Автор: Ishayahu Lastov

Быстрое введение в pdfrw (Перевод)

Я всегда наблюдаю за библиотеками для Pytho для работы с  PDF и в один прекрасный день я столкнулся с pdfrw. Это похоже на аналог pyPDF, так как позволяет Вам читать и записывать PDFы, объединять их и использовать Reportlab для пометки их водяными знаками, кроме всего прочего. Проект немного мёртв, так как последнее обновление было в 2011 году, но с учётом того, что pyPDF обновлялся в 2010 — это не так уж и плохо. В этой  статье мы проведём небольшой тест-драйв pdfrw и посмотрим, на что он годен. Поехали!
Заметка об установке: К сожалению у этой библиотеки нет скрипта setup.py, так что Вам придётся получить исходники с Google Code а затем скопировать папку pdfrw в site-packages или в ваш virtualenv.

Соединяем PDFы при помощи pdfrw

Достаточно простая задача:
from pdfrw import PdfReader, PdfWriter
 
pages = PdfReader(r'C:UsersmdriscollDesktop1.pdf', decompress=False).pages
other_pages = PdfReader(r'C:UsersmdriscollDesktop2.pdf', decompress=False).pages
 
writer = PdfWriter()
writer.addpages(pages)
writer.addpages(other_pages)
writer.write(r'C:UsersmdriscollDesktopout.pdf')
Что мне показалось интересным — так это возможность добавить метаданные в файл перед тем, как Вы его сохраните:
writer.trailer.Info = IndirectPdfDict(
Title = 'My Awesome PDF',
Author = 'Mike',
Subject = 'Python Rules!',
Creator = 'myscript.py',
)
Вот пример того, как соединить PDFы при помощи pdfrw и reportlab:
# http://code.google.com/p/pdfrw/source/browse/trunk/examples/rl1/subset.py
import sys
import os
 
from reportlab.pdfgen.canvas import Canvas
 
import find_pdfrw
from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl
 
 
def go(inpfn, firstpage, lastpage):
firstpage, lastpage = int(firstpage), int(lastpage)
outfn = 'subset_%s_to_%s.%s' % (firstpage, lastpage, os.path.basename(inpfn))
 
pages = PdfReader(inpfn, decompress=False).pages
pages = [pagexobj(x) for x in pages[firstpage-1:lastpage]]
canvas = Canvas(outfn)
 
for page in pages:
canvas.setPageSize(tuple(page.BBox[2:]))
canvas.doForm(makerl(canvas, page))
canvas.showPage()
 
canvas.save()
 
if __name__ == '__main__':
inpfn, firstpage, lastpage = sys.argv[1:]
go(inpfn, firstpage, lastpage)
На мой взгляд — так это клёво. У Вас есть несколько альтернатив pyPDF’у. Кроме того, в пакете Вы найдёте ещё несколько интересных примеров, например:
  1. Как использовать pdf (одна страница) для фона для других страниц при помощи platypus.
  2. Как добавить водяной знак
Я думаю, у этого проекта большой потенциал. К счастью, мы можем проявить к нему достаточно интереса, чтобы снова запустит его, ну или найти что-то новенькое.

Автор: Ishayahu Lastov

Миниатюрный садик

Миниатюрный садик

Сегодня будем учиться делать миниатюрному садоводству с разными растениями.

Миниатюрный садик

Читать