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

среда, 15 февраля 2023 г.

python3: ubuntu 16 и ошибки про docker

Проблемы только на Ubuntu16 и ниже.

apt install -y python3-pip

pip3 install --upgrade pip

После предыдущего шага pip сломается, нужно переустановить из скрипта

curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py; python3 get-pip.py --force-reinstall

Нужно переподключиться, чтобы подтянулись новые енвы.

pip3 install --upgrade --force-reinstall docker

pip3 install docker-compose

Если на предыдущем шаге ломается с ошибкой установки cffi : "fatal error: ffi.h: No such file or directory"

apt install libffi-dev

еще раз: 

pip3 install docker-compose

вторник, 8 ноября 2022 г.

Особенности работы с python-netbox

 Речь о той версии, которая pip install python-netbox (потому что их несколько)

Держим под рукой доку https://demo.netbox.dev/api/docs/ (можно на свой ипам открыть, /api/docs)

пятница, 28 октября 2022 г.

Парсинг сайтов через selenium

Скрейпинг сайтов с помощью библиотеки Selenium

Парсинг сайтов через python+bs4

 Понадобилось распарсить сайт хецнера для netbox, выбор пал на python+bs4

from bs4 import BeautifulSoup

import requests

Подключение, парсинг
 >>> r = requests.get('https://robot.hetzner.com/server/index/page/'+str(page), cookies=cookies)
>>> parsed = BeautifulSoup(page, "html.parser")

А теперь сами запросы

>>> print(parsed.head.title)

<title>Hetzner Online GmbH - Robot</title>

Вроде, несложно. Глянем заголовки meta

>>> print(parsed.head.meta)

<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"/>

И.. всё? Бага, их там много. Но нужно запросить через find_all

>>> parsed.find_all('meta')

Выберет меты по всей доке и выдаст массивом. Также, можно например так найти див с классом box_wide

>>> servers = parsed.findAll('div', class_='box_wide')

Можно запросить поле из тэга, например - итог запроса выше присвоили переменной и дальше через for server in servers при такой записи тэга <div class="box_wide" id="555">

>>> server.get('id')

будет 555
Далее, есть такая конструкция
              <td class="title server_article">
               <span class="tooltip_underline jquery-tooltip" tooltip="This server includes unlimited traffic.">
                PX61-SSD #555
               </span>
значение "внутри" тэгов span читается через .string (или .text), например так
server.find('td', class_='server_name').find('span').string

Есть ещё такой вариант
server.find_all('span', class_='tooltip_underline jquery-tooltip')

но в данном случае будет 3 таких поля и нужно выделить нужный номер

Вообще, таблички лучше парсить через тот же pandas или на худой конец HTMLTableParser

Также, можно извратиться так
>>> parsed.find_all('table')[3].tr.td.span.string
и это даже будет работать, но читаемость - сами понимаете. Ну и чуть изменят поля и привет, поэтому лучше find_all (или findAll, что одно и то же)

links
https://www.crummy.com/software/BeautifulSoup/bs4/doc/ - тут есть всё нужное, но читать - много.


понедельник, 25 марта 2019 г.

debian wheezy: Cannot fetch index base URL http://pypi.python.org/simple/

https://stackoverflow.com/questions/21294997/pip-connection-failure-cannot-fetch-index-base-url-http-pypi-python-org-simpl

Когда пытаемся сделать yum install python-pip; pip install --updrade pip то получаем
Cannot fetch index base URL http://pypi.python.org/simple/

Фикс:  pip install --index-url=https://pypi.python.org/simple/ --upgrade pip
(внимание на https://)

вторник, 24 января 2017 г.

CentOS: requests и как всегда древний софт

Суть в том, что в центоси весь софт древний как говно мамонта, и как итог - в том числе проблемы с LetsEncrypt сертификатами.
Для частичного решения данной проблемы есть пакет
https://pypi.python.org/pypi/certifi

Certifi is a carefully curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts. It has been extracted from the Requests project.

Можно ставить через pip, но любителям делать всё централизованно - стоит найти .src.rpm и обновлять для себя. Пример - тут
https://packages.temboard.io/yum/srpms/rhel7/python-certifi-2016.2.28-1.el7.centos.src.rpm

четверг, 22 декабря 2016 г.

Используем кэш для pip, npm, bower

Когда может понадобиться кэш? Например, когда часто пересобираем разные окружения или когда машины накатываются в докере итд. И каждый раз оно будет заново тянуть исходники, особенно актуально для различных докеров, а также сборкой rpmbuild с "чистым" BUILD(ROOT).

pip

cat >> ~/.pip/pip.conf << EOF
[global]
download_cache = ~/.cache/pip
EOF
mkdir -p ~/.cache/pip

Для более старых версий есть опция --download-cache <dir>, которую надо указать дополнительно -  в новых она активна по умолчанию. Отключать через --no-cache-dir

Также есть вариант через промежуточный wheel
pip wheel --wheel-dir=/tmp/wheelhouse cssselect==0.9.1
pip install /tmp/wheelhouse/cssselect-0.9.1-py2-none-any.whl

И попадались упоминания переменной PIP_DOWNLOAD_CACHE

npm

npm config set cache ~/.cache/npm
mkdir -p ~/.cache/npm
mv ~/.npm/* ~/.cache/npm/
rm -rf ~/.npm/


bower
cat >> ~/.bowerrc << EOF
{
  "cache": "$HOME/.cache/bower/"
}
EOF
mkdir -p ~/.cache/bower

links
https://pip.pypa.io/en/latest/reference/pip_install/#caching
https://blog.samat.org/2014/12/01/setting-up-package-caching-for-pip-and-npm/

вторник, 9 августа 2016 г.

python: Собираем свой пакет из pip версии

Зачастую в пакетах лежит нужная библиотека, но отставшая от нужной версии года так на 3-4. Или вообще доступная только в pip.
Самый простой вариант это использовать библиотеку из pip. К сожалению, у pip нет "собранных" версий, поэтому на хосте тогда нужен компилятор, что многим неприемлемо для "боевых" сред. И в целом это разумно.
Хороший выход - используем ноду для сборки и собираем там virtualenv с нужными пакетами. А потом итог оборачиваем в пакет (пишем спеку). Также это может быть докер, но опять же - туда нужен компилятор... И опять возвращаемся к virtualenv. Впрочем, для простых либ и единообразной среды достаточно скопировать нужные файлы в SOURCES и раскидать их по местам установщиком пакета, более сложные либы лучше пакетировать раздельно. Если уже есть такая же старая либа --  всё просто, качаем .src.rpm, правим .spec под новую версию, подкладываем архив с новыми исходниками, собираем.
А может быть, что за основу взять нечего... Тогда можно взять например python-pika, скопировать его spec и начать правки.
Нужно скачать архив нужной версии, для примера сделаем пакет для couchbase. Работаем от обычного пользователя, который будет заниматься сборкой

вторник, 26 апреля 2016 г.

Scapy

http://scapy.net/

Scapy — сетевая утилита написанная на языке Python, которая позволяет посылать, просматривать и анализировать сетевые пакеты. В отличии от многих других утилит, утилита Scapy не ограничена только теми протоколами, пакеты которых она может генерировать. Фактически, она позволяет создавать любые пакеты и комбинировать атаки различных типов.
С помощью Scapy легко осуществлять такие процедуры, как:
сканирование,
трассировку маршрута,
проверку хоста (probing),
юнит-тестирование каких-либо сетевых функций,
исследование сети и различные виды атак.
С помощью Scapy можно заменить:
hping,
arpspoof,
arp-sk,
arping,
p0f
и частично
Nmap,
tcpdump,
tshark.

http://xgu.ru/wiki/Scapy

И очень много примеров тут
https://habrahabr.ru/post/249563/

среда, 1 июля 2015 г.

nginx+pootle

Pootle - это система на базе django, помогающая с переводом .po файлов на разные языки, в том числе отслеживание изменений.
Поскольку это питон, желательно использовать uWSGI и nginx.

вторник, 9 декабря 2014 г.

CentOS 6 + Python 2.7

В сети есть много примеров с ручной компиляцией питона в /usr, но пока ни в одном примере не было последующего заворачивания в пакеты, а прямая установка хороша только для девел-машин и вообще долго.
Тем более, штатно есть пакет
centos-release-SCL.x86_64 : CentOS Software Collections release configs
(Там же - Perl 5.16.3, PHP 5.4.14, Python 3.3, Ruby 1.9.3, MariaDB 5.5, MySQL 5.5, PostgreSQL 9.2, Node.js 0.10)

четверг, 31 июля 2014 г.

python: pip или easy_install?

"Использую easy_install только для того чтобы установить pip… Он умеет ставить пакеты прямо из систем управления пакетами, например:
pip install git+git://github.com/frol/django-email-confirmation.git

Также можно записать в файл список всех пакетов, которые нужны в проекте и потом установить все этим пакеты используя команду:
pip install -r requirements.txt

Ну, и конечно можно указывать требуемые версии используя знаки сравнения:
pip install liten==0.1.3
pip install liten>=0.1.3 "
http://habrahabr.ru/post/112332/#comment_3595049


What's the difference between pip and easy_install?
  • All packages are downloaded before installation. Partially-completed installation doesn’t occur as a result.
  • Care is taken to present useful output on the console.
  • The reasons for actions are kept track of. For instance, if a package is being installed, pip keeps track of why that package was required.
  • Error messages should be useful.
  • The code is relatively concise and cohesive, making it easier to use programmatically.
  • Packages don’t have to be installed as egg archives, they can be installed flat (while keeping the egg metadata).
  • Native support for other version control systems (Git, Mercurial and Bazaar)
  • Uninstallation of packages.
  • Simple to define fixed sets of requirements and reliably reproduce a set of packages.
pip doesn’t do everything that easy_install does. Specifically:
  • It cannot install from eggs. That’s not a problem anymore though because pip supports the superior binary wheel format since the 1.4 release.
  • It is incompatible with some packages that extensively customize distutils or setuptools in their setup.py files.
http://xahlee.info/python/python_whats_pip_easyinstall_setuptools.html
https://pip.pypa.io/en/1.5.X/other-tools.html#easy-install
http://stackoverflow.com/questions/3220404/why-use-pip-over-easy-install


Похоже, у easy_install только 1 плюс - штатно пакеты уже собраны, не надо держать билд-серверы с компиляторами. Плюс
" в debian-based есть пакет python-stdeb. в нём — утилка pypi-install, которая делает из eggа deb-пакет и ставит его."
http://habrahabr.ru/post/112332/#comment_3596282

суббота, 15 марта 2014 г.

FreeBSD: предупреждение при сборке чего угодно из портов и ошибка про сборке lang/python2

"/usr/ports/Mk/bsd.python.mk", line 558: Malformed conditional (${PYTHON_REL} >= 320 && defined(PYTHON_PY3K_PLIST_HACK))
"/usr/ports/Mk/bsd.port.mk", line 6589: if-less endif
make: fatal errors encountered -- cannot continue

FreeBSD: scons: done reading SConscript files. error: setting stack size not supported:

При попытке собрать serf (для того же subversion) можно поймать баг

# make -C /usr/ports/www/serf install clean
===>  Building for serf-1.3.4
scons: Reading SConscript files ...
scons: done reading SConscript files.
error: setting stack size not supported:
  File "/usr/local/lib/scons-2.3.0/SCons/Script/Main.py", line 1344:
    _exec_main(parser, values)
  File "/usr/local/lib/scons-2.3.0/SCons/Script/Main.py", line 1308:
    _main(parser)
  File "/usr/local/lib/scons-2.3.0/SCons/Script/Main.py", line 1072:
    nodes = _build_targets(fs, options, targets, target_top)
  File "/usr/local/lib/scons-2.3.0/SCons/Script/Main.py", line 1228:
    jobs = SCons.Job.Jobs(num_jobs, taskmaster)
  File "/usr/local/lib/scons-2.3.0/SCons/Job.py", line 92:
    self.job = Parallel(taskmaster, num, stack_size)
  File "/usr/local/lib/scons-2.3.0/SCons/Job.py", line 365:
    self.tp = ThreadPool(num, stack_size, self.interrupted)
  File "/usr/local/lib/scons-2.3.0/SCons/Job.py", line 280:
    prev_size = threading.stack_size(stack_size*1024)
*** [do-build] Error code 2

Stop in /usr/ports/www/serf.

*** [install] Error code 1

Stop in /usr/ports/www/serf.

среда, 19 декабря 2012 г.

Python Imaging Library во FreeBSD

Нужно для django например. Странно, что пакет py27-django-1.4.2 (у меня) не втянул PIL по зависимостям.

Находится оно в graphics/py-imaging, впрочем есть еще graphics/py-pillow, юзер-френдли вариант. хз в чём это выражается.
Также может потребоваться поставить graphics/jpeg, если его не втянет само. Выражаться будет в том, что с jpeg будут ошибки, а всякие png будут обрабатываться нормально.

вторник, 4 октября 2011 г.

ISPManager и python

Как cgi запустить несложно, но это очень ограничивает производительность

Также можно через mod_python и mod_wsgi

Django хорошо работает через mod_wsgi:
http://forum.ispsystem.com/ru/showthread.php?t=14832

http://stackoverflow.com/questions/799354/configure-apache-to-use-python-just-like-cgi-php

четверг, 27 января 2011 г.

О языках для web

http://nuclight.livejournal.com/107170.html
К вопросу об ублюдочности PHP

http://stanislaw.ru/rus/research/perl.htm
Критический анализ языка Perl

http://jacobian.org/writing/hate-python/
Five things I hate about Python

В вики
http://ru.wikipedia.org/wiki/Python#.D0.9D.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8

http://juixe.com/techknow/index.php/2007/09/21/java-ruby-and-even-python-sucks/
Java, Ruby, and even Python Sucks
Реально о руби и яве. О питоне - "кто все эти люди?"

>> бы не сказал, что динамическая типизая - недостаток. иногда это даже преимущество. =)
>Я сказал "_тотальная_ динамическая типизация". Плохо именно то, что от нее невозможно отказаться, нет никакой статической проверки, и тривиальные ошибки живут до момента, когда на них натыкается исполнение.
По словам очевидцев хорошее покрытие юнит-тестами спасает.
http://www.linux.org.ru/forum/talks/2446678

Еще про питон. Поскольку он интерпретируемый, это означает низкую скорость работы. Как и пхп. Но если для пхп есть всякие АРС да eaccelerator, то с питоном сильно хуже -- нет НИЧЕГО.
Есть встроенный компилер в байт-код, но это совсем не панацея.

"Глобальная блокировка интерпретатора (GIL)
GIL (Global Interpreter Lock) — проблема, присущая CPython, Stackless и PyPy, но отсутствующая в Jython и IronPython."
IronPython это с# с синтаксисом питона, там нет ни одного модуля питона, тока нетовские
jpython это компилятор питона-в-яву
не проще сразу на c# или яве писать?
А про GIL - для веба это не особо мешает - "клиенту по скрипту".