Как опубликовать консольную утилиту на PyPI за 1 минуту

Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, наткнётесь на единственный найденный мной пост по теме, который мало того что от 2014 года, так ещё и требует от вас создать кучу папок и файлов для совершенно ненужных (вам) вещей.



Как же решить эту задачу без лишней головной боли в 2019 году? Я уже задавался этим вопросом и поэтому, прочитав тонну документации, создал для вас этот туториал. Вот пошаговая инструкция.



1. Создайте аккаунт на PyPI (ссылка для регистрации)



2. Создайте точку входа в приложение (например, файл entry.py со следующим содержимым)



def main():
    print("It's alive!")


3. Установите poetry



curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
source $HOME/.poetry/env


(poetry можно установить и по-другому, например, pip install --user poetry — прим. перев.)



4. Создайте окружение



cd myproject # Перейдите в папку проекта, который будем паковать
poetry init


5. Настройте консольную команду (для этого добавьте следующие строки в появившийся файл pyproject.toml)



[tool.poetry.scripts]
APPLICATION-NAME = 'entry:main'


APPLICATION-NAME надо поменять на имя консольной команды.



6. Опубликуйте утилиту! (используйте имя пользователя и пароль из шага 1)



poetry publish --username PYPI_USERNAME --password PYPI_PASS --build


Готово! Теперь другому человеку для установки достаточно всего двух команд:



$ sudo pip install PROJECT-NAME
$ APPLICATION-NAME


Где PROJECT-NAME — это имя, которое вы дали проекту на шаге 4, а APPLICATION-NAMEэто имя команды из шага 5.






Обновление версии



Всякий раз, когда вы хотите обновить модуль, просто измените номер версии в файле pyproject.toml:



version = "0.1.0"


И повторите шаг 6:



poetry publish --username PYPI_USERNAME --password PYPI_PASS --build





Бонус: настраиваем Travis для авто-публикации



Добавьте следующие строки в файл .travis.yml



language: python
dist: xenial
before_install:
  - curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
  - source $HOME/.poetry/env
install:
  - poetry install
script:
  - poetry build
deploy:
  - provider: script
    skip_cleanup: true
    script: poetry publish --username $PYPI_USER --password $PYPI_PASS
    on:
      branch: master
      python: '3.7'
      tags: true


И установите переменные окружения PYPI_USER и PYPI_PASS на travis-ci.com. После этого можно будет публиковать пакет с помощью команд:



git tag -a v1.2 # Replace version number with yours
git push --tags

Poetry: новый менеджер зависимостей в Python
В последнее время в экосистеме Python часто стали появляться инструменты для управления зависимостями. Оно понятно, стандартный pip уже не отвечает современным требованиям: неудобная работа с зависимостями, много ручной работы при подготовке пакетов, проблемы при установке и обновлении и много чего другого.

С недавних пор я начал использовать новый менеджер под названием Poetry. Именно о нём сегодня пойдёт речь.


Функциональные возможности Poetry:



  • Управление зависимостями через toml файл (прощай, requirements.txt)

  • Автоматическое создание изолированного виртуального окружения Python (теперь не нужно для этого вызывать virtualenv)

  • Удобное создание пакетов (отныне не нужно копипастить создавать setup.py каждый раз)

  • poetry.lock файл для фиксирования версий зависимостей


А особенно радует тандем при работе с pyenv. О pyenv я писал три года назад.




Установка


Исходный код проекта лежит на github. Для установки необходимо выполнить команду:






curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

Если установка прошла успешно, то убедиться в этом можно вызвав:


$ poetry --version
Poetry 0.12.8

Стартуем!


Создаём новый проект my-demo-project:


$ poetry new my-demo-project

Заходим в папку:


$ cd my-demo-project/
~/my-demo-project$ ls
README.rst my_demo_project pyproject.toml tests

Poetry автоматически создал все необходимые файлы для будущего пакета, но наибольший интерес представляет файл с названием pyproject.toml, этот файл можно рассматривать как продвинутую альтернативу старичку requirements.txt. Взглянем на содержимое:


[tool.poetry]
name = "my-demo-project"
version = "0.1.0"
description = ""
authors = ["Your Name you@example.com"]

[tool.poetry.dependencies]
python = "^3.6"

[tool.poetry.dev-dependencies]
pytest = "^3.0"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Формат файла TOML. Раздел tool.poetry предназначен для описания проекта: название, версия, краткая информация о проекте и т.д. Далее следует tool.poetry.dependencies, именно здесь будут указаны все production зависимости. Их можно указать вручную (привет, requirements.txt), но мы так делать не будем (привет, npm!). Раздел tool.poetry.dev-dependencies предназначен для зависимостей во время разработки (привет, pytest, tox!)


Добавляем зависимости


Давайте добавим к проекту зависимость в виде Luigi.


~/my-demo-project$ poetry add luigi==2.8.0

Creating virtualenv my-demo-project-py3.6 in /home/user/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (24.1s)

Package operations: 12 installs, 0 updates, 0 removals

Writing lock file
  - Installing docutils (0.14)
  - Installing lockfile (0.12.2)
  - Installing six (1.11.0)
  - Installing atomicwrites (1.2.1)
  - Installing attrs (18.2.0)
  - Installing more-itertools (4.3.0)
  - Installing pluggy (0.8.0)
  - Installing py (1.7.0)
  - Installing python-daemon (2.1.2)
  - Installing tornado (4.5.3)
  - Installing luigi (2.8.0)
  - Installing pytest (3.10.1)

Обратите внимание, что Poetry автоматически создал виртуальное окружение через virtualenv при добавлении пакета (т.к. ранее оно не было создано). Все окружения находятся по пути ~/.cache/pypoetry/virtualenvs


Если снова открыть pyproject.toml, то можно увидеть новую запись в разделе зависимостей:


[tool.poetry.dependencies]
python = "^3.6"
luigi = "=2.8.0"

Всю "грязную" работу за нас делает Poetry. Чтобы добавить зависимость для разработки достаточно указать флаг —dev:


$ poetry add tox --dev

Using version ^3.5 for tox
Updating dependencies
Resolving dependencies... (6.3s)
Package operations: 4 installs, 0 updates, 0 removals

Writing lock file
  - Installing filelock (3.0.10)
  - Installing toml (0.10.0)
  - Installing virtualenv (16.1.0)
  - Installing tox (3.5.3)

Смотрим содержимое pyproject.toml ещё раз:


[tool.poetry.dev-dependencies]
pytest = "^3.0"
tox = "^3.5"

Чтобы удалить зависимость нужно выполнить:


~/my-demo-project$ poetry remove luigi

Сборка пакета


Отныне забудьте про головную боль с ручным созданием setup.py, прописыванием туда всех зависимостей и запоминанием команд для сборки через pip. Всё стало в разы проще. Чтобы собрать python пакет выполните:


~/my-demo-project$ poetry build

Building my-demo-project (0.1.0)
 - Building sdist
 - Built my-demo-project-0.1.0.tar.gz
 - Building wheel
 - Built my_demo_project-0.1.0-py3-none-any.whl

В папке dist будут сформированы пакеты. Чтобы поделиться своим творением с другими разработчиками, например через pypi, выполните:


~/my-demo-project$ poetry publish

Окружение


Для активации виртуального окружения необходимо выполнить команду:


~/my-demo-project$ poetry shell

Вывод


Проект Poetry появился 28 февраля 2018 года, последняя версия 0.12.8. Инструмент молодой, но перспективный и быстроразвивающийся. Уже сейчас он на голову выше старичка pip и по функциональным возможностям и по удобству использования. Советую вам его попробовать и поделиться мнением в комментариях к этой статье. За более подробной информацией об инструменте советую заглянуть на сайт с документацией.



https://pypi.org/project/poetry/
https://poetry.eustace.io/docs/
Goodbye Virtual Environments?

https://github.com/sivel/speedtest-cli
https://pypi.org/project/speedtest-cli/
https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x и запустить в консоли



Тест скорости сети на busybox






Docker на i386-ом компьютере
https://launchpad.net/ubuntu/+source/docker.io
https://hub.docker.com/r/i386/
https://hub.docker.com/r/i386/centos/

Centos 6

docker search i386/centos
docker pull i386/centos:centos6
docker run --name centos6.9_bash -it i386/centos:centos6 /bin/bash
docker ps -a

docker start centos6.9_bash
docker attach centos6.9_bash

yum install epel-release
yum install python34

docker export centos6.9_bash | docker import - uzverss/centos6.9_i386_cython
docker images
docker save uzverss/centos6.9_i386_cython > centos6.9_i386_cython.tgz
docker rmi uzverss/centos6.9_i386_cython
docker load -i centos6.9_i386_cython.tgz
docker inspect uzverss/centos6.9_i386_cython
docker login
docker push uzverss/centos6.9_i386_cython:latest
docker logout
docker search uzverss
docker rmi uzverss/centos6.9_i386_cython
docker pull uzverss/centos6.9_i386_cython:latest
docker rm centos6.9_bash
docker run --name centos6.9_bash -it uzverss/centos6.9_i386_cython /bin/bash

Centos 7

docker pull i386/centos:latest
docker run --name centos7_bash -it i386/centos:latest /bin/bash



если есть необходимость, то ещё установить python-tools
http://ithelp21.ru/ustanovka-python-3-6-na-centos/

cd /usr/src
curl -O https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
tar xf Python-3.6.5.tar.xz
cd Python-3.6.5

./configure
make
make install

Сборка с оптимизацией



http://rpm.pbone.net/

вместо make install checkinstall



cd
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

pip install -U pip
pip install -U pyrasite
pip install -U virtualenv
pip install -U xonsh
pip install -U cython



exec "$SHELL"
pyenv update
pyenv versions
pyenv install 3.6.5


напоминалка по командам centos
https://habr.com/post/301292/

отображение команд и опций
# yum help

список названий пакетов из репозиторий
# yum list

список всех доступных пакетов
# yum list available

список всех установленных пакетов
# yum list installed

установлен ли указанный пакет
# yum list installed httpd

список установленных и доступных пакетов
# yum list all

список пакетов, относящихся к ядру
# yum list kernel

отображение информации о пакете
# yum info httpd

список зависимостей и необходимых пакетов
# yum deplist httpd

найти пакет, который содержит файл
# yum provides "*bin/top"

поиск пакета по имени и описанию
# yum search httpd

# yum search yum

получить информацию о доступных обновлениях безопасности
# yum updateinfo list security

вывести список групп
# yum grouplist

вывести описание и содержимое группы
# yum groupinfo "Basic Web Server"

установка группы пакетов «Basic Web Server»
# yum groupinstall "Basic Web Server"

удаление группы
# yum groupremove "Basic Web Server"

Проверка на доступные обновления
# yum check-update

список подключенных репозиториев
# yum repolist

информация об определенном репозитории
# yum repoinfo epel

информация о пакетах в указанном репозитории
# yum repo-pkgs epel list

установить все пакеты из репозитория
# yum repo-pkgs reponame install

удалить пакеты установленные из репозитория
# yum repo-pkgs reponame remove

создать кэш
# yum makecache

проверить локальную базу rpm (поддерживаются параметры dependencies, duplicates, obsoletes, provides)
# yum check

# yum check dependencies

просмотр yum истории (вывод списка транзакций)
# yum history list

просмотр информации определенной транзакции (установленные пакеты, установленные зависимости)
# yum history info 9

отмена транзакции
# yum history undo 9

повторить
# yum history redo 9

дополнительно можно просмотреть лог
# cat /var/log/yum.log

удалить пакеты сохраненные в кэше
# yum clean packages

удалить все пакеты и метаданные
# yum clean all

установить пакет
# yum install httpd

удаление пакета
# yum remove httpd

обновить пакет
# yum update httpd

обновить все пакеты
# yum update

обновить до определенной версии
# yum update-to

установить из локальной директории (поиск/установка зависимостей будут произведены из подключенных репозиториев)
# yum localinstall httpd.rpm

или
# yum install httpd.rpm

установить с http
# yum localinstall http://server/repo/httpd.rpm

откатиться к предыдущей версии пакета
# yum downgrade

переустановка пакета (восстановление удаленных файлов)
# yum reinstall httpd

удаление ненужных более пакетов
# yum autoremove

создание локальных репозиториев (createrepo ставится отдельно)
# createrepo

установка обновлений по расписанию (yum-cron устанавливается отдельно)
# yum-cron



Опции Yum

ответить «yes» при запросе,
-y

# yum update -y

ответить «no» при запросе
--assumeno

использовать Yum без плагинов
--noplugins

или отключить определенный плагин
--disableplugin=fastestmirror

включить плагины, которые установлены, но отключены
# yum --enableplugin=ps

включить отключенный репозиторий
# yum update -y --enablerepo=epel

отключить репозиторий
# yum update -y --disablerepo=epel

скачать пакеты, но не устанавливать
(на Centos 7 x86_64 будут скачаны в '/var/cache/yum/x86_64/7/base/packages/')
# yum install httpd --downloadonly


Cледующие команды доступны после установки пакета yum-utils

найти из какого репозитория установлен пакет
# find-repos-of-install httpd

найти процессы, пакеты которых обновлены и требуют рестарта
# needs-restarting

запрос к репозиторию, узнать зависимости пакета, не устанавливая его
# repoquery --requires --resolve httpd

синхронизировать yum репозиторий updates в локальную директорию repo1
# reposync -p repo1 --repoid=updates

проверить локальный репозиторий на целостность
# verifytree URL

завершить транзакции
# yum-complete-transaction

установить необходимые зависимости для сборки RPM пакета
# yum-builddep

управление конфигурационными опциями и репозиториями yum
# yum-config-manager

запрос к локальной базе yum, отображение информации о пакете
(использованная команда, контрольная сумма, URL с которого был установлен и другое)
# yumdb info httpd

скачать rpm пакеты из репозитория
# yumdownloader

скачать src.rpm пакет из репозитория
(должен быть подключен соответствующий репозиторий, например в '/etc/yum.repos.d/CentOS-Sources.repo' в CentOS)
yumdownloader --source php


Конфигурационные файлы Yum и их расположение

Основной конфигурационный файл
/etc/yum.conf

директория, с конфигурациями (например, yum плагины)
/etc/yum/

директория, содержащая информацию о репозиториях
/etc/yum.repos.d/


Некоторые опции yum.conf:

Директория, где yum хранит кэш и файлы базы (по умолчанию '/var/cache/yum')
cachedir=/var/cache/yum/$basearch/$releasever

Определяет должен или нет Yum хранить кэш заголовков и пакетов после успешной установки. Значения: 0 или 1. (по умолчанию 1)
keepcache=1

уровень вывода отладочных сообщений. Значения: 1-10 (по умолчанию 2)
debuglevel=2

лог файл (по умолчанию '/var/log/yum.log')
logfile=/var/log/yum.log

обновлять устаревшие пакеты
obsoletes=1

проверка подписи пакетов. Значения: 0 или 1 (по умолчанию 1)
gpgcheck=1

включение плагинов. Значения: 0 или 1 (по умолчанию 1)
plugins=1



Некоторые полезные плагины

Добавляет опцию командной строки для просмотра ченжлога перед/после обновлениями
yum-plugin-changelog

выбирает более быстрые репозитории из списка зеркал
yum-plugin-fastestmirror

добавляет команды keys, keys-info, keys-data, keys-remove, которые позволяют работать с ключами.
yum-plugin-keys

блокировать указанные пакеты от обновления, команда yum versionlock
yum-plugin-versionlock

добавление команд yum verify-all, verify-multilib, verify-rpm для проверки контрольных сумм пакетов
yum-plugin-verify


Работа Yum через прокси сервер

Для всех пользователей:
добавить в секцию [main] в /etc/yum.conf
proxy="http://server:3128"

при необходимости указать пароль, добавить
proxy_proxy_username=user
proxy_password=pass

указать прокси для отдельного пользователя
# export http_proxy="http://server:3128"


Alpine Linux
https://alpinelinux.org/downloads/
https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
https://pkgs.alpinelinux.org/packages
https://wiki.alpinelinux.org/wiki/XFCE_Setup

docker search i386/alpine
docker pull i386/alpine
docker run --name alpine_sh -it i386/alpine /bin/sh

apk update
apk info
apk search
apk add python3
apk add cython

cd
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

pip install -U pip
pip install -U pyrasite
pip install -U virtualenv
pip install -U xonsh

docker export alpine_sh | docker import - uzverss/alpine_i386_cython
docker push uzverss/alpine_i386_cython

чтобы подключаться по ssh под рутом
vi /etc/ssh/sshd_config
PermitRootLogin yes
затем /etc/init.d/sshd restart


uzverss docker команды
установка Django в virtualenv с помощью pip через proxy с pyenv


Vim — уникальный по своей гибкости редактор, который при должной настройке может едва ли не идеально удовлетворять все пожелания работающего с ним. Правда эта настройка может продолжаться месяцы, а то и годы, что является и достоинством, и недостатком vim’а. Существует множество статей и туториалов по использованию Vim для разработки на Python и Django, надеюсь мне удастся рассказать что-то новое. В своей статье я постараюсь по минимуму упоминать плагины общего назначения, вроде NERDTree или surround.vim и опишу несколько более специализированных расширений и настроек, которые существенно упростили процесс работы на Python.



Настроить Vim под Django оказалось делом довольно непростым, в отличие от использования с тем же Rails, для которого rails.vim решает 80% всех проблем. Но к сожалению Tim Pope ничего подобного для питона не написал, поэтому пришлось собирать все по частям. Вкратце, о чем пойдет речь:


  • python-mode

  • tagbar

  • pydiction

  • neocomplcache

Все ниженаписанное было опробовано в gVim для Linux.



Python-mode


Просто низкий поклон Кириллу Клёнову, разработчику данного расширения. Отлично устанавливается и с помощью vundle, и через pathogen и так же отлично работает.



Python-mode устанавливает свои настройки для питон-файлов. Если вас это не устраивает (мне например не нужен set number, который он добавляет), допишите необходимые настройки в .vimrc. Вот пример моих настроек:



let g:pymode_options = 0
let g:pymode_lint_write = 0 “не проверять при каждом сохранении
let g:pymode_folding = 0 “мне не нужен авто-фолдинг
let g:pymode_rope_vim_completion = 0 “не использовать автодополнение rope


Как можно увидеть, я не использую автоматический фолдинг кода, также мне не нужна проверка pylint'ом при каждом сохранении файла(let g:pymode_lint_write = 0), вместо чего можно использовать команду :PyLint, повесив на нее какой-нибудь хоткей. К автодополнению вернемся позже.



Плагин предоставляет несколько удобных хоткеев для перемещения по объектам в питон-коде:

Сочетание клавиш Команда
K Показать документацию
<C-c>g Перейти к определению
\r Запустить код
[[ Перейти к предыдущему классу или функции
]] Перейти к следующему классу или функции
aC C Выполнить действие для класса. (vaC, daC, dC, yaC, yC, caC, cC)
iC То же, находясь внутри класса. (viC, diC, yiC, ciC)
aM M Выполнить действие для функции. (vaM, daM, dM, yaM, yM, caM, cM)
iM То же, находясь внутри функции. (viM, diM, yiM, ciM)
Отдельно хотелось бы отметить возможность использовать Rope, в частности команды :RopeGoToDefinition, :RopeFindOccurrences и другие возможности по поиску кода и рефакторингу. просмотреть полный список команд Rope и сокращения к ним можно с помощью :help RopeKeys. Кроме того по умолчанию включена поддержка virtualenv, что значит, что с помощью того же :RopeGoToDefinition вы можете спокойно перейти к определнию функции любой библиотеки, установленной в site-packages вашего virtualenv’а.



Просмотр кода


Хотя самым популярным плагином для этого является Taglist, мне больше нравится Tagbar, также основанный на ctags(которые нужно установить перед использованием плагина). Вешаем :TagbarToggle на какой-нибудь хоткей, например:
nnoremap <F8> :TagbarToggle<CR>
Выглядит это примерно так:







Пара дополнительных настроек:



let g:tagbar_autofocus = 1
let g:tagbar_sort = 0 "tagbar shows tags in order of they created in file
let g:tagbar_foldlevel = 0 "close tagbar folds by default


Кроме того можно настроить, с какой стороны будет появляться окно тагбара, какими будут отступы, иконки и т.д. Обо всем этом можно узнать через :help tagbar.



Автодополнение


Один из плагинов, который я мог бы посоветовать — Pydiction, дополняющий ключевые слова на основе большого файла словаря. У данного плагина очень много плюсов:


  • автодополнение происходит по клавише Tab, не нужно запоминать всякие комбинации с Ctrl

  • абсолютно никаких конфликтов, можно одновременно использовать Pydiction с omnicomplete

  • автодополнение не затрагивает другие типы файлов

  • умеет дополнять импортированные объекты

  • довольно легко можно добавить в словарь собственные модули: python pydiction.py module_name

Минус по большому счету только один, но очень существенный на мой взгляд — Pydiction не подхватывает ключевые слова из текущего файла, а это часто бывает гораздо нужнее, чем функции Питона, которые и так знаешь.



Другой способ — использовать neocomplcache. Кроме установки плагина, нужно задать omnifunc для питоновских файлов:

autocmd FileType python setlocal omnifunc=pythoncomplete#Complete


Neocomplcache несколько хуже справляется с дополнением из модулей, зато дополняет не только ключевые слова из текущих файлов, но и просто строки. Кроме того присутствует опция автоматически всплывающего дополнения, которое включается с помощью задания настройки:

let g:neocomplcache_enable_at_startup = 1


Шаблоны Django


Vim подерживает синтаксис джанго-шаблонов и подсвечивает их, если задать файлу тип htmldjango. К сожалению автоматически при открытии Vim определяет этот тип только если в начале файла находится джанго-тэг. Решить это можно например с помощью такой функции:



fun! DetectTemplate()
  let n = 1
  while n < line("$")
    if getline(n) =~ '{%' || getline(n) =~ '{{'
      set ft=htmldjango
      return
    endif
    let n = n + 1
  endwhile
  set ft=html "default html
endfun


которую нужно запускать при открытии файла с раширением .html:

autocmd BufNewFile,BufRead *.html call DetectTemplate()


Если вы используете несколько шаблонизаторов, функцию несложно модифицировать под них, правда следует сделать условия определения типа шаблонизатора более строгими.



Случайные настройки




  • Питоновские отступы:
    autocmd FileType python setlocal ts=4 sts=4 sw=4
    



  • Если вы пользуетесь NERDTree, стоит добавить .pyc в список игнорируемых файлов:
    let NERDTreeIgnore=['\.pyc$']
    



  • простое сокращение для вставки дебаггера ipdb в код
    iab ipdb import ipdb; ipdb.set_trace()
    



  • сокращение для задания кодировки в начале файла:
    iab utf! # -*- coding: utf-8 -*-
    



  • убрать раздражающие всплывающие окна с документацией для omnicompletion:
    set completeopt-=preview
    



  • пара цветовых схем:darkspectrum, gruvbox, Lucius



Дополнительные ссылки


1. python-mode

github.com/klen/python-mode

2. Tagbar

github.com/majutsushi/tagbar

3. Pydiction

github.com/rkulla/pydiction

4. Neocomplcache

github.com/Shougo/neocomplcache

https://habrahabr.ru/post/173473/


image

Данная статья будет посвящена настройке vim, в которой я поделюсь своим «скромным» пониманием того, каким должен быть текстовый редактор, чтобы в нем было удобно/приятно/легко (нужное подчеркнуть) писать код также, как это сейчас возможно во всевозможных IDE типа PyCharm, SublimeText и т.п.

Весь процесс постараюсь описать как можно более подробно, чтобы вопросов по мере чтения для начинающих осваивать vim возникало как можно меньше.



Предыстория
Сам я знаком с vim не очень продолжительное время, однако, к его изучению и желанию использовать привело:


  • достаточное количество на хабре статей по vim

  • большое количество существующих плагинов

  • преимущественно, разработчики на Python занимаются написанием кода под Linux (хотя vim — кроссплатформенный)

  • собственное любопытство



В настоящее время я использую весьма часто vim как основной инструмент для разработки на Python и нисколько об этом не жалею. Если чего-либо нехватает, то проблема решается гуглением в течении пару минут. Поверьте, vim действительно стоит тех затраченных сил на его изучения. Это достаточно быстро себя «окупает». Было бы только желание и немножечко терпения.



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


  1. Vim версии 7.4 (получить нужное можно либо скачиванием из репозиториев, либо сборкой вручную)

  2. Python 2.7 (с установленным pip)

  3. Клиент для работы с git



После того, как вышеперечисленное у нас имеется, можно приступать непосредственно к настройке и «кастомизации».



Настройка


Самое первой проблемой для любого новичка, который решает обуздать vim, является vimscript. Vimscript — это скриптовый язык, предназначенный для vim. На нем мы будем описывать используемые плагины, горячие клавиши и все тому подобное, чтобы обеспечить себе простую и легкую работу в vim. Для ознакомления советую посетить вот этот и этот сайты. Там достаточно неплохо все описано, что, где, как, и почему.



Первым делом стоит рассказать о том, что конфигурационный файл vim находится в домашнем каталоге пользователя (~/) и называется .vimrc. В нем-то и будут расписываться моменты относительно того, какие шрифты, цветовая схема, хоткеи и т.п. будут использоваться.



Во-вторых, при настойке текстового редактора, иногда будет необходимо заходить в каталог .vim (это скрытый каталог, и он расположен также в домашнем каталоге юзера), в который будут помещен ряд необходимых файлов, рассортированных по каталогам.

Какие включает в себя подкаталоги исходный каталог .vim? Примерно такие:

.vim

|____after

|____autoload

|____colors

|____doc

|____ftplugin

|____indent

|____plugin

|____scripts

|____syntax



Однако, из всех вышеперечисленных каталогов нам понадобится лишь несколько:


  • colors — для цветовых схем/тем

  • indent — сюда будет скидывать файлы для работы с тегами HTML/XML и т.п.

  • scripts — для скриптов

  • syntax — файлы синтаксиса



В эти каталоги помещаем соответствующие файлы, взяв их, например, у меня.



До начала установки и работа с менеджером пакетов пропишем в консоли:

pip install pyflakes pep8 pylint ipython


В дальнейшем, эти библиотеки нам пригодятся для того, чтобы отслеживать качество своего кода: ошибки, соответствие его PEP8 и т.п. Последняя же в этом списке библиотека/пакет — ipython нам будет удобна для настройки своего «дебаггера».

Также нам еще необходимо установить Exuberant ctags. Скачать его можно отсюда либо поискать и установить через менеджер пакетов apt-get/aptitude/rmp/pacman/и т.п.



Менеджер плагинов


Для того, чтобы нам было проще с установкой и использованием плагином будем использовать Vundle. Vundle — это пакетный менеджер для Vim, способный:


  • настраивать и устанавливать плагины, указанные в. vimrc

  • обновлять плагины при необходимости

  • удалять неиспользуемые плагины



Однако прежде чем приступать к описанию необходимого набора плагинов в конфигурационном файле, сначала необходимо установить сам Vundle. Для этого делаем следующее:



git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim


После выполнение этой команды Vundle будет установлен в ~/.vim/bundle/Vundle.vim



Теперь добавим следующую часть в свой новосозданный .vimrc если его еще нет:



set nocompatible              " be iMproved, required
filetype off                  " required

"=====================================================
" Vundle settings
"=====================================================
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'gmarik/Vundle.vim'		" let Vundle manage Vundle, required

"---------=== Code/project navigation ===-------------
Plugin 'scrooloose/nerdtree' 	    	" Project and file navigation
Plugin 'majutsushi/tagbar'          	" Class/module browser

"------------------=== Other ===----------------------
Plugin 'bling/vim-airline'   	    	" Lean & mean status/tabline for vim
Plugin 'fisadev/FixedTaskList.vim'  	" Pending tasks list
Plugin 'rosenfeld/conque-term'      	" Consoles as buffers
Plugin 'tpope/vim-surround'	   	" Parentheses, brackets, quotes, XML tags, and more

"--------------=== Snippets support ===---------------
Plugin 'garbas/vim-snipmate'		" Snippets manager
Plugin 'MarcWeber/vim-addon-mw-utils'	" dependencies #1
Plugin 'tomtom/tlib_vim'		" dependencies #2
Plugin 'honza/vim-snippets'		" snippets repo

"---------------=== Languages support ===-------------
" --- Python ---
Plugin 'klen/python-mode'	        " Python mode (docs, refactor, lints, highlighting, run and ipdb and more)
Plugin 'davidhalter/jedi-vim' 		" Jedi-vim autocomplete plugin
Plugin 'mitsuhiko/vim-jinja'		" Jinja support for vim
Plugin 'mitsuhiko/vim-python-combined'  " Combined Python 2/3 for Vim

call vundle#end()            		" required
filetype on
filetype plugin on
filetype plugin indent on


Как вы видите, места где указаны Plugin 'ссылка_до_плагина' представляет собой ссылки в интернете эти плагины, которые Vundle будет скачивать и в последствии устанавливать. Для себя, я разбивал эти плагины на «категории», но это уже дело вкуса. Сами плагины:


  • NERDTree — навигация по файловой/директориям

  • TagBar — навигация по классам/функциям/переменным

  • vim-airline — строка статуса/состояния

  • FixedTaskList — поиск в файле FIXME, TODO и т.п.

  • conque-term — используем для вызова дебаггера

  • vim-surround — автозакрытие тегов HML/XML/и т.п.

  • vim-snipmate — сниппеты

  • python-mode — рефакторинг, документация, дебаггер Python и т.п.

  • jedi-vim — автодополнение для Python

  • vim-jinja — поддержка синтаксиса шаблонов Jinja



В качестве руководства/гайда по использованию Vundle можно зайти сюда. Однако для наших целей будет предостаточно одной:

:PluginInstall


Эта команда сканирует файл .vimrc на наличие списка плагинов прописанных в виде Plugin 'ссылка_до_плагина'.

Для того, чтобы запустить установку набора плагинов, заходим в vim/gvim и прописываем :PluginInstall. Придется немного подождать, поскольку каждый плагин, указанный выше в конфиге, будет скачан с githuba либо еще откуда-то и настроен до установок «по умолчанию», подождите пару минут. Каждый выкачанный и настроенный плагин отмечается как "+". Как только увидите, что все из списка подсвечены "+" — значит, все готово. И для дальнейшего использования необходимо будет перезапустить vim. Однако на этом все еще не оканчивается статья — все необходимо «подкрутить», чтобы работать в vim'е было комфортно.



Общие настройки vim'а
Эти настройки для меня являются базовыми. Тут я указываю свои предпочтения относительно парочки плагинов, размера шрифтов, цветовой схемы, отображаемых элементов и т.п.

Добавьте эти строчки в конец своего .vimrc файла:

"=====================================================
" General settings
"=====================================================
set backspace=indent,eol,start
aunmenu Help.
aunmenu Window.
let no_buffers_menu=1
set mousemodel=popup

set ruler
set completeopt-=preview
set gcr=a:blinkon0
if has("gui_running")
  set cursorline
endif
set ttyfast

" включить подсветку кода
syntax on
if has("gui_running")
" GUI? устаналиваем тему и размер окна
  set lines=50 columns=125
  colorscheme molokai
" раскомментируйте эти строки, если хотите, чтобы NERDTree/TagBar автоматически отображались при запуске vim
" autocmd vimenter * TagbarToggle
" autocmd vimenter * NERDTree
" autocmd vimenter * if !argc() | NERDTree | endif

" на маке vim?
if has("mac")
  set guifont=Consolas:h13
  set fuoptions=maxvert,maxhorz
else
" дефолтный GUI
  set guifont=Ubuntu\ Mono\ derivative\ Powerline\ 10
endif
else
" терминал?
  colorscheme myterm
endif

tab sball
set switchbuf=useopen

" отключаем пищалку и мигание
set visualbell t_vb= 
set novisualbell       

set enc=utf-8	     " utf-8 по дефолту в файлах
set ls=2             " всегда показываем статусбар
set incsearch	     " инкреминтируемый поиск
set hlsearch	     " подсветка результатов поиска
set nu	             " показывать номера строк
set scrolloff=5	     " 5 строк при скролле за раз

" отключаем бэкапы и своп-файлы
set nobackup 	     " no backup files
set nowritebackup    " only in case you don't want a backup file while editing
set noswapfile 	     " no swap files

" прячем панельки
"set guioptions-=m   " меню
set guioptions-=T    " тулбар
"set guioptions-=r   "  скроллбары

" настройка на Tab
set smarttab
set tabstop=8

"  при переходе за границу в 80 символов в Ruby/Python/js/C/C++ подсвечиваем на темном фоне текст
augroup vimrc_autocmds
    autocmd!
    autocmd FileType ruby,python,javascript,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
    autocmd FileType ruby,python,javascript,c,cpp match Excess /\%80v.*/
    autocmd FileType ruby,python,javascript,c,cpp set nowrap
augroup END

" указываем каталог с настройками SnipMate
let g:snippets_dir = "~/.vim/vim-snippets/snippets"

" настройки Vim-Airline
set laststatus=2
let g:airline_theme='badwolf'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'

" TagBar настройки
map <F4> :TagbarToggle<CR>
let g:tagbar_autofocus = 0 " автофокус на Tagbar при открытии

" NerdTree настройки
" показать NERDTree на F3
map <F3> :NERDTreeToggle<CR>
"игноррируемые файлы с расширениями
let NERDTreeIgnore=['\~$', '\.pyc$', '\.pyo$', '\.class$', 'pip-log\.txt$', '\.o$']  

" TaskList настройки
map <F2> :TaskList<CR> 	   " отобразить список тасков на F2

" Работа буфферами
map <C-q> :bd<CR> 	   " CTRL+Q - закрыть текущий буффер


Python-mode
Очень нравится этот плагинчик, который кстати, сделан klen. Предоставляет море возможностей при работе с кодом:


  • рефакторинг

  • автодополнение

  • работа с дебаггером

  • автофикс PEP8 ошибок

  • и многое-многое другое...



Добавьте эти строчки в конец своего .vimrc файла:

"=====================================================
" Python-mode settings
"=====================================================
" отключаем автокомплит по коду (у нас вместо него используется jedi-vim)
let g:pymode_rope = 0
let g:pymode_rope_completion = 0
let g:pymode_rope_complete_on_dot = 0

" документация
let g:pymode_doc = 0
let g:pymode_doc_key = 'K'
" проверка кода
let g:pymode_lint = 1
let g:pymode_lint_checker = "pyflakes,pep8"
let g:pymode_lint_ignore="E501,W601,C0110"
" провека кода после сохранения
let g:pymode_lint_write = 1

" поддержка virtualenv
let g:pymode_virtualenv = 1

" установка breakpoints
let g:pymode_breakpoint = 1
let g:pymode_breakpoint_key = '<leader>b'

" подстветка синтаксиса
let g:pymode_syntax = 1
let g:pymode_syntax_all = 1
let g:pymode_syntax_indent_errors = g:pymode_syntax_all
let g:pymode_syntax_space_errors = g:pymode_syntax_all

" отключить autofold по коду
let g:pymode_folding = 0

" возможность запускать код
let g:pymode_run = 0


Jedi-vim
Очень полезный плагин, предоставляющий отличные возможности автокомплита, go to definition, и т.п.

В своем конфиге добавьте в конец этот фрагмент:

" Disable choose first function/method at autocomplete
let g:jedi#popup_select_first = 0


Этой строчкой я отрубаю в автокомплите выбор первой строки из списка выбора метода/библиотеки/класса автокомплита. Это связано с тем, что достаточно часто я выбираю не первую строку из нее, а автоматический выбор раздражает.



После настройки jedi-vim получаем отображение документации по функции

image

и добротный автокомплит по аргументам функций

image



Хоткеи
Тут сложно что-либо посоветовать. У всех различное понимание того, какие хоткеи нужны, а какие-нет. Могу лишь сказать, что для желающих, найти/написать необходимые кусочки vimscript, переопределяющих поведение стандартных горячих клавиш — очень много.

Добавьте этот фрагмент в конец конфига:

"=====================================================
" User hotkeys
"=====================================================
" ConqueTerm
" запуск интерпретатора на F5
nnoremap <F5> :ConqueTermSplit ipython<CR>
" а debug-mode на <F6>
nnoremap <F6> :exe "ConqueTermSplit ipython " . expand("%")<CR>
let g:ConqueTerm_StartMessages = 0
let g:ConqueTerm_CloseOnEnd = 0
" проверка кода в соответствии с PEP8 через <leader>8
autocmd FileType python map <buffer> <leader>8 :PymodeLint<CR>

" автокомплит через <Ctrl+Space>
inoremap <C-space> <C-x><C-o>

" переключение между синтаксисами
nnoremap <leader>Th :set ft=htmljinja<CR>
nnoremap <leader>Tp :set ft=python<CR>
nnoremap <leader>Tj :set ft=javascript<CR>
nnoremap <leader>Tc :set ft=css<CR>
nnoremap <leader>Td :set ft=django<CR>


Отступы, табы, пробелы для разных языков
Это связано с тем, что в том же Python табы не рекомендуется к использованию. Поэтому будем заменять их на пробелы. Один таб = 4 пробелам. Плюс ко всему необходимо помнить, что всегда нужно сделать переход на следующую строку + отступ, чтобы было соответствие операторам for/if/while/и т.п.

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

Добавьте этот фрагмент в конец своего конфига:

"=====================================================
" Languages support
"=====================================================
" --- Python ---
"autocmd FileType python set completeopt-=preview " раскомментируйте, в случае, если не надо, чтобы jedi-vim показывал документацию по методу/классу
autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8
\ formatoptions+=croq softtabstop=4 smartindent
\ cinwords=if,elif,else,for,while,try,except,finally,def,class,with
autocmd FileType pyrex setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4 smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class,with

" --- JavaScript ---
let javascript_enable_domhtmlcss=1
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd BufNewFile,BufRead *.json setlocal ft=javascript

" --- HTML ---
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

" --- template language support (SGML / XML too) ---
autocmd FileType html,xhtml,xml,htmldjango,htmljinja,eruby,mako setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2
autocmd bufnewfile,bufread *.rhtml setlocal ft=eruby
autocmd BufNewFile,BufRead *.mako setlocal ft=mako
autocmd BufNewFile,BufRead *.tmpl setlocal ft=htmljinja
autocmd BufNewFile,BufRead *.py_tmpl setlocal ft=python
let html_no_rendering=1
let g:closetag_default_xml=1
let g:sparkupNextMapping='<c-l>'
autocmd FileType html,htmldjango,htmljinja,eruby,mako let b:closetag_html_style=1
autocmd FileType html,xhtml,xml,htmldjango,htmljinja,eruby,mako source ~/.vim/scripts/closetag.vim

" --- CSS ---
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType css setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4


Подведение итогов
После прохождения столь длительного процесса настройки у нас получился достаточно гибкий инструмент для работы с Python. При этом, последующая установка, на другие ПК будет представлять только доустановку необходимых библиотек, переноса соответствующего конфига и установку плагинов.



После настройки мы получим примерно такой vim:

image

В режиме работы с HTML/JavaScript/XML будет все выглядеть примерно так:

image



Если кому-либо нужен больший функционал (например поддержка автокомплита для любых иных языков), то могу посоветовать лишь поискать необходимые плагины на GitHub'е или на офицальном сайте сайте vim'a.



Полезные ссылки:
Раздел script сайта vim.org — тут

wikia по vim'у — тут

OpenVim: уроки по азам в vim — тут

Шрифты для vim-airline — тут



Мой конфиг для vim на GitHub

https://habrahabr.ru/post/224979/
http://freecoder.ru/content/vim-kak-ide-dlya-razrabotki-na-python
http://linux.cpms.ru/?p=8339




развернуть

1. Python


открыть в браузере адреса
http://0.0.0.0:8080/ или http://localhost:8080/ или http://127.0.0.1:8080/
без указания порта запустит сервер на порту 8000

python -m SimpleHTTPServer
python3 -m http.server

Если есть файл index.html в папке, из которой дан старт команде, то он будет открыт в браузере по умолчанию

запустить HTTP для всех локальных интерфейсов на порту 8080

python -m SimpleHTTPServer 8080 # python2
python3 -m http.server 8080

запустить в папке, где находится каталог cgi-bin, со сценарием cgi

python3 -m http.server 8080 --cgi

запускает сервер SMTP на порту 1025
python -m smtpd -n -c DebuggingServer localhost:1025

запустить сервер SMTP на стандартном порту 25
sudo python -m smtpd -n -c DebuggingServer localhost:25

Привязка любого номера порта ниже 1024 требует привилегии root, в таком случае используйте sudo перед командой

Twisted (Python)
$ twistd -n web -p 8000 --path .
или
$ python -c 'from twisted.web.server import Site; from twisted.web.static import File; from twisted.internet import reactor; reactor.listenTCP(8000, Site(File("."))); reactor.run()'

2. busybox httpd web server


busybox httpd --help # show available options

busybox httpd -p 127.0.0.1:8080 -h /var/www/ # start httpd
# busybox httpd -f -v -p 8080 # вариант

pkill busybox # to stop busybox httpd

по умолчанию BusyBox httpd связывает порт 80 со всеми доступными сетевыми интерфейсами и читает /etc/httpd.conf конфигурационный файл.

3. webfsd HTTP server


конфигурации webfsd хранятся в файле /etc/webfsd.conf

sudo apt-get install webfs # install webfs in Debian/Ubuntu

sudo service webfs start # start the webfs server

$ webfsd -F -p 8000

По умолчанию webfsd связывает порт 8000 со всеми доступными сетевыми интерфейсами с /var/www/html как корневую папку документов в Debian.

4. netcat as a simple web server


Netcat используется в основном для обслуживания только текстовых файлов через HTTP, полезных в целях мониторинга
Сохраните скрипт с любым именем если вы хотите использовать в сценарии, изменить его в соответствии с вашими потребностями, сделайте его исполняемым с chmod +x и запустите его



напишите в cat /var/www/index.html с тем, что вы хотите сделать, как /sbin/ifconfig eth0
чтобы остановить скрипт нажмите CTRL+C

5. php inbuilt web server



php -S 127.0.0.1:8080

php -S 127.0.0.1:8080 -t $HOME/dev/www

Если есть index.html или index.php файл, то он будет выполнен с помощью этого простого сервера PHP, теперь проверить его можно в вашем веб-браузере.

########################################################################

JS + Node


http://www.nodebeginner.ru/
https://metanit.com/web/nodejs/3.1.php

Создайте файл server.js в корневой директории вашего проекта и поместите туда следующий код:



выполните ваш скрипт в Node.js:
node server.js

http-server (Node.js)
$ npm install -g http-server # install dependency
$ http-server -p 8000

Примечание: Этот сервер делает странные вещи с относительными путями. Например, если у вас есть файл /tests/index.html, он загрузит index.html, если вы перейдете в /test, но будет обрабатывать относительные пути так, как будто они исходят из /.

node-static (Node.js)
$ npm install -g node-static # install dependency
$ static -p 8000

Go


https://metanit.com/go/web/1.1.php
Базовый веб сервер на Go
Простейший веб-сайт на Go

Создайте файл server.go в корневой директории вашего проекта и поместите туда следующий код:



выполните ваш скрипт
go run server.go

https://funprojects.blog/2021/04/11/a-web-server-in-1-line-of-bash/

Bash




Веб-сервер Bash, вызывающий команды Bash



Пример использования заголовков figlet, а также датчиков и утилиты vmstat:




https://gist.github.com/willurd/5720255

Ruby


$ ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'

Ruby 1.9.2+
$ ruby -run -ehttpd . -p8000

adsf (Ruby)
$ gem install adsf # install dependency
$ adsf -p 8000

Sinatra (Ruby)
$ gem install sinatra # install dependency
$ ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'

Perl


$ cpan HTTP::Server::Brick # install dependency
$ perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'

Plack (Perl)
$ cpan Plack # install dependency
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000

Mojolicious (Perl)
$ cpan Mojolicious::Lite # install dependency
$ perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://*:8000

Erlang


$ erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},{"jpeg","image/jpeg"},{"png","image/png"}]}]).'

Java


jwebserver -p 8080


IIS Express
C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000


https://fixmynix.com/create-instant-lightweight-web-server-command-line/
http://uzverss.livejournal.com/33187.html#www
Как сделать простой веб-сайт за один час
Расшариваем веб-сайт на localhost в глобальную сеть интернет.


В данной статье рассматривается бесплатный хостинг для django проектов - pythonanywhere.com.
Для начала заходим на сайт - https://www.pythonanywhere.com/pricing/
Находим и кликаем по ссылке Create a Beginner account
Открывается форма регистрации. В ней вводим данные для регистрации (имя, почта, пароль). После регистрации нас просят подтвердить почту, что и необходимо сделать.Read more... )
http://pygo.ru/django/base/django-hosting-pythonanywhere.html
Деплоим на PythonAnywhere из GitHub
http://uzverss.livejournal.com/58379.html



Ставим пакеты stdeb и python-all:
$ sudo apt-get install stdeb python-all
Теперь находим архив с нужным нам модулем на pypi.python.org и скачиваем его себе:
$ wget https://pypi.python.org/packages/source/g/grab/grab-0.6.30.tar.gz
Теперь можно заглянуть в документацию на stdeb и посмотреть, как это делается.
Read more... )
http://vladimir-stupin.blogspot.ru/2013/10/deb-python.html
https://pypi.python.org/pypi/stdeb
https://blog.truecrux.org/post/xxxiii




развернуть

Сайты



https://www.djangoproject.com/
http://djbook.ru/
http://djangosearch.com/
https://www.djangosites.org/
https://www.django-cms.org/


Блоги



https://vk.com/django_framework
http://django-tutorial.blogspot.ru/
https://pythlife.blogspot.ru/search/label/django
http://sharelink.ru/
http://dikiigrigorii.ru/


Статьи



Наш опыт работы с Django, или 10 полезных модулей, облегчающих жизнь
Эффективный Django. Часть 1
Ещё 10 батареек для джанго
Django DB Mailer — простая и удобная батарейка, для отправки почтовых сообщений в вашем проекте
Улучшаем админку
DjangoCMS2.0 — быстрее, больше, эффективней
Python Django CMS - FeinCMS
------------------------------------------------------------------------
Удобная работа с картинками в Django
Шаблон проекта на Джанго с инструментами сборки и утилитами
Простой блог с комментариями на Django: разработка и развертывание для самых маленьких
Django: первые страницы
Установка Django CMS в Ubuntu 16.04 64bit
Архитектура универсального проекта Django
------------------------------------------------------------------------
Создаем свое первое веб-приложение при помощи Django
Современный стек сборки и публикации сайтов на Django
Разработка своего плагина для Django-CMS
Создание модуля для Django с нуля
------------------------------------------------------------------------
Быстрое начало. Развертывание веб-приложения Python (Django или Flask) в Службе приложений Azure
Как я построил проект на Django, Django REST Framework, Angular 1.1.x и Webpack
Django проект: с нуля до работающего сервера
------------------------------------------------------------------------
Setting up Django and your web server with uWSGI and nginx
Setting up Nginx and uWSGI for CGI scripting
Django. Запуск проекта в связке uWSGI и Nginx
Развёртывание Django с uWSGI
Django на production. uWSGI + nginx. Подробное руководство
Django + Python3 + Nginx + Gunicorn + DO
Настраиваем Django + virtualenv + nginx + gunicorn + PostgreSQL + memcached + letsencrypt на Ubuntu 16.04
обслуживание приложений django с помощью uwsgi и nginx в debian 8
React+Django как написать Hello World
Hello-World туториал на React/Django/RabbitMQ/Websockets
Django - Урок 001. Развёртывание сайта на Django + PostgreSQL + Gunicorn + Nginx
Как установить Django + Postgres + Nginx + Gunicorn на Ubuntu 14.04.
Настройка Gunicorn и uWSGI, сравнение производительности
Запуск Django сайта на nginx + Gunicorn + SSL
------------------------------------------------------------------------
Отладка в python через консоль
Удобный отладчик для Python/Django проектов Pudb
Введение в инструмент отладки Python PuDB
Python. Отладка при помощи pdb
Отладка Python/Django при помощи PuDB
------------------------------------------------------------------------
https://github.com/lampslave/blog
Полезные Django-модули
Полезные Django apps
------------------------------------------------------------------------
Асинхронные задания в Django с Celery
Как настроить Celery в Django
------------------------------------------------------------------------
Создание sitemap.xml в Django

SublimeText для Python + Django
Бесплатный django хостинг
установка Django в virtualenv с помощью pip через proxy с pyenv


Книги



http://padabum.net/search.php?tag=Django
http://scanlibs.com/tag/django/
Подборка книг по Django
Python, Django и PyCharm для начинающих
ftp Django1
ftp Django2


Подборки



https://vk.com/wall-101965347?q=django
https://vk.com/wall-80984752?q=Django
https://habrahabr.ru/hub/django/
https://toster.ru/tag/django/info
http://snakeproject.ru/rubric/rubric.php?id=5
http://djangosimple.blogspot.ru/search/label/django
http://podavan.ru/tag/django/
http://acman.ru/django/
http://pep8.ru/blog/tag/django
https://www.8host.com/blog/tag/django/
https://code-live.ru/tag/django/
http://m05quit0.ru/tag/django/
http://www.odmin4eg.ru/tag/django/
http://dikiigrigorii.ru/articles/tag/django/
http://webdevelop.info/category/django/
http://knigun.com/tags/django/
http://pygo.ru/
http://practice.keyfire.ru/blog/tags/praktikum/
http://webdevelop.info/category/django/
http://programmingnew.tk/blog/veb_django/1-0-3
http://zabaykin.ru/?tag=django
http://www.lexev.org/tag/django/
http://www.odmin4eg.ru/tag/django/
https://evileg.com/ru/knowledge/django/


Переводы



https://rtfm.co.ua/books-translations/django-book/


Самоучители



http://djbook.ru/rel1.9/intro/
http://ilnurgi1.ru/docs/django/
http://tutorial.djangogirls.org/ru/
http://www.tutorialspoint.com/django/index.htm
http://snakeproject.ru/python/ver1.3.htm
https://pythonhosted.org/redsolutioncms/index.html
http://ait-susu.narod.ru/django.htm
https://rtfm.co.ua/django-primer-sozdaniya-prilozheniya-chast-1-sozdanie-zapusk-proekta/
http://zavx0z-django.blogspot.ru/
http://peterhudec.github.io/authomatic/examples/django-simple.html
http://cultofdigits.com/articles/django-cms/
http://spb-tut.ru/
http://vits.pro/info/django-cms/
http://cultofdigits.com/articles/django-cms/
http://djangosimple.blogspot.ru/
https://evileg.com/ru/knowledge/django/
https://proghub.ru/t/django-basic
https://evileg.com/ru/knowledge/django/
Руководство по веб-фреймворку Django


Шпоры



http://students.summerisgone.com/help/django_extras.html
http://ilnurgi1.ru/docs/django/templates.html
https://docs.django-cms.org
https://github.com/dikiigr/django-online-shop
http://dikiigrigorii.ru/articles/tag/django/
https://cheatsheets.zip/django


Курсы



https://mva.microsoft.com/ru/training-courses/-python-django-11415
DJANGO - РАЗРАБОТКА WEB-ПРИЛОЖЕНИЙ
НОУ «ИНТУИТ» Введение в Django
НОУ «ИНТУИТ» Технопарк Mail.ru Group: Web-технологии
Python + Django Framework школа практического программирования В. Бовсуновского
http://itman.in/uroki-django/


Видео



https://vk.com/video?q=django%20python§ion=search
------------------------------------------------------------------------
intopython.ru Первая статическая страница в джанго
https://www.youtube.com/watch?v=Iw-CzupverM
------------------------------------------------------------------------
GeekBrains Django Построение веб приложений на Python
https://www.youtube.com/watch?v=UnmZMJv4ox8
------------------------------------------------------------------------
ITVDN Вебинар на тему "Создание первого веб-сайта при помощи Python и Django"
https://github.com/aqrln/itvdn-django-webinar
https://www.youtube.com/watch?v=IZqBTPmxoew
------------------------------------------------------------------------
Susan Ibach and Christopher Harrison Уроки Python
https://www.youtube.com/channel/UCsSQgz9oCdVyvZ-bViMj4_g
Уроки Python Разработка веб-сайтов с использованием Python и Django
https://www.youtube.com/playlist?list=PLQDKSpN49uZaVuqnQefE_pjX2L1EayPL0
------------------------------------------------------------------------
shadrus Django
https://www.youtube.com/playlist?list=PLpTASIMYgCp8supkEmnnrYa5xi9g91ZPI
Mihail Kozlov Python
https://www.youtube.com/playlist?list=PL5KGx5_ykLX8qOlP1CaxxlTXKOZhIvfZl
------------------------------------------------------------------------
кузьма кузин как создать сайт на Django Python
https://www.youtube.com/playlist?list=PLk3dllNv0g252fFKpiYeJaSRwEpBzhUcu
------------------------------------------------------------------------
Coding Medved Джанго с нуля на примере создания простого интернет-магазина
https://www.youtube.com/playlist?list=PLSWnD6rL-m9adebgpvvOLH5ASGJiznWdg
Coding Medved GoUpworkIntensive
https://www.youtube.com/playlist?list=PLSWnD6rL-m9Zn2JaIfdWA35IpBCwuzS4s
Coding Medved Бизнес-процессы и структура базы данных с нуля по разным проектам
https://www.youtube.com/playlist?list=PLSWnD6rL-m9ZaiJy6eY19IAEWeSfc4yvS
------------------------------------------------------------------------
Vitaly Pavlenko Веб-программирование на Физтехе
https://www.youtube.com/playlist?list=PLzQrZe3EemP5KsgWGnmC0QrOzQqjg3Kd5
------------------------------------------------------------------------
Владимир Доминион Django - разработка web-приложений
https://www.youtube.com/playlist?list=PLw9iStk1sia9yEiv5b7-Flxg6kTE2FAEL
Владимир Доминион Django1.8
https://www.youtube.com/playlist?list=PLw9iStk1sia9Nw2ENJRr3d9B30q8E9iI4
Владимир Доминион DJANGO-CMS
https://www.youtube.com/playlist?list=PLw9iStk1sia_DbiSqOwpiNE2I-QM_8RMf
Владимир Доминион Интернет магазин Django 1.10
https://www.youtube.com/playlist?list=PLw9iStk1sia9xvjLU0l2AXXQpHqXrcWdZ
Владимир Доминион Дневник Django developer
https://www.youtube.com/playlist?list=PLw9iStk1sia_3TmHeXK4uROHpBhFVE6fB
Владимир Доминион Django admin
https://www.youtube.com/playlist?list=PLw9iStk1sia9qAP5pOpVKGn5UPFw5BYj7
------------------------------------------------------------------------
Anton Maistrenko Django Введение
https://www.youtube.com/playlist?list=PLH9GfV-TK38h6crIqlzJ__xRocwVgMhyV
Anton Maistrenko Django Models
https://www.youtube.com/playlist?list=PLH9GfV-TK38iNIWn-YCiz0mtK59gfBkOV
Anton Maistrenko Django Project
https://www.youtube.com/playlist?list=PLH9GfV-TK38iyjZeW4lw8xssm3UoBAiA3
------------------------------------------------------------------------
Сергей Балакирев selfedu
https://proproprogs.ru/django
Django 3 для python (уроки)
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xO_39zZll2u1lz_Q-Mwn1F
Уроки по Django REST Framework
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xZA3Kl1fYmOH_MfLpiYMRs
------------------------------------------------------------------------
djlessons Django Channels
https://www.youtube.com/playlist?list=PLp_WN118C-Vd4XIIEfbCghVZLRLf1T5sk
djlessons Нотификации в Django
https://www.youtube.com/playlist?list=PLp_WN118C-VfNw8LgU5XdvIv-XXDFcTAz
djlessons Уроки Django. Создание медиапортала
https://www.youtube.com/playlist?list=PLp_WN118C-Vfb9QER0cOHLoDWg2_2IqPb
djlessons Интернет-магазин на Django 1.11
https://www.youtube.com/playlist?list=PLp_WN118C-VdgBKf_ATbvGI1xX06dZkmF
------------------------------------------------------------------------
Олег Молчанов Уроки Django 2.x
https://www.youtube.com/playlist?list=PLlWXhlUMyooaDkd39pknA1-Olj54HtpjX
------------------------------------------------------------------------
Артем Егоров egoroffchannel
Курс по Django 3
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvGM7Y7jAQP8TKbBd3up4K2
------------------------------------------------------------------------
ProgrammingHub Python + Django web framewrok
https://www.youtube.com/playlist?list=PLPRsICSqu9FoOpFyr8dlfLh9_n4nt_05u
------------------------------------------------------------------------
WeBest Django
https://www.youtube.com/playlist?list=PLfAlku7WMht6echneod-yj9BNx5zaRkJo
------------------------------------------------------------------------
Python и Django по-простому Понравившиеся
https://www.youtube.com/playlist?list=LLIVVEmrGyqEleoFbayEHLrg
------------------------------------------------------------------------
Видеоуроки Python Уроки Django
https://www.youtube.com/playlist?list=PLMS-se7ZYfuwRpIicQcWW6XyjzqmbcUD9
------------------------------------------------------------------------
Uproger Django создание сайтов с нуля.
https://www.youtube.com/playlist?list=PLysMDSbb9HcyLnXB9eLiYmsznjzEXo_6W
------------------------------------------------------------------------
Moscow Python
https://www.youtube.com/user/moscowdjangoru/playlists
------------------------------------------------------------------------
Django API + React + Electron | Course Work
https://www.liveedu.tv/dikiigr/
------------------------------------------------------------------------
Phantomium Разработка на Python, Django.
https://www.youtube.com/playlist?list=PL6Fp8QPl6sOi0FXf1XNjt4bNDBJ0wGdGF
------------------------------------------------------------------------


Программное обеспечение



https://github.com/django/
https://pypi.python.org/pypi?:action=browse&show=all&c=523
https://pypi.python.org/pypi/Django
http://awesome-django.com/
https://djangopackages.org/

полезные дополнения

https://github.com/django-admin-tools/django-admin-tools
https://github.com/sehmaschine/django-grappelli
https://github.com/divio/django-cms
https://github.com/nephila/djangocms-installer
https://github.com/megamark16/django-cms-themes
https://github.com/thomaspark/bootswatch
https://github.com/anymail/django-anymail
https://github.com/darklow/django-suit
https://github.com/LPgenerator/django-db-mailer
https://github.com/sehmaschine/django-filebrowser
http://atmb4u.github.io/django-console/
https://github.com/selectel/pyte
https://github.com/eliangcs/http-prompt
Средство проверки типа Django URLconf
https://pypi.org/project/django-urlconfchecks/
http://free-templates.ru/


Консоль



https://repl.it/
https://www.pythonanywhere.com/
https://pypi.python.org/pypi/django-console
https://pypi.python.org/pypi/django-webshell


Посмотреть исходный код



https://github.com/django/django
http://nullege.com/codes/search/django
https://searchcode.com/?q=django

локально )
$ python
>>> import django
>>> print(django.__path__)


Вопросы, ответы, решения



http://python.su/forum/21/
http://www.cyberforum.ru/python-web/
https://readthedocs.org/search/?q=django
http://stofl-ru.com/tags/django


Разное



Pythonix. Первоначальная настройка
https://bitbucket.org/tramX/pythonix4/downloads/
Разработка своей системы биллинга на Django
https://pypi.python.org/pypi/django-customer-billing
OPDS каталог позволяет получать доступ к Вашей библиотеке через Интернет с большинства устройств для чтения электронных книг, планшетов, смартфонов и т.д

------------------------------------------------------------------------
установка Django в virtualenv с помощью pip через proxy
Установка веб-фреймворка Django в Ubuntu
Делаем из Sublime Text 3 IDE для Python и Django
Sublime Text 3 и консоль python

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

Read more... )
http://ishalyapin.ru/собираем-питоновский-пакет-и-выклады/




развернуть
Время от времени, я пишу небольшие утилиты, библиотеки и приложения на python для себя, и не всегда я готов делится этими утилитами и библиотеками, но хотелось бы иметь возможность их удобно устанавливать, и желательно привычным pip в virtualenv. Для этого я довольно давно организовал себе локальный, приватный pypi сервер. Реализаций локальный pypi серверов довольно много, и я перепробовал их все. Большинство из них откровенно неработающие, другие безбожно глючат и падают от малейшего чиха. В конечном итоге для себя я выбрал localshop. В этом небольшом посте я расскажу как настроить локальный, приватный pypi репозиторий на localshop.

Для любителей docker: да, есть ardeois/docker-localshop. Можете поставить его сразу из docker hub, но мне docker не всегда подходит.

Ставим всё необходимое:



На серверах я по прежнему использую исключительно Debian Stable, поэтому название пакетов актуально для данного дистрибутива. Для других название может быть иным.

Из под обычного пользователя создаём виртуальное окружение и активируем его:
cd /home/$USER
virtualenv localshop
cd localshop
source bin/activate
pip install localshop
localshop migrate

Настроим supervisor для запуска localshop. Создадим /etc/supervisor/conf.d/ localshop.conf:



Выше $USER нужно заменить на имя пользователя, под которым Вы развернули virtualenv с localshop.

Запустим:



Теперь настроим nginx. Создадим /etc/nginx/sites-available/localshop :



В листинге выше $USER так же нужно заменить на пользователя в директории которого разместили виртуальную среду с localshop.
Активируем конфигурацию nginx:



Скажем systemd запускать supervisor и nginx при старте системы:



После этого заходим по адресу, по которому разместили localshop. В нашем примере - это http://localshop.yourdomain.com. Перед нам откроется главная страница localshop:



Далее в верхнем меню выбираем Permissions, затем CIDRs и нажимаем Create. На странице добавления необходимо добавить IP-Адрес, или сеть из которой будет доступна возможность добавлять пакеты. В моём случае это сеть 192.168.1.0/24. Обращаю внимание, что добавлять необходимо в CIDR нотации. Например, /24 в CIDR нотации - это маска 255.255.255.0. Подробнее можно почитать, например, на википедии.



После добавления:



В localshop в отличии от многих других приватных pypi можно каждому пользователю давать разные ключи для доступа, и при надобности отключить пользователя. Добавим один ключ. Для этого так же в меню выбираем Permissions, затем Credentials и нажимаем Create. Localshop автоматически сгенерирует ключ:



Пользователи имеющие доступ к самому localshop создаются отдельно. Для кого-то это может показаться неудобным, для себя же я нашёл это весьма удобным решением.

Теперь необходимо настроить pip таким образом, чтобы он позволял использовать наш приватный pypi вместе с основным.
Откроем файл ~/.pypirc расположенный в домашней директории пользователя, из под которого планируется использовать localshop, и приведем к примерно такому виду:



Пользователя и пароль для localshop находятся на странице Credentials. Там же можно добавить ключ, если на ранних шагах не добавили.
Теперь можно скачивать и закачивать пакеты через наш приватный сервер:



Но чтобы каждый раз не указывать его, можно назначить его используемым по-умолчанию. Для этого в домашней директории откройте файл: ~/.pip/pip.conf (создайте если его нет), и добавьте следующее:



Где access_key - это Access Key со страницы Credentials, secret_key - secret key с той же страницы.


https://the-bosha.ru/2016/03/21/razvorachivaem-lokalnyiy-pypi-s-localshop/



развернуть
испробовав разные способы я нашёл этот самым оптимальным
при установке через pip3 возникла ошибка:

TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

причиной оказалась "докембрийская свежесть" пакета:
http://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry

поначалу возникло желание собрать свой пакет с помощью stdeb

Ставим пакеты stdeb и python-all:
# apt-get install stdeb python-all
Теперь находим архив с нужным нам модулем на pypi.python.org и скачиваем его себе:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
или
$ wget https://bootstrap.pypa.io/get-pip.py
Теперь можно заглянуть в документацию на stdeb и посмотреть, как это делается.

Распакуем скачанный архив:
$ tar xzvf grab-0.4.12.tar.gz
Перейдём в каталог с распакованным модулем:
$ cd grab-0.4.12
Подготовим каталог и управляющие файлы для сборки пакета:
$ python setup.py --command-packages=stdeb.command sdist_dsc
Теперь перейдём в этот каталог и соберём пакет:
$ cd deb_dist/grab-0.4.12
$ dpkg-buildpackage -us -uc -rfakeroot
В каталоге выше появится готовый deb-пакет, который можно установить в систему.
# dpkg -i python-grab_0.4.12-1_all.deb

http://vladimir-stupin.blogspot.ru/2013/10/deb-python.html

sudo apt-get install python-stdeb
.....
но свежее окружение проще поддерживать стандартными средствами python, чем самому постоянно ваять пакеты ), посему вбил в консоль это и получил нужный мне результат:
sudo apt-get remove python-pip python3-pip
export https_proxy=http://user:password@proxy-server:port  ; export http_proxy=http://user:password@proxy-server:port  ; export ftp_proxy=$http_proxy
wget https://bootstrap.pypa.io/get-pip.py
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
если ImportError: cannot import name 'sysconfig'
sudo apt-get install python3-distutils
pip install -U pip
pip install -t $HOME/devs/lib/virtualenv virtualenv
chmod +x $HOME/devs/lib/virtualenv/virtualenv.py (для старых версий)
ln -s $HOME/devs/lib/virtualenv/virtualenv.py $HOME/bin/virtualenv  (для старых версий)
ln -s $HOME/devs/lib/virtualenv/bin/virtualenv $HOME/bin/virtualenv
echo 'export PYTHONPATH="$HOME/devs/lib/:$PYTHONPATH"' >> $HOME/.profile  (или в $HOME/.bashrc)
cd $HOME/devs/virt
virtualenv -p python3 newenv1
source $HOME/devs/virt/newenv1/bin/activate
pip install django
pip install django-admin-tools
django-admin startproject django1
cd django1/
sed -i 's/LANGUAGE_CODE = \x27en-us\x27/LANGUAGE_CODE = \x27ru-ru\x27/' django1/settings.py
python manage.py migrate
python manage.py createsuperuser
x-www-browser 'http://0.0.0.0:8080/admin' &
python manage.py runserver 0.0.0.0:8080


https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/
python3 -m pip install --user virtualenv
python3 -m venv env
source env/bin/activate
deactivate
python3 -m pip install requests

https://docs.python.org/3/tutorial/venv.html
python3 -m venv tutorial-env
source tutorial-env/bin/activate


ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
launchpadlib 1.10.13 requires testresources, which is not installed.

sudo apt install python3-testresources

если надо какая нибудь определённая версия Django, то
pip install Django==1.8.18

PS
следуя талмуду http://djbook.ru/rel1.9/intro/
я вводил всякие команды типа

python manage.py startapp polls
python manage.py makemigrations polls
python manage.py migrate
python manage.py check
python manage.py migrate --run-syncdb

и правил конфиги, как в букваре, пока не столкнулся с ошибкой:

    url(r'^polls/', include('polls.urls')),
NameError: name 'include' is not defined

вылечилось добавлением этой строки, в файле urls.py, перед urlpatterns

from django.conf.urls import include

в старых версиях лечило

from django.conf.urls.defaults import *

Django 1.9 Flatpages, как настроить URLS?
http://python.su/forum/topic/7746/?page=1#post-51255

быстро подправить базу
python manage.py dbshell
или
sudo add-apt-repository -y ppa:linuxgndu/sqlitebrowser
sudo apt-get install sqlitebrowser

чтобы PyCharm в virtualenv нормально ставил пакеты через proxy:
надо создать файл pycharm, написать в нём:



положить его в папку $HOME/bin и дать права на выполнение chmod +x
сам архив с программой распаковать в $HOME/lib

---------------------------------------------------------------------------

Flatpages App

1) устанавливаем. как написано тут
https://djbook.ru/rel1.9/ref/contrib/flatpages.html

в settings.py:
INSTALLED_APPS 
    'django.contrib.sites',
    'model1',                    # подключаемая модель
    'django.contrib.flatpages',

MIDDLEWARE добавить прослойку
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',


SITE_ID = 7 # цифра = № сайта. созданного в админ панели, узнать номер можно переходом на этот сайт (№ в адресной строке)

urls.py



2) создаём модель
django-admin.py startapp model1
python manage.py migrate

3) создаём в модели папки:
templates, а в ней папку flatpages, в которой создаём файл default.html
как указано тут
https://simpleisbetterthancomplex.com/tutorial/2016/10/04/how-to-use-django-flatpages-app.html




или напр. так



удобный визуальный редактор

https://github.com/ITCase-django/django-tinymce-4

pip install django-tinymce-4
в settings.py

INSTALLED_APPS = (
    'tinymce_4',
    'grappelli',
    'filebrowser',
    'django.contrib.admin',
)

в urls.py

url(r'^grappelli/', include('grappelli.urls')),
url(r'^admin/', include([
    url(r'^', include(admin.site.urls)),
    url(r'^filebrowser/', include(fb_site.urls)),
])),

в models.py

from tinymce_4.fields import TinyMCEModelField
from django.db import models

class ModelFoo(models.Model):
    content = TinyMCEModelField('Foo content')

напр в

$HOME/devs/virt/newenv3/lib/python3.4/site-packages/django/contrib/flatpages/models.py

добавить
from tinymce_4.fields import TinyMCEModelField

а
content = models.TextField(_('content'), blank=True)
заменить на
content = TinyMCEModelField(_('content'), blank=True)

https://djbook.ru/forum/topic/1101/

---------------------------------------------------------------------------

напоминание о читабельном коде

$ pip3 install pep8
$ pep8 optparse.py
$ pip3 install autopep8
$ autopep8 --in-place optparse.py
---------------------------------------------------------------------------

Быстрый старт
---------------------------------------------------------------------------
работа с virtualenv

$ git clone https://github.com/username/projectname.git
$ cd projectname
$ virtualenv -p python3 venv
$ source venv/bin/activate
(venv)$ pip install -r requirements.txt
---------------------------------------------------------------------------

cd $HOME/devs/virt
virtualenv -p python3 newenv3
source $HOME/devs/virt/newenv3/bin/activate
pip install --upgrade pip
pip install djangocms-installer # и это подтянет всё остальное по зависимостям, в т.ч и django нужной версии )
pip freeze > requirements.txt
mkdir tutorial-project
cd tutorial-project
djangocms -f -p . mysite
python manage.py createsuperuser
python manage.py runserver

в settings.py

SITE_ID = 2 # чтобы создать ещё сайт, (кроме того что в шаблоне по умолчанию, цифра - количество сайтов)

затем
python manage.py migrate

войти, создать сайт, папку, загрузить туда рисунки, создать фрагмент с фоновым рисунком, создать страницу

затем
dumpdata и loaddata чтобы сдампить одну базу в JSON и восстановить дамп уже на другой базе.

добавление bootstrap3
pip install aldryn-bootstrap3
python manage.py migrate
python manage.py collectstatic
подробно см тут
https://github.com/aldryn/aldryn-bootstrap3

вариант
https://github.com/dyve/django-bootstrap3

http://docs.django-cms.org/en/release-3.4.x/introduction/install.html
http://docs.django-cms.org/en/latest/introduction/index.html
Index of Packages Matching 'djangocms'
https://cdnjs.com/libraries (подключаемые библиотеки )
Как растянуть фон на всю ширину окна?
неподвижный фон при прокрутке страницы html
Как добавить фоновый рисунок на веб-страницу?
Перевод первой части документации Django-CMS
Вторая часть документации по Django CMS
Создание сайта на Django CMS

---------------------------------------------------------------------------

Работа с pip

$ pip help # помощь по доступным командам.
$ pip install package_name # установка пакета(ов).
$ pip install Django==1.8.18 # установка определённой версии пакета.
$ pip uninstall package_name # удаление пакета(ов).
$ pip-autoremove package_name # удаление пакета(ов), с установленными зависимостями
$ pip install -U # обновление пакета(ов).
$ pip install --force-reinstall # при обновлении, переустановить пакет, даже если он последней версии.
$ pip list # Смотрим на список установленных (доступных) библиотек
$ pip list -o # узнать, какие библиотеки можно обновить
$ pip show package_name # узнать версию, местонахождение на диске и зависимости.
$ pip search pycp # покажет список всех пакетов, в названии которых есть pycp
$ pip --proxy user:passwd@proxy.server:port # использование с прокси.
$ pip completion --bash >> ~/.bashrc # Автодополнение
http://asvetlov.blogspot.ru/2014/05/pip.html

Как обновить существующие пакеты? (пользоваться осторожно, лучше в virtualenv )

$ pip install pip-review
$ pip-review --local --interactive
или
$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
http://python.cx/blog/article/3
http://xgu.ru/wiki/Работа_с_модулями_в_Python

Удаление ненужных пакетов

$ pip install pip-autoremove
$ pip install Flask Sphinx
$ pip-autoremove Flask Sphinx -y
http://python.cx/blog/article/PyPi_pip_python

При сборке собственных пакетов нужно записать все текущие установленные пакеты в файл с именем requirements.txt
$ pip freeze > requirements.txt

Команда pip установит перечисленные зависимости, переопределяя зависимости, указанные в подпакетах, в том случае, если возникли конфликты.
$ pip install -r requirements.txt


---------------------------------------------------------------------------------

virtualenverapper
http://www.unix-lab.org/posts/virtualenv/
https://russianpenguin.ru/tag/python/

$ sudo apt install virtualenvwrapper

Добавляем в .bashrc

export WORKON_HOME=~/.envs
source /usr/bin/virtualenvwrapper.sh

Применяем изменения
$ source .bashrc

Теперь можно создавать окружения.
$ mkvirtualenv proj_env

Активировать окружения.
$ workon proj_env

Выходить из окружения
$ deactivate

Удалять окружения.
$ rmvirtualenv proj_env

При этом все папки окружений будет расположены в одном месте: папке, которая задана через $WORKON_HOME.

---------------------------------------------------------------------------------

вариант с pyenv (удобно)
https://github.com/pyenv/pyenv-installer
Менеджер версий python
Скрипт создаст указанную директорию, вместе со всеми родительскими директориями, если потребуется, и построит виртуальное окружение.

средствами OS
$ sudo apt-get install python3-venv
$ python3 -m venv $HOME/devs/virt/newenv1
$ pyvenv $HOME/devs/virt/newenv1
$ source $HOME/devs/virt/newenv1/bin/activate

автономная установка (предпочтительней)
Управляем разными версиями python

sudo apt install git




перезапустить оболочку
$ exec "$SHELL"

Обновление:
$ pyenv update

Удаление:
$ rm -fr ~/.pyenv
и убрать из .bashrc строки (или заккоментить #)

export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

перезапустить оболочку
$ exec "$SHELL"

если
WARNING: `pyenv init -` no longer sets PATH
то убрать из .bashrc и добавить в .profile
https://github.com/pyenv/pyenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile

Использование:
$ pyenv
$ pyenv versions
$ pyenv install 3.6.3
$ pyenv versions
$ pyenv global 3.6.3
$ python --version
$ pyenv global 2.7.13

~$ mkdir my-project && cd my-project
~/my-project$ python -V # версия python по-умолчанию
Python 2.7.13
~/my-project$ pyenv local 3.6.3 # меняем версию для директории my-project
~/my-project$ python -V # новая версия
Python 3.6.3
~/my-project$ cd ..
~$ python -V # для остальных директорий ничего не поменялось
Python 2.7.13
~$ ls -la ./my-project
-rw-rw-r-- 1 user user 10 ноя 8 17:18 .python-version
~$ cat ./.python-version
3.6.3

Если в ходе установки в консоли появятся ошибки
значит в системе установлены не все необходимые пакеты. Исправим это, выполнив



если ошибка ModuleNotFoundError: No module named '_lzma'
то
sudo apt-get install lzma
sudo apt-get install liblzma-dev
sudo apt-get install libbz2-dev

Виртуальное окружение
Добавить плагин легко, просто клонируем его из репозитория pyenv-virtualenv или pyenv-virtualenvwrapper:



Пример использования

$ pyenv versions
* system
2.7.5
3.3.2

$ mkdir -p ~/test_project/prj_for_2.7.5 && cd ~/test_project/prj_for_2.7.5
$ pyenv virtualenv 2.7.5 my-virtualenv-2.7.5
$ pyenv local my-virtualenv-2.7.5
$ pip install django==1.4
$ pip freeze
Django==1.4
wsgiref==0.1.2
$ python --version
Python 2.7.5

$ mkdir -p ~/test_project/test_project && cd ~/test_project/test_project
$ pyenv virtualenv 3.3.2 my-virtualenv-3.3.2
$ pyenv local my-virtualenv-3.3.2
$ pip install django==1.5
$ pip freeze
Django==1.5
$ python --version
Python 3.3.2

самый правильный способ
$ pyenv virtualenv virt3.6.3
$ pyenv virtualenvs
$ pyenv shell virt3.6.3
$ pyenv activate virt3.6.3
$ pyenv deactivate
$ pyenv uninstall virt3.6.3

проверка как работает
$ pyenv install 3.6.4
$ pyenv virtualenv virt3.6.4
$ pyenv activate virt3.6.4
$ pip install gunicorn httpbin
$ gunicorn httpbin:app
$ pyenv deactivate
$ pyenv uninstall virt3.6.4
$ pyenv virtualenvs
$ pyenv uninstall 3.6.4
$ pyenv versions

ещё пример
pyenv versions
pyenv install --list
pyenv install 3.11.2
pyenv global 3.11.2
pyenv virtualenv virt_3.11
pyenv activate virt_3.11
pip install ipython
pip install jupyter
pip install jupyterlab-language-pack-ru-RU
pip install voila
jupyter notebook --port 9999
pyenv deactivate
pyenv uninstall virt_3.11

ошибки
ModuleNotFoundError: No module named '_lzma'
sudo apt install lzma liblzma-dev libbz2-dev


---------------------------------------------------------------------------------

Представляем Pipenv!
https://pypi.org/project/pipenv/
https://pypi.org/project/pipsi/


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

https://github.com/kennethreitz/autoenv
https://nolar.info/automatically-activate-virtualenv-on-cd/
https://gist.github.com/nolar/9702618
http://hmarr.com/2010/jan/19/making-virtualenv-play-nice-with-git/
https://github.com/utahta/pythonbrew

http://itnovella.ru/itnovella/2014/01/16/nastroyki-proksi-v-debian-gnu-linux.html
http://pythonworld.ru/osnovy/pip.html
https://pip.pypa.io/en/stable/reference/pip_install/#pip-install-options
https://qa.mchost.ru/q/ustanovka-bibliotek-python-v-domashniy-katalog
http://askubuntu.com/questions/250929/pythonpath-environment-variable
«pip -t» — простая альтернатива virtualenv
Создание deb-пакетов для модулей Python
http://snakeproject.ru/rubric/article.php?art=django19p01
http://defindit.com/ascii.html
Одно-строчные скрипты SED - Ant0
Полезные одно-строчные скрипты sed (sed shell)
http://asvetlov.blogspot.ru/2014/05/pip.html
http://python.cx/blog/article/PyPi_pip_python
http://eax.me/python-virtualenv/
Питон в коробке – venv в python 3.3
https://docs.python.org/dev/library/venv.html
https://khashtamov.com/2015/12/pyenv-python/
http://proft.me/2010/04/3/python-i-okruzhenie-virtualenv/
https://russianpenguin.ru/2015/04/05/разработка-на-python-с-использованием-virtualenv/
http://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html
Современный Python: как начать свой проект с нуля при помощи Pyenv и Poetry

Установка Django CMS в Ubuntu 16.04 64bit
Ленивый деплой Django проекта UWSGI + NGINX (UBUNTU 20.04)
How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 20.04
Запуск Django сайта на nginx + Gunicorn + SSL
Настройка Debian, Nginx и Gunicorn для Django проекта

https://www.sinyawskiy.ru/feincms.html
http://vits.pro/info/django-cms/
http://cultofdigits.com/articles/django-cms/
12 не годных cms или как я выбирал нам cms на python — и ничего не выбрал.

uzverss Установка веб-фреймворка Django в Ubuntu
uzverss консоль python в роли командной строки




раскрыть тему

Сайты



http://raspberry.su/
http://raspberrypi.ru/
http://micropython.org/
http://www.espruino.com/
https://www.arduino.cc/
http://amperka.ru/
http://cxem.net/
http://www.codesys.ru/
https://www.codesys.com/
http://digitrode.ru/
http://plc24.ru/
http://rs232.net.ru
https://vk.com/itinside
https://2ch.hk/ra/
https://ru.mouser.com/


Статьи



Схема распайки компьютерного порта COM - rs232, DE-9, DB-9, CANNON9
Запись времени захода в комнату или простой пример работы с прерываниями по GPIO на Python
Raspberry Pi. Урок 4. Настройка GPIO
Raspberry Pi: первое знакомство. Урок 4. Работа с GPIO, мигание светодиодом, Python
Система управления умным домом на основе Raspberry Pi
Raspberry Pi для домашней автоматизации. Установка Webiopi
RASPBERRY PI. ДЕЛАЕМ ПЛАТУ ИНДИКАЦИИ И ПИШЕМ КОД НА PYTHON
GPIO button to emulate keyboard
Использование GPIO из Python на Raspberry Pi
Работа с GPIO пинами Raspberry Pi.
Использование SPI из Python на Raspberry Pi
От Python скрипта до WSGI приложения
Последовательный порт. Да, поможет нам Python!
Работа с последовательным портом из консоли Linux
Bubot — очень легкий фреймворк на Python 3 для программирования роботов и домашней автоматизации
Веб-контроль Raspberry Pi GPIO
Разработка для коптеров
Гирлянда на Raspberry Pi
Вывод температуры, пробок и курса валют на светодиодную матрицу Raspberry Pi
NooLite + Raspberry Pi + Telegram = умный дом
«Привет, Siri. Включи обогреватели» — Интеграция умного дома на базе NooLite с Apple HomeKit
Подключаем Arduino к Mikrotik. Дешевое и сердитое удаленное управление нагрузками
Программное обеспечение для умного дома
Как мы сделали малогабаритный облачный видеорегистратор из обычной IP камеры
Видеоcъемка и фотосъёмка на Raspberry pi в облако
Простой SMS-шлюз на Raspberry Pi
«Как зеницу ока...» или делаем простенькую охранную систему на базе микроконтроллера (Сanny или Arduino) и Raspberry PI
https://github.com/bosonbeard/Funny-models-and-scripts/tree/master/5.Canny/5.canny_arduino_raspi_uart_security
Разминка перед выходными: есть Raspberry Pi, Arduino и свободный вечер
Raspberry Pi. Работаем с GPIO на Python - Часть 1
Linux: кнопки, светодиоды и GPIO
Соединяем Raspberry Pi с Arduino через Serial GPIO
Использование GPIO выводов Raspberry Pi
Просмотр видео на Raspberry Pi
Медиаплеер из содержимого кладовки
Превращаем TV-box в мини-компьютер: установка Linux Armbian на примере X96 Max+ 100W
Пишем аудио-разведчик своими руками
Управление линиями GPIO на Raspberry Pi
Прошивка AVR микроконтроллеров с помощью Orange Pi
Удаленное управление мотором постоянного тока с Arduino и Node.js
uJVM: платформа для запуска Java-приложений на микроконтроллерах (MCU)
Espruino Pico — оригинальная плата Espruino со встроенным интерпретатором JavaScript.

Электроника всем начинающим
Разработка одноплатного компьютера с нуля. Пособие для начинающих
Разработка одноплатного компьютера. Пособие для продвинутых
Микроконтроллер + компьютер + своё программное обеспечение
Осваиваем простейший микроконтроллер PIC. Часть 1
Промышленный реверс-инжиниринг
GPIO-пины Raspberry Pi и их использование из Python
Мой первый радиоуправляемый робот на Arduino
Регистры процессора Intel 8086: от чипа к транзисторам
Дешевый и полнофункциональный робот-манипулятор своими руками
Эмулятор RFID (Смарт-карты Wiegand )
U-boot. Процедура инициализации по шагам
как мы нашли, проанализировали (с помощью Reddit) и в итоге поймали виновника вредоносного устройства в нашей сети
RogueOne: создание мошеннической точки доступа Wi-Fi с помощью Raspberry Pi
Доступ к журналу событий из командной строки
Редактирование образа Raspberry Pi с помощью qemu-user-static (Ubuntu 14.04)
Введение в реверсинг с нуля, с использованием IDA PRO
Вглядываемся в Radare2
Анализ TPM
Полноценный Kubernetes с нуля на Raspberry Pi

разное
DIY дозиметр за полчаса: так ли фонят набережные Питера?


Книги



http://radio18.ru/catalog/docs/5198.pdf
Проекты с использованием контроллера Arduino Виктор Петин
Проекты с использованием контроллера Arduino Виктор Петин 2014
Программируем Arduino. Профессиональная работа со скетчами Саймон Монк 2017
Джереми Блум - Изучаем Arduino: инструменты и методы технического волшебства
Практическая энциклопедия Arduino Виктор Петин, Александр Биняковский 2017
Джереми Блум - Изучаем Arduino: инструменты и методы технического волшебства [2015] DjVu
Подборка книг: Arduino
Ассемблер — это просто. Учимся программировать Олег Калашников 2011
Схемотехника. Мастер-класс Гаврилов С.А. 2016
Авдеев В.А. Периферийные устройства: интерфейсы, схемотехника, программирование
Микроконтроллеры AVR. От азов программирования до создания практических устройств Белов А.В.
подборка книг схемотехника микроконтроллеры


Подборки



http://robocraft.ru/tag/python
http://cxem.net/search.php?search_str=raspberry
https://geektimes.ru/hub/raspberrypi/
http://abyz.co.uk/rpi/pigpio/python.html
http://mediaunix.com/tag/raspberry-pi/
https://habrahabr.ru/hub/controllers/
http://wiki.amperka.ru/
https://zhevak.wordpress.com/

Assembler
https://uzverss.livejournal.com/89062.html


Самоучители



Базовый курс на Raspberry PI
Подборка материалов Raspberry Pi для домашней автоматизации
Ethernet Shield и Arduino – основы
GPIO для чайников (часть 1)
GPIO для чайников (дополнение)
http://www.openfablab.ru/
http://plc24.ru/manual/cds_theory/
Шпаргалка по основным инструкциям ассемблера x86/x64


Видео



https://www.youtube.com/user/Raspberrypipi/videos
------------------------------------------------------------------------
Паяльник TV Для начинающих
https://www.youtube.com/playlist?list=PLBLtydguylgB-9FPU63TY_vtsj0xYt5li
Паяльник TV Обзоры оборудования
https://www.youtube.com/playlist?list=PLBLtydguylgCryZxo0sC-j1INz2XW0WH7
Паяльник TV Ремонт
https://www.youtube.com/playlist?list=PLBLtydguylgA3trXhW-QVjGAU9-TqEIJW
Паяльник TV Робототехника и ДУ-управление
https://www.youtube.com/playlist?list=PLBLtydguylgCOSv5Cn-757nAgMGQKXRAq
Паяльник TV Конструкторы
https://www.youtube.com/playlist?list=PLBLtydguylgDsjG9L8tSzmJOSXzfwGSBE
Паяльник TV Программы
https://www.youtube.com/playlist?list=PLBLtydguylgCkhtJWxukOynJztqTVN_Ny
Паяльник TV Микроконтроллеры
https://www.youtube.com/playlist?list=PLBLtydguylgDUtd9qRAt82u-pUa9x6O8Y
------------------------------------------------------------------------
Радиолюбитель TV Уроки Ардуино / Arduino
https://www.youtube.com/playlist?list=PLleXqmo8pio1THWNZlx-py52KgafepaHf
Радиолюбитель TV Всё об ARDUINO
https://www.youtube.com/playlist?list=PLleXqmo8pio00lUJMZEmJGdCmyPsBUCII
Радиолюбитель TV Уроки радиоэлетроники / Радиолюбитель TV
https://www.youtube.com/playlist?list=PLleXqmo8pio3f8NuYKnJuWeM-27OBMKLM
Радиолюбитель TV Транзистор - это просто
https://www.youtube.com/playlist?list=PL44307E6369894ED5
Радиолюбитель TV Как сделать своими руками
https://www.youtube.com/playlist?list=PLleXqmo8pio3GRO9303b8_ZXK09F88ZuL
Радиолюбитель TV Товары из Китая Радиолюбителю
https://www.youtube.com/playlist?list=PLleXqmo8pio1Oh4sFdYAfIKLHsJz1pj8i
------------------------------------------------------------------------
Радиолюбитель Уроки радиоэлектроники
https://www.youtube.com/playlist?list=PL_2PkT1Qd7H-yLV_8OMhKbwsoclr13Umk
------------------------------------------------------------------------
AKA KASYAN Как это работает?
https://www.youtube.com/playlist?list=PLYWPJHDGvhxGU7wSB-39KNhst_d9d3mOS
AKA KASYAN Начинающим радиолюбителям
https://www.youtube.com/playlist?list=PLYWPJHDGvhxEZi11LZ8-OXO1bWmtnOUQx
AKA KASYAN Обзор устройств
https://www.youtube.com/playlist?list=PLYWPJHDGvhxFTXCHEJvCg5Z-XLU2SMHpQ
AKA KASYAN Мастерская радиолюбителя
https://www.youtube.com/playlist?list=PLYWPJHDGvhxHjgrtkeEVIka58QvsVhp8Q
AKA KASYAN Простейшие конструкции для начинающих
https://www.youtube.com/playlist?list=PLYWPJHDGvhxFFTRa4TR6i0q8QYr5CCJug
AKA KASYAN Особо интересное видео
https://www.youtube.com/playlist?list=PLYWPJHDGvhxHPltFftU1oUESYwKaRBAyK
------------------------------------------------------------------------
Обзоры посылок и самоделки от jakson
Самоделки и радиоконструкторы
https://www.youtube.com/playlist?list=PLIe2lqjafXDf28GsoyeMjGML8zIzWRGdf
Собираем интересные схемы.
https://www.youtube.com/playlist?list=PLIe2lqjafXDcNvy4lGclWSMsoitDOufVo
Радиоконструкторы
https://www.youtube.com/playlist?list=PLIe2lqjafXDcvwaQreha6qmyrt5ZYmjv6
------------------------------------------------------------------------
geekmatic Видео уроки программирования Arduino
https://www.youtube.com/playlist?list=PLmYrKfbOTukLzM2oUr4DzZ68vfrB3q5Pt
geekmatic Уроки Arduino для новичков от coursera
https://www.youtube.com/playlist?list=PLmYrKfbOTukJONp6Mjse7I4cigpChNWwB
------------------------------------------------------------------------
IT Propaganda Программируем Arduino на Python
https://www.youtube.com/playlist?list=PLbKwBvrpogbbTfFxr1wEXzLS9VKXsqvxD
------------------------------------------------------------------------
Video Channel AVR
https://www.youtube.com/playlist?list=PLZ5OKxpfkh5KfjXFeywXvaam-wTmC35A9
------------------------------------------------------------------------
Школа программистов Программирование с нуля! (ASM)
https://www.youtube.com/playlist?list=PLVBQ16nKzRwqD8qPOldSYBUWEjjFOCPXu
------------------------------------------------------------------------
Основы программирования Ассемблер
https://www.youtube.com/playlist?list=PLOrC1aStHSaqGTV5lEx07nKbvDxSiYCJH
------------------------------------------------------------------------
Tempesta ASSEMBLER
https://www.youtube.com/playlist?list=PLQ3fZB7WryQCL_U2NnpOx97zW6N9-Een3
------------------------------------------------------------------------
risctronix Программирование pic контроллеров для начинающих с нуля.
https://www.youtube.com/playlist?list=PLt_8RrnK98LnMeOzaW_MpiShY4HGkQtI1
------------------------------------------------------------------------
MyChipPic Создание схем и программирование на ассемблере микроконтроллеров PIC
https://www.youtube.com/playlist?list=PLIMnyb3KvN1j0H3G82zjT6R0KLG77ONvg
MyChipPic Программирование микроконтроллеров PIC на ассемблере
https://www.youtube.com/playlist?list=PLIMnyb3KvN1hQQfVPeeVTynqG2ni-zoCh
MyChipPic Практика
https://www.youtube.com/playlist?list=PLIMnyb3KvN1g_xOxtGG7V3vOTnR3Lou85
------------------------------------------------------------------------
Smart Ptz Orange PI PC
https://www.youtube.com/playlist?list=PLuxH0zKcnbRGfdGpHXCw-964tV8y1zgcI
Smart Ptz Ардуиномания
https://www.youtube.com/playlist?list=PLuxH0zKcnbRG5ymR47m1sRNAYH1MLviMC
------------------------------------------------------------------------
НОУ ИНТУИТ Введение в цифровую электронику
https://www.youtube.com/playlist?list=PLDrmKwRSNx7Lk8Lb2Cz2a2JqVXmwqCo6t
НОУ ИНТУИТ Архитектура ЭВМ и язык ассемблера
https://www.youtube.com/playlist?list=PLDrmKwRSNx7I4QA6z2HlcDkjwW4fpNPva
------------------------------------------------------------------------
Видео уроки по Arduino от Джереми Блума (Jeremy Blum)+книга
http://pikabu.ru/story/video_uroki_po_arduino_ot_dzheremi_bluma_jeremy_blumkniga_3901988
------------------------------------------------------------------------
knowcity Радиоэлектроника.
https://www.youtube.com/playlist?list=PLYZm5HGThGRDMQKJyPHWefGPDbvREh4R3
------------------------------------------------------------------------
ElectronicsClub Электроника для начинающих
https://www.youtube.com/playlist?list=PL8uwGGI-Cxq7_82j2kLih6bspk4DkOMec
------------------------------------------------------------------------
Электротехника и электроника для программистов
Кодирование сигналов
https://www.youtube.com/playlist?list=PL1VvMJF0dnhrcJZBhrAr8OWZKkCtbIBGQ
Интерфейсы
https://www.youtube.com/playlist?list=PL1VvMJF0dnhrmMtkXu4gOHV5hnGMMPVdU
Схемы на биполярном транзисторе
https://www.youtube.com/playlist?list=PL1VvMJF0dnhomTRm_Q6qous0s6GcVXDjN
------------------------------------------------------------------------
Заметки Ардуинщика Уроки Arduino
https://www.youtube.com/playlist?list=PLgAbBhxTglwmVxDDC5TSYUI91oZ0LZQMw
Заметки Ардуинщика Arduino - модули и датчики
https://www.youtube.com/playlist?list=PLgAbBhxTglwkg_Q8me6QO3JifVbaGDXAL
Заметки Ардуинщика Arduino - полезные трюки
https://www.youtube.com/playlist?list=PLgAbBhxTglwnL23mAbz7pleQGOduv-vRF
------------------------------------------------------------------------
it-inside.org Raspberry pi
https://www.youtube.com/playlist?list=PLWeA3JK7qaiovJ1kSaiEdDRuzELxcCxfA
it-inside.org Python
https://www.youtube.com/playlist?list=PLWeA3JK7qaipA13QI9h_4-X40161XZZ39
it-inside.org Scripting
https://www.youtube.com/playlist?list=PLWeA3JK7qaiqH4vA78UxoUKsQpFp71bwQ
it-inside.org Обзоры и тесты.
https://www.youtube.com/playlist?list=PLWeA3JK7qairbhDvcNrMshB3YUXwi1M6c
------------------------------------------------------------------------
arduinoLab
https://www.youtube.com/user/0arduinoLab/playlists
------------------------------------------------------------------------
AmperkaRu
https://www.youtube.com/user/AmperkaRu/playlists
------------------------------------------------------------------------


Программное обеспечение



https://www.raspberrypi.org/downloads/
https://wiki.debian.org/RaspberryPi
http://mirror.centos.org/altarch/7/isos/armhfp/
Дистрибутивы для Raspberry Pi
33 операционные системы для Raspberry Pi
https://www.armbian.com/
https://github.com/NickAlilovic/build
https://www.webosose.org/
CusDeb Веб интерфейс для создания образов ОС для Raspberry Pi онлайн
https://github.com/espruino/Espruino
http://pythonhosted.org/RPIO/
https://github.com/pyserial/pyserial
https://pypi.python.org/pypi/RPi.GPIO
https://sourceforge.net/projects/raspberry-gpio-python/
Distribution List for Raspberry Pi
Документация на систему фреймворка LLeo для ESP8266
------------------------------------------------------------------------
Микроконтроллеры на базе Java?
https://www.microej.com/product/vee/
https://developer.android.com/things/index.html
https://github.com/OpenSC/OpenSC/wiki/JavaCards
http://haiku-vm.sourceforge.net/
http://www.harbaum.org/till/nanovm/index.shtml
https://github.com/SINTEF-9012/JArduino/

https://github.com/samsung/uJVM
https://www.law.cornell.edu/wex/copyright
https://github.com/github/dmca/blob/master/2019/07/2019-07-29-uJVM.md
https://zenodo.org/record/2647414
Java VM for microcontrollers uJVM
------------------------------------------------------------------------
http://www.espruino.com/
http://netmf.github.io/

http://www.eluaproject.net/
http://www.ulisp.com/
------------------------------------------------------------------------
https://www.hex-rays.com/products/ida/support/download_freeware.shtml
http://www.windbg.org/
http://store.codesys.com/

https://radare.org/n/
https://github.com/radareorg/radare2-r2pipe
https://github.com/dukebarman/awesome-radare2

https://codisec.com/veles/
https://github.com/codilime/veles

https://github.com/pikvm/pikvm

http://opencircuitdesign.com/


Вопросы, ответы, решения



https://micropython.org/unicorn/
http://arduino.ru/forum
http://www.cyberforum.ru/arduino/
http://forum.cxem.net/index.php?/forum/99-arduino-и-raspberry-pi/
https://www.raspberrypi.org/forums/viewforum.php?f=84
http://raspberrypi.ru/forum/
https://forum.antichat.ru/threads/424366/
http://forum.amperka.ru/
http://roboforum.ru/
http://forum-ru.codesys.com/index.php
http://www.owen.ru/forum/forum.php
https://forum.reverse4you.org/
https://telegram.me/r0crew_bot
https://t.me/R0_Crew
https://t.me/hwnrf
Полезные сайты для мастеров.




Как сделать простой веб-сайт за один час, часть 1

заглянуть
конфигурации сервера
Ставим LEMP
https://www.hostinger.com/tutorials/how-to-install-lemp-centos7
https://www.cloudjojo.com/how-to-install-nginx-mariadb-php-lemp-on-centos-7/
https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/

1) установка nginx
yum install epel-release -y
yum install nginx -y
systemctl start nginx
systemctl enable nginx

2) установка MySQL (MariaDB)
yum install mariadb-server mariadb -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
MariaDB запросит пароль root, так как это первоначальная установка, и у вас его нет, поэтому просто нажмите enter. Следующее приглашение спросит, хотите ли вы установить пароль root, введите Y и следуйте инструкциям

3) установка PHP v7.3
yum repolist
yum install yum-utils
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
curl -O http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
yum --enablerepo=remi,remi-php73 install php-fpm php-common



обновить php
yum-config-manager --disable remi-php73
yum-config-manager --enable remi-php74
yum update -y

4) настройка связки nginx + php
/etc/nginx/conf.d - каталог для запуска конфигураций, сюда добавляем символические ссылки
например: ln -s /etc/nginx/virt_host/default_php.conf /etc/nginx/conf.d/
/etc/nginx/virt_host - папка для хранения файлов конфигураций хостов (можно обозвать по другому)

в дебиановых
sites-available
каталог для хранения файлов хостов
sites-enabled
каталог, предоставляющий Nginx список хостов, которые нужно обслуживать

Добавление виртуальных хостов на nginx (очень доступно)
https://shneider-host.ru/blog/dobavlenie-virtualnyh-hostov-na-nginx.html
https://www.8host.com/blog/nastrojka-virtualnyx-xostov-nginx-v-centos-7/
https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-on-centos-7
NGINX - создание виртуальных хостов
Один конфиг Nginx для работы с кучей разных сайтов
Настройка NGINX для поддержки одного и нескольких сайтов WordPress
Несколько сайтов на nginx, один IP-адрес


mkdir /etc/nginx/virt_host
nano /etc/nginx/virt_host/default_php.conf



netstat -tulpn | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9084/php-fpm: maste

nano /etc/php-fpm.d/www.conf
Найдите и измените эти строки:

user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

5) проверяем
ln -s /etc/nginx/virt_host/default_php.conf /etc/nginx/conf.d/
nginx -t
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl restart php-fpm nginx

https://nginxconfig.io/
https://www.nginx.com/resources/wiki/start/
https://docs.joomla.org/Nginx
https://www.nginx.com/resources/wiki/start/topics/recipes/yii/
https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
https://wordpress.org/support/article/create-a-network/
Как создать самоподписанный сертификат SSL для Nginx на CentOS 7
Настройка nginx для работы с сертификатами ГОСТ 2012 года
Как добавить модуль gzip в Nginx на CentOS 7
-----------------------------------------------------------------------------------
Документация Основы Веб-программирования WSGI (pep-333)
Развертывание приложения Python WSGI с помощью uWSGI+NGINX
Настройка uWSGI и NGINX для обслуживания приложений Python в Ubuntu 14.04
веб-интерфейс для python в ubuntu используя nginx и uwsgi
Как избежать 10 частых ошибок в настройке NGINX

Как завершить TLS-соединение в Nginx
Настройка LEMP-сервера с помощью Ansible для простых проектов. Часть первая: знакомство с Ansible
Настройка LEMP-сервера с помощью Ansible для простых проектов: практический курс. Часть первая
-----------------------------------------------------------------------------------
Динамические виртуальные хосты (dynamic vhost) в nginx
нужно для того, чтобы каждый раз при добавлении домена, не было нужды редактировать файл конфигурации. Достаточно один раз настроить, добавить\обновить DNS запись и добавить директорию на сервер.



проверять наличие директории, и если такой нет - показывать 404 ошибку:



Если необходимо только для поддоменов то:



вместо 404 ошибки можно сделать перенаправление (редирект, если будет угодно) на основной:



универсальный вариант для доменов и поддоменов:



Редирект с www на без www Nginx
Редирект с http на https Nginx


обратный прокси (доступ к ресурсу за nat)
nginx настраивается как тут добавляется файл server233_reverse.conf в /etc/nginx/virt_host, а символическая ссылка с него - в /etc/nginx/conf.d/




sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8888/tcp --permanent
sudo firewall-cmd --zone=external --add-port=28080/tcp --permanent
sudo firewall-cmd --zone=external --add-port=28888/tcp --permanent
sudo firewall-cmd --reload


появится доступ из внутренней сети по порту 8080, из наружной по порту 28080, к сайту на сервере 233, находящемся на порту 8080, с 8888 портом, на котором висит другой сайт - аналогично

Решение с помощью firewall-cmd
https://www.dmosk.ru/miniinstruktions.php?mini=router-centos
перенаправление сетевых запросов на сервер, стоящий за NAT и не имеющий прямого выхода во внешнюю сеть.

firewall-cmd --zone=external --permanent --add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15

* где 25 — прослушиваемый внешний порт, для которого сработает перенаправление; tcp — используемый транспортный протокол; 8025 — на какой порт перенаправить запрос; 192.168.0.15 — IP-адрес сервера, на который отправляем запросы.

Разрешаем сам порт:
firewall-cmd --permanent --zone=external --add-port=25/tcp

Чтобы правило вступило в силу:
firewall-cmd --reload

установка squid с доступом по группам в AD, squidGuard, lighttpd+lightsquid, sams2 в centos часть 1
установка squid с доступом по группам в AD, squidGuard, lighttpd+lightsquid, sams2 в centos часть 2

https://nginx.org/ru/docs/http/ngx_http_proxy_module.html
https://www.scaleway.com/en/docs/how-to-configure-nginx-reverse-proxy/
https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
https://nginx.org/ru/docs/http/ngx_http_proxy_module.html
Настройка обратного прокси Nginx на Linux
Проксирование запросов в nginx с помощью proxy_pass
Nginx как обратный прокси на Docker
Проксирование запросов в nginx с помощью proxy_pass
Разбираемся в HTTP прокси NGINX, балансировке нагрузки, буферизации и кешировании
Виртуальные хосты на nginx (CSC309)

Примеры редиректов в NGINX

Настройка Nginx для использования в качестве веб-сервера и обратного прокси-сервера для Apache в One Ubuntu 18.04 Server

https://docs.nginx.com/nginx/deployment-guides/load-balance-third-party/microsoft-exchange/
Настройка NGINX для проксирования почты
СКРЫВАЕМ ЧАСТЬ РЕСУРСОВ IIS СРЕДСТВАМИ NGINX AS REVERSE PROXY (CENTOS 7)
Обратный прокси на Nginx

http://nginx.org/en/docs/http/load_balancing.html

https://wiki.squid-cache.org/SquidFaq/ReverseProxy
Reverse proxy from nginx to squid?
Требуется связка: client <-> nginx <-> squid <-> site.
Обратный прокси от nginx до squid

взаимодействие с CGI
Configure Perl-FastCGI on CentOS 7 Nginx Server
https://www.nginx.com/resources/wiki/start/topics/examples/fcgiwrap/
http://nginx.org/ru/docs/http/ngx_http_fastcgi_module.html
настройка nginx+perl
https://www.linode.com/docs/web-servers/nginx/nginx-and-perlfastcgi-on-centos-5/

sudo yum install spawn-fcgi fcgiwrap

nano /etc/nginx/virt_host/default_perl.conf



ln -s /etc/nginx/virt_host/default_perl.conf /etc/nginx/conf.d/

nano /etc/sysconfig/spawn-fcgi




nano /var/www/default_perl/index.pl




systemctl enable --now spawn-fcgi


NGINX Unit
http://unit.nginx.org/
https://github.com/nginx/unit
http://hg.nginx.org/unit
https://hub.docker.com/r/nginx/unit/
https://github.com/miholeus/nginx-unit-python

Remi's RPM repository PHP with the NGINX unit application server

1. Official repository installation


2. Remi repository installation


3. Server and modules installation


4. Test configuration
4.1 Preparation
curl -O https://blog.remirepo.net/public/unit.config


4.2 Run the service:
# systemctl start unit

4.3 Configuration
Configuration is managed through a REST API:

# curl -X PUT --data-binary @unit.config --unix-socket /var/run/unit/control.sock http://localhost/config

And to check running configuration:
# curl --unix-socket /var/run/unit/control.sock http://localhost/config

5 Usage
You can access the application on each new port:

http://localhost:8300/ for default PHP
http://localhost:8356/ for PHP version 5.6
http://localhost:8372/ for PHP version 7.2
etc


https://unit.nginx.org/configuration/
Nginx Unit Веб. Мысли вслух
Установка NGINX + PHP7 последних версий
Nginx Unit + Django + Virtualenv - Конфигурация
Установка WordPress с модулем NGINX
Installing WordPress with NGINX Unit - NGINX
HOW TO INSTALL NGINX UNIT ON LINUX
NGINX Unit – Application Server from Nginx
Nginx Unit + Bitrix настройка
Настройка NGINX Unit под PHP


phpmyadmin
https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubuntu-20-04-ru
https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-with-nginx-on-an-ubuntu-18-04-server
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04-ru
https://howitmake.ru/blog/ubuntu/93.html

apt install nginx mysql-server
apt install php-fpm php-mysql
mysql_secure_installation
apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

vim /etc/php/7.4/fpm/php.ini


ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

/etc/nginx/sites-available/phpmyadmin


vim /var/www/html/info.php
<?php phpinfo() ?>

/etc/nginx/sites-available/default_php


cd /etc/nginx/sites-available/
ln -s ../sites-available/phpmyadmin
ln -s ../sites-available/default_php

nginx -t
systemctl reload nginx
service nginx restart

если
1044 - Для пользователя 'phpmyadmin'@'localhost' доступ к базе данных 'baza' закрыт

https://losst.ru/ustanovka-phpmyadmin-s-nginx-v-ubuntu-20-04
sudo mysql -u root -p
После ввода пароля root пользователя MySQL, введите следующие команды:
CREATE USER 'test'@'localhost' IDENTIFIED BY 'пароль';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'localhost';
FLUSH PRIVILEGES;


lighttpd
https://wiki.archlinux.org/index.php/Lighttpd_(Русский)#Виртуальные_хосты
https://lorwiki.org.ru/wiki/Lighttpd
Веб-сервер Lighttpd - настраиваем виртуальные хосты.
Веб-сервер Lighttpd - включаем поддержку SSL.
Создание виртуальных хостов с mod_mysql vhost в Lighttpd на Ubuntu
lighttpd в качестве обратного прокси
https://wiki.archlinux.org/index.php/Lighttpd_(Русский)#Lighttpd_как_reverse_proxy_для_отдачи_статики
https://stackoverflow.com/questions/4859956/lighttpd-as-reverse-proxy
Обязательный пакет

server.modules = (
...
"mod_proxy",
...
)
Настройка вашего внешнего прокси: для lighttpd.conf @ 192.168.1.10

$HTTP["url"] =~ "^.*DeviceB" {
proxy.server = ( "" =>
(( "host" => "192.168.1.20", "port" => 80 ))
)
}

$HTTP["url"] =~ "^.*DeviceC" {
proxy.server = ( "" =>
(( "host" => "192.168.1.30", "port" => 80 ))
)
}
Для полной документации по lighttpd mod_proxy, вы можете обратиться к http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxy

LAMP
http://www.apache.org/
https://downloads.apache.org/
https://projects.apache.org/releases.html
https://www.apachelounge.com/download/
https://help.ubuntu.ru/wiki/apache2
Большой Мануал по настройке lamp-сервера на Debian: Часть 0.
Установка и настройка сервера Apache на ubuntu
Установка веб-сервера Apache в CentOS 7
Настройка web сервера в CentOS 7
Веб-сервер Apache: установка, настройка и способы защиты от атак
Разработка сайтов на домашней машине с Fedora
Установка phpmyadmin на CentOS 7
Настройка Apache + SSL для работы сайта по HTTPS
Установка Apache HTTP Server 2.2.22 на Windows
Установка Apache и PHP на Windows

https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html
How to Configure Apache HTTPS Reverse Proxy on CentOS Linux
Настройка mod_proxy в Apache
How To Use Apache HTTP Server As Reverse-Proxy Using mod_proxy Extension
How To Use Apache as a Reverse Proxy with mod_proxy on CentOS 7
Как использовать Apache в качестве обратного прокси с mod_proxy на CentOS 7
Как использовать Apache в качестве обратного прокси при помощи mod_proxy на Ubuntu 16.04
Настройка Reverse Proxy Apache (Debian 8) с автоматической выдачей Let's Encrypt
Using Let's Encrypt and Docker for Automatic SSL
Apache2 als Reverse Proxy für Exchange 2010 2013 2016 2019 inklusive Outlook Anywhere RPC over http
Настройка Apache Reverse Proxy для MS Exchange 2010, 2013, 2016 (Debian 8 Jessie/Ubuntu 14.04 Trusty Tahr)

HAProxy
Разбираем методы проксирования на основе HAProxy
Как установить и настроить HAproxy в Ubuntu 20.04 LTS

Самостоятельная настройка VDS / VPS

https://2ton.com.au/standalone_binaries/rwasa
https://github.com/caddyserver/caddy

https://letsencrypt.org/
https://whatsmychaincert.com/
Настройка HTTPS с сертификатами Let’s Encrypt

https://www.acme.com/software/thttpd/
thttpd -D -h 0.0.0.0 -p 3000 -d /static-website -u static-user -l - -M 60
https://redbean.dev/

Настройка Linux для высоконагруженных проектов и защиты от DDoS

5 способов создать мгновенный легкий веб-сервер с помощью командной строки Linux

использование docker
docker команды
centos docker yii
подборка по виртуализации и облакам
Опыт разработки высоконагруженной системы в рамках HighLoad Cup
Разработка под Docker. Локальное окружение. Часть 1
Разработка под Docker. Локальное окружение. Часть 2 — Nginx+PHP+MySql+phpMyAdmin
Готовим локальную среду Docker для разработки на PHP
https://github.com/PHPtoday-ru/docker-local-conf
https://hub.docker.com/_/scratch
Как поднять сайт в Docker
Настройка веб-сервера в Docker (NGINX + PHP + MariaDB)
Используем Docker для развертывания web-приложения bitrix
Настройка LEMP сервера с помощью docker для простых проектов. Часть первая: База
https://github.com/lipanski/docker-static-website
60+ Best Docker Containers for Home Server Beginners 2023
Docker Media Server Ubuntu 22.04 with 23 Awesome Apps
https://github.com/htpcBeginner/docker-traefik

управлялки
https://www.webmin.com/
https://cockpit-project.org/
http://vestacp.com/
https://ajenti.org/
https://www.rundeck.com/open-source

контент
RSS
https://freshrss.org/
https://tt-rss.org/
https://github.com/fossar/selfoss
https://github.com/samuelclay/NewsBlur
https://github.com/feedhq/feedhq
https://miniflux.app/

https://github.com/DIYgod/RSSHub
https://github.com/RSS-Bridge/rss-bridge
https://github.com/suin/php-rss-writer/
https://bitbucket.org/fivefilters/full-text-rss/src/master/
https://github.com/Kombustor/rss-fulltext-proxy
https://github.com/goutsune/unko
https://rssbox.herokuapp.com/

Обзор RSS-ридеров — self-hosted альтернативы Google Reader
Почему я по-прежнему пользуюсь RSS
Что такое RSS-лента и как ее создать

аудио
https://www.musicpd.org/clients/
https://github.com/notandy/ympd
https://github.com/YaLiC/mpcwebshell
https://github.com/swingmx/swingmusic
https://github.com/ampache/ampache

список сетевых служб и веб-приложений свободного ПО , которые можно разместить на вашем сервере
https://github.com/awesome-selfhosted/awesome-selfhosted

Трансляция потока с веб-камеры с помощью ffserver
Потоковое видео средствами ffserver & ffmpeg
Запускаем DOS игру в браузере
https://dos.zone/studio/
Пишем онлайн-тренажёр для Python, C++ и Go: опыт Практикума
установка Django в virtualenv с помощью pip через proxy с pyenv
https://jupyter.org/
Запускаем Jupyter на орбиту LXD
Установка GitLab совместно с уже работающим Nginx
Рабочий стол Linux в браузере
https://github.com/navidrome/navidrome
https://www.navidrome.org/docs/installation/linux/
https://browsix.org/
https://github.com/plasma-umass/browsix
https://github.com/yudai/gotty
https://github.com/os-js/OS.js
https://github.com/os-js/osjs-server
https://xtermjs.org/
https://bun.sh/blog/the-bun-shell
https://github.com/butlerx/wetty
https://chromium.googlesource.com/apps/libapps/+/master/hterm/
https://chromium.googlesource.com/apps/libapps/+/master/nassh/
https://github.com/DustinBrett/daedalOS

https://github.com/paradoxxxzero/butterfly
https://github.com/BlackArch/webshells
https://github.com/epinna/weevely3

Matrix: децентрализованные открытые мессенджеры с E2E-шифрованием. Обзор возможностей и настройка своего сервера
https://github.com/element-hq/dendrite

https://github.com/conversejs/converse.js
https://open-store.io/app/conversejs.luigi311

https://github.com/digitalblossom/alternative-frontends

Безопасный HTTPS-прокси менее чем за 10 минут
https://freemyip.com/
https://github.com/SenseUnit/dumbproxy

https://webvm.io/
https://github.com/leaningtech/webvm
Запуск WebVM локально с помощью пользовательского образа Debian

Cloud Commander – веб файловый менеджер для управления файлами и программами Linux через браузер

HTML код для получения видео с камеры, сохранить этот код в файл с расширением .htm и открыть веб-браузером.




Решение проблем неправильной кодировкой веб-страницы
Защита контента веб-сайта
Сетевой pivoting: понятие, примеры, техники, инструменты
75 фактов, которые полезно знать перед тем, как выложить сайт
криптомайнер на основе JavaScript
https://doka.guide/


публикация
https://localtunnel.github.io/www/
https://ngrok.com/
Как без белого IP локальный веб-сервер сделать доступным из Интернета
https://github.com/samyk/pwnat

домен DNS DDNS
домен
https://www.freenom.com/
https://gen.xyz/
https://ru.hostings.info/domen-xyz
https://ru.tld-list.com/tld/xyz
https://codd-wd.ru/fwd/domains/
https://atex.ru/
https://sweb.ru/
https://freedns.afraid.org/

Свои DDNS (Dynamic DNS) сервер и клиент на базе Debian
Настройка DynDNS на Debian


SSL
https://zerossl.com/
https://letsencrypt.org/
сертификат
cert.мой_сайт.xyz
https://github.com/acmesh-official/acme.sh
Acme.sh + Ansible + Alias mode: Автоматизируем получение и распространение TLS сертификатов
Начало работы с acme.sh и клиентом Let’s Encrypt SSL
Сертификаты Let's Encrypt Установка и автоматизация с помощью acme-tiny
Как установить бесплатный сертификат Let’s Encrypt и настроить автоматический перевыпуск
Получение бесплатного SSL сертификата Let's Encrypt
Получаем сертификаты Let's Encrypt при помощи Certbot
Let's Encrypt: получение сертификата по шагам
Создание самоподписанного SSL-сертификата для Apache в Debian 10
Настройка Apache + SSL для работы сайта по HTTPS
Создание самоподписанного SSL-сертификата
Создание самоподписанного SSL-сертификата
https://www.altlinux.org/Создание_самоподписанных_сертификатов
OpenSSL: принципы работы, создание сертификатов, аудит
быстро выпустить свой сертификат через свой CA, добавив его к себе в доверенные
центр сертификации от компании SmallStep
https://github.com/smallstep/certificates

примеры создания самоподписанного серификата



certificate.crt — сам сертификат;
privateKey.key — файл ключа.

Файлы ключа и сертификата будут размещены в каталоге, указанном при вызове команды openssl в параметрах keyout и out.
При использовании OpenSSL необходимо также создать ключи Диффи-Хеллмана, чтобы
сгенерировать ключи Диффи-Хеллмана длиной 4096 бит и сохранить их в файл /etc/nginx/dhparam.pem:
нужно вбить команду




Преобразуйте файл сертификата в доверенный сертификат формата DER для импорта в браузер. Для этого выполните команду:



Импортируйте файл bump.der в список доверенных корневых центров сертификации на компьютерах пользователей.
При использовании некоторых браузеров (например, Mozilla Firefox) требуется также добавить сертификат в хранилище браузера.

создание самоподписанного сертификата на примере настойки openvpn
Как сделать и настроить собственный VPN




vps
Список сетей VPS/выделенных серверов, подвергающихся цензуре в России
https://poiskvps.ru/
https://vds.menu/
https://vps.today/

https://github.com/lesichkovm/awesome-vps-price-breakdown
https://www.oracle.com/cloud/free/
?
https://cybernews.com/best-web-hosting/free-vps-hosting/
https://www.ionos.com/servers/vps
https://www.digitalocean.com/
https://www.vultr.com/products/cloud-compute/
http://lowendstock.com/deals/
https://haphost.com/vps-hosting/
https://www.cloudatcost.com/

?
https://justhost.asia/
https://justhost.ru/
https://hshp.host/
https://ztv.su/
https://eurobyte.ru/
https://beget.com/
https://ihor.online/
https://62yun.ru/
https://ruweb.net/
https://weasel.cloud/
https://nuxt.cloud/
https://hip.hosting/
https://pq.hosting/
https://mchost.ru/
https://hostkey.ru/vps/
https://cp.inferno.name/
https://fornex.com/
https://firstbyte.ru/
https://aeza.net/ru
https://ishosting.com/
https://timeweb.cloud/
https://serverspace.ru/
https://www.ihc.ru/
https://firstvds.ru/
https://handyhost.ru/
https://www.majordomo.ru/
https://www.ipserver.su/
https://vds.sh/
https://4vps.su/

?
https://bitlaunch.io/

https://vpswala.org/cart/index.php?rp=/store/web-hosting
https://www.gigarocket.net/free-vps.php

Oracle раздает бесплатные VPS навсегда
Бесплатный VPS от Google навсегда
Регистрируем бесплатный (Always Free) VPS - сервер от Oracle навсегда, для сервисов Умного дома или чего-то другого.
Как получить бесплатный VPS (VDS) сервер навсегда

VPN на своём сервере с IP адресом из США за 1$ в месяц⁠⁠

проверить месторасположение vps
https://www.myip.com/
https://whatismycountry.com/



Как сделать простой веб-сайт за один час, часть 2

заглянуть
Как сделать простой веб-сайт за один час с помощью Github
От переводчика: инструкция максимально простая, зато на неё можно ссылаться, если новички задают вопрос, как запустить свой сайт в интернете.


Один из моих друзей пару месяцев твердил, что сделает сайт на весенних каникулах. Сейчас каникулы заканчиваются, а он так и не начал. Завтра его день рождения, и я решил как мудак хороший друг сделать ему подарок: написать пошаговую и максимально простую инструкцию.



В реальности, достаточно всего одного часа, чтобы сделать веб-сайт. Я это знаю, потому что засёк время, когда сам выполнял нижеследующие действия, и весь процесс занял чуть меньше часа (я даже зарегистрировал новый домен и создал новый аккаунт на Github для чистоты эксперимента). Код этого сайта тоже можно посмотреть на Github.



1. Идёте на namecheap.com и регистрируете домен. Этот шаг только в том случае, если нужно собственное доменное имя.



2. Создаёте аккаунт Github и скачиваете Git, если это ещё не сделано.



3. Создаёте директорию для размещения веб-сайта и перемещатесь туда командой cd: это команды mkdir my-site && cd my-site. Все будущие команды предполагают, что вы внутри рабочей директории.



4. Делаем новый репозиторий Github для сайта под названием yourusername.github.io. Например, я зарегистрирован под именем smilli, так что мой репозиторий называется smilli.github.io.



5. В рабочей директории запускаем git init и git remote add origin github.com/username/username.github.io.git, где вместо ‘username’ указываем свой имя пользователя.



6. Создаём файл ‘index.html’ в папке с сайтом с HTML-кодом главной страницы. Здесь необязательно тратить много времени, он может быть весьма лаконичным.



<html>
<head>
  <title>YOUR SITE TITLE</title>
  <-- Add some style to your site, see http://getbootstrap.com for details -->
  <link rel="stylesheet"
  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
</head>
<body>
  <h1>YOUR SITE TITLE</h1>
  <p>Your text blahblahbhalbha</p>
  <p>Another paragraph!  Maybe more text!</p>
</body>
</html>


7. Пишем в коде главной страницы любой текст. Изменения отображаются локально командой python -m SimpleHTTPServer 8000 и набором адреса localhost:8000 в браузере.



8. Теперь запускаем следующие команды:

git add .
git commit -m "Initial commit"
git push -u origin master


9. Идём на yourusername.github.io. Здесь вы должны увидеть свой сайт! Поздравляю, вы что-то опубликовали в онлайне.



10. Если хотите собственное доменное имя, создаёте файл ‘CNAME’ (всё прописными буквами). Туда добавляете одну строчку ‘'yourdomainname.com' (без http или www). См. подробности конфигурации CNAME здесь.



11. Как и раньше, отправляем все изменения на Github.



git add .
git commit -m "Add CNAME"
git push


12. Теперь авторизуетесь на namecheap.com и щёлкаете по доменному имени, которое нужно, в списке своих доменов. Список будет примерно таким:







После выбора домена, появится ссылка «All Host Records» в левой панели во вкладке «Host Management». Нажмите на неё. Теперь вы увидите настройки по умолчанию, которые Namecheap указал для вашего сайта.







Измените настройки следующим образом (заменив ‘username’ на своё имя пользователя, конечно).







13. После вступления в действие изменений в DNS вы сможете увидеть свой сайт на своём домене! Поздравляю. :)

кратко сайт на Github
https://help.github.com/en/articles/about-supported-custom-domains
https://htmlacademy.ru/blog/99-github-as-hosting
https://ru.hexlet.io/courses/html/lessons/github/theory_unit


  1. Зарегистрируйтесь на https://github.com/, если еще не сделали этого.

  2. Создайте новый репозиторий с именем username.github.io, где username — ваш ник на Github.

  3. Создайте новый файл. Когда репозиторий не пуст, то в верхнем правом углу есть кнопка Create New File, но сейчас, когда еще нет ни одного файла, создать первый можно по прямой ссылке https://github.com/username/username.github.io/new/master, где username — ваш ник.

  4. Введите имя index.html и скопируйте туда содержание файла index.html, который у вас получился в предыдущем уроке.

  5. Нажмите кнопку "Commit new file".

  6. Повторите то же самое для файла style.css.

  7. Через несколько мгновений страница станет доступна по вашему адресу https://username.github.io

сайт на Node.js
Как запустить простой статический сайт за пять ≈пятиминутных шагов при помощи Node.js и Express

Шаг 1. Установить движок Node.js в соответствии с инструкциями, имеющимися в вики для каждой из поддерживаемых операционных систем. (Для Windows достаточно скачать и запустить MSI-файл, для CentOS — воспользоваться системным менеджером пакетов, и так далее.)

Шаг 2. Создать пустой каталог и поместить в нём файл «site.js» следующего содержания:



Настройки staticSiteOptions можно переменить по собственному вкусу.

Шаг 3. В том же каталоге подать команду «npm install express», которая автоматически создаст подкаталог «node_modules» и установит туда Express, скачав из Интернета.

Шаг 4. В том же каталоге создать подкаталог «static» и поместить в нём файлы статического сайта. Этот подкаталог станет корнем сайта. Файлы с именами «index.html» будут использоваться как файлы-индексы. Иными словами, при ответе сервера на запрос с адресом, содержащим только имя некоторого каталога (будь то корень сайта или один из его подкаталогов), будет показан файл с именем «index.html» из указанного каталога (если есть).

Шаг 5. В том же каталоге подать команду «node site», которая запустит сервер. Убедившись в её работоспособности, обеспечить автозапуск этой команды в этом каталоге после каждой перезагрузки операционной системы. (Например, на CentOS 6.2 можно использовать upstart для этой цели.)

https://github.com/vercel/next.js
https://github.com/visnup/npm-www
https://github.com/ceejbot/npm-www
https://github.com/ErikHumphrey/Next


работа с nodejs
Установка Node.js с помощью NVM
Шпаргалка по пакетному менеджеру NPM
Автозапуск приложения Node.js на CentOS 6.2

конструкторы статических сайтов
https://gohugo.io/
https://github.com/gohugoio/hugo
https://jekyllrb.com/
https://github.com/jekyll/jekyll
https://github.com/jekyll/jekyll-sitemap
https://github.com/planetjekyll/awesome-jekyll-plugins
https://guides.hexlet.io/jekyll/
Создаем блог используя Jekyll и GitHub Pages

https://glitch.com/
https://neocities.org/ (замена narod.ru)
https://github.com/neocities
https://app.netlify.com/drop
https://pages.github.com/

https://john-doe.neocities.org/ (веб-сайт представляет собой один HTML - файл)
https://j3s.sh/thought/my-website-is-one-binary.html
однофайловый распространяемый веб-сервер
https://github.com/lipanski/docker-static-website

https://docs.parseplatform.org/parse-server/guide/

разные CMS
https://www.host-food.ru/faq/installation/

https://www.drupal.org/download
https://www.drupal.org/project/drupal
https://ru.wordpress.org/download/
https://downloads.joomla.org/
https://modx.com/download
https://get.typo3.org/
https://www.php-fusion.co.uk/home.php
https://www.django-cms.org/en/
https://plone.org/
https://www.opencart.com/index.php?route=cms/download
https://magento.com/tech-resources/download
https://www.prestashop.com/en/download
https://www.bitrix24.ru/
https://contao.org/en/
https://strapi.io/
https://apostrophecms.com/
https://github.com/getgrav/grav

LJ
https://github.com/dreamwidth/livejournal
DW
https://github.com/dreamwidth/dreamwidth

Как создать сайт с помощью ChatGPT (руководство 2025 г.)

установка
установка LEMP

Веб-сервер на основе Nginx и PHP-FPM
Оптимальная настройка Nginx
Виртуальные хосты в Apache и Nginx

Установка стека LEMP в Ubuntu 18.04
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04
Настройка сервера Linux Nginx, PHP 7, MySQL (LEMP) с поддержкой сертификата Let’s Encrypt в Ubuntu Linux 18.04 Bionic
https://www.digitalocean.com/community/tutorials/nginx-ubuntu-18-04-ru
Руководство по настройке блога WordPress на nginx.

Drupal
https://help.ubuntu.ru/wiki/drupal
Перед началом использования создайте для Drupal базу данных с помощью клиента mysql:
mysql -u root -p -e "CREATE DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;"
Также желательно завести отдельного пользователя MySQL, который будет иметь доступ только к созданной базе:
mysql -u root -p
вводим там запросы:





MySQL: Полный список часто используемых и полезных команд
посмотреть всех пользователей
SELECT User, Host FROM mysql.user;
SELECT User, Host, Password, password_expired FROM mysql.user;
увидеть разрешения для пользователя
SHOW GRANTS FOR 'test'@'localhost'
отзыв всех разрешений
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test'@'localhost'
удалить пользователя test
drop user 'test'@'localhost'
SHOW DATABASES;
удалить базу
DROP DATABASE имя_базы_даных;

«Could not load MODX config file»
/setup/index.php

http://создаю-сайты.рф/как-войти-на-сайт-в-качестве-администр/
https://2ip.ru/cms/
chrome Wappalyzer



разные фреймворки
JavaScript подборка
Установка Node.js с помощью NVM
Шпаргалка по пакетному менеджеру NPM
---------------------------------------------------------------------------------------
Python подборка
Django подборка
если покопаться, то можно сделать бесплатный сайт на django

Установка Django CMS в Ubuntu 16.04 64bit
Ленивый деплой Django проекта UWSGI + NGINX (UBUNTU 20.04)
How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 20.04
Запуск Django сайта на nginx + Gunicorn + SSL
Настройка Debian, Nginx и Gunicorn для Django проекта

установка Django в virtualenv с помощью pip через proxy с pyenv

Pelican: установка и базовая настройка сайта
Pelican. Расширенные настройки блога.
---------------------------------------------------------------------------------------
PHP подборка
https://www.yiiframework.com/
https://www.yiiframework.com/doc/guide/2.0/ru
https://github.com/yiisoft/yii2/tree/master/docs/guide-ru
centos docker yii

https://symfony.com/
https://laravel.com/
https://phalcon.io/ru-ru
https://nette.org/en/
---------------------------------------------------------------------------------------
https://rubyonrails.org/
http://rusrails.ru/
https://ru.wikibooks.org/wiki/Ruby_on_Rails
---------------------------------------------------------------------------------------
https://www.phoenixframework.org/
Начни изучать Elixir прямо сейчас! Перевод всей серии статей готов
Разработка приложений на Elixir/Phoenix с помощью Docker
---------------------------------------------------------------------------------------
http://zotonic.com/
---------------------------------------------------------------------------------------
Golang подборка
Revel — высокопроизводительный веб-фреймворк на языке Go

Разработка Web-приложений и микросервисов на Go с Gin
https://github.com/gin-gonic/gin

https://gobuffalo.io/
https://beego.me/

Как развернуть веб-приложение Go с помощью Docker и Nginx в Ubuntu 18.04

---------------------------------------------------------------------------------------
Java подборка
https://spring.io/
http://javastudy.ru/frameworks/spring/
https://javaee.github.io/javaserverfaces-spec/
http://javastudy.ru/frameworks/jsf-2-0/
https://vaadin.com/
http://www.gwtproject.org/
https://grails.org/
---------------------------------------------------------------------------------------
подборка С/C++
https://www.gnu.org/software/cgicc/index.html
https://github.com/drogonframework/drogon
https://www.webtoolkit.eu/wt
https://cutelyst.org/
Создание сайта с помощью C++
Сайт на C++ своими руками с помощью библиотеки cgicc
Простой backend на C++: это возможно?
Полноценный веб-сайт на C++ и немного диванной аналитики

всячина
Создаём личный «Архив интернета»
https://archiveweb.page/
------------------------------------------------------------------------
https://www.adminer.org/
https://phpdocker.io/generator
https://nginxconfig.io
https://github.com/digitalocean/nginxconfig.io

https://ngrok.com/download

------------------------------------------------------------------------
https://www.selenium.dev/
https://www.cypress.io/
https://playwright.dev/
https://nightwatchjs.org/
https://www.npmjs.com/package/puppeteer
JavaScript, Node, Puppeteer: автоматизация Chrome и веб-скрапинг
------------------------------------------------------------------------
Возрождение простых сайтов. Статика, 0kB JS, ничего лишнего
------------------------------------------------------------------------
Не ходи в Fediverse, там тебя ждут неприятности. — Ну как же туда не ходить? Они же ждут
https://fediverse.party/
https://the-federation.info/
https://joinmastodon.org/
https://github.com/mastodon/mastodon
https://hubzilla.org/
https://framagit.org/hubzilla/core
https://www.gnusocial.rocks/
https://notabug.org/diogo/gnu-social
------------------------------------------------------------------------
Как взламывают сайты
Как взламывают сайты (часть 2)
------------------------------------------------------------------------
хитрости
Некоторые приёмы работы в Битрикс на SQL и BASH
Как восстановить пароль администратора Битрикс
Как сбросить пароль для пользователей Bitrix?

ссылки

https://github.com/ripienaar/free-for-dev

Как сделать простой веб-сайт за один час
Как запустить простой статический сайт за пять ≈пятиминутных шагов при помощи Node.js и Express
Создаем свой персональный сайт на Github
GitHub как хостинг для сайтов
Создаем свой блог на Github и Hugo
http://webquant.ru/posts/pelican/

Самостоятельная настройка VDS / VPS
Как начать участвовать в Open Source
Работа с GitHub
http://git-scm.com/book/ru/v1
http://hosting101.ru/more-providers.html

http://hldns.ru/
https://github.com/wavedocs/freedns/
Список бесплатных DNS-сервисов

Расшариваем веб-сайт на localhost в глобальную сеть интернет.
5 способов создать мгновенный легкий веб-сервер с помощью командной строки Linux
uzverss Бесплатный django хостинг
установка dokuwiki centos php nginx




Python подборка, часть 1
Python подборка, часть 2

развернуть
https://www.lektorium.tv/course/22895
http://pyvideo.ru/
http://pep8.ru/video/
http://devfreecasts.org/python/
https://www.youtube.com/results?search_query=Python
https://www.youtube.com/results?search_query=Программирование+на+python
https://vk.com/videos-54530371?q=python§ion=search
------------------------------------------------------------------------
loftblog Основы Python
https://www.youtube.com/playlist?list=PLY4rE9dstrJwmHGhM-IA98GZf6I--4hKi
Igor Danilov Python
https://www.youtube.com/playlist?list=PLxIsrZhloP2x1Rq5isjAWvp1F0W0YcQae
IT Hobbies Python tutorials Оконное приложение на Python c Tkinter
https://www.youtube.com/playlist?list=PL4sJ_PtqW49CVVyZEkniNFBTazcdOkv2M
Гоша Дударь Python программирование / Уроки для начинающих
https://itproger.com/course/python
https://www.youtube.com/playlist?list=PL0lO_mIqDDFXgfuxOEDTCwsWmKezOaDTu
------------------------------------------------------------------------
Максим Быстрянцев Python для детей
https://www.youtube.com/playlist?list=PLZV589BVrI-40O-d-PNcBt-c4gdmRVxrx
Максим Быстрянцев python олимп
https://www.youtube.com/playlist?list=PLZV589BVrI-7fmn-D6K7rjrtQOfGFvxkB
------------------------------------------------------------------------
ProgrammingHub Python для начинающих
https://www.youtube.com/playlist?list=PLPRsICSqu9FqVjZaRnpPwShaMyFhmOIk0
ProgrammingHub Python API Tutorial
https://www.youtube.com/playlist?list=PLPRsICSqu9Fp8v5Os1UU8QcSuRaN5efGf
ProgrammingHub Python OOP (Объектно Ориентированное Программирование)
https://www.youtube.com/playlist?list=PLPRsICSqu9ForcHr2p_r_NmoCzVBivVIq
ProgrammingHub Виртуальное окружение Python
https://www.youtube.com/playlist?list=PLPRsICSqu9Fo01tAB6obZVcHyKbNGdmky
ProgrammingHub Python + Flask web framework
https://www.youtube.com/playlist?list=PLPRsICSqu9FqiH15mDTCiyUys_cFaVz-I
------------------------------------------------------------------------
ADV-IT Python для Начинающих
https://www.youtube.com/playlist?list=PLg5SS_4L6LYtHCActBzbuGVYlWpLYqXC6
ADV-IT Python для НЕ Начинающих
https://www.youtube.com/playlist?list=PLg5SS_4L6LYt7Wmh8zBKjZ_ltaoDXSEmk
------------------------------------------------------------------------
Тимур Юнусов | Валерия Юрьевна Евдокимова | [Foxford] Язык Python для начинающих, 6–8 классы [2015]
https://www.youtube.com/playlist?list=PLlpeNvMw3g6fe5ucvATefStgfBVkWDN7H
CG Ninjas | Воркшопы о компьютерной графике Python Base
https://www.youtube.com/playlist?list=PLfPOtOI0SRrWSZlScnyeveO6jA4Rli9I8
Susan Ibach and Christopher Harrison Уроки Python
https://www.youtube.com/channel/UCsSQgz9oCdVyvZ-bViMj4_g
Уроки Python Введение в программирование на языке Python
https://www.youtube.com/playlist?list=PLQDKSpN49uZYknWOWmjwjwHFCXkd6PV0J
Хауди Хо™ - Просто о мире IT! Python Джедай [2016 год] По стандартам США!
https://www.youtube.com/playlist?list=PLvoBekrlHDgROfUUHMbrrdsy_b2y2V_rj
------------------------------------------------------------------------
Алексей Умнов | Академия Яндекса Компьютерные науки Курс "Язык Python"
https://vk.com/yandex.academy
https://www.youtube.com/playlist?list=PLJOzdkh8T5kpIBTG9mM2wVBjh-5OpdwBl
Александр Кошелев | Кирилл Борисов Академия Яндекса Компьютерные науки Python Party
https://www.youtube.com/playlist?list=PLQC2_0cDcSKATa--MQfwAnkvNWC8ypNKl
------------------------------------------------------------------------
Алексей Голобурдин,
Диджитализируй!
https://course.to.digital/
Что должен знать Python веб-разработчик для приёма на работу?
https://www.youtube.com/watch?v=9kLI6R0heTQ
Python разработка
https://www.youtube.com/playlist?list=PLAk6CfuV7hyooMRqhHAO9-Gt6kOQqM_-Y
Изучаем исходники Python библиотек
https://www.youtube.com/playlist?list=PLAk6CfuV7hyoIL0iJgOP0fPYfCXAV3lsC
Пишем ИТ продукт с нуля
https://www.youtube.com/playlist?list=PLAk6CfuV7hyr3eQOnWt8kAHZRPfb6P6zB
------------------------------------------------------------------------
Сергей Балакирев selfedu
https://proproprogs.ru/python
Уроки PYTHON для начинающих
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8xIdFNA95aQrwJ_GQJEV8ko
Добрый, добрый Python - уроки для начинающих
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yWHh2V70bTtbVxJICrnJHd
Объектно-ориентированное программирование (ООП) на
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8zPwP7t-FgwONhZOHt9rz9E
Python 3. Регулярные выражения
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8w8gtWzf9YkfAxFCgDb09pA
Уроки по wxPython (GUI)
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8zyJOJXbvTKROHs2JJVGB6C
Алгоритмы и структуры данных на Python
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yF0PO0eJ9v8VlsYEowmsnJ
Алгоритмы обработки сигналов на Python
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yZNgl5J814WQykTZnzj771
Нейронные сети на Python. Уроки
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8yv0XGiF1wjerjSZVSrYbjh
Tensorflow 2.x - уроки (для Python)
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8ynD1umfubKq1OBYRXhXkmH
Фракталы на python
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8ylFC3tve_AVXEttPBmKDqw
Структуры данных
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8x4jEp1r_aN3xlnlbfx9RQ2
Генетические алгоритмы. Теория и практика
https://www.youtube.com/playlist?list=PLA0M1Bcd0w8zkG8DJSyqrKyBfDtRJ2Ohh
------------------------------------------------------------------------
Илья Щуров| Python HSE
https://www.youtube.com/channel/UCr-KbmZWfDyTbqT_clZmhfw/feed
------------------------------------------------------------------------
WeBest Программирование на Python 3
https://www.youtube.com/playlist?list=PLfAlku7WMht6janxhS4D7XqajI7Knq1sS
WeBest Библиотека Tkinter Python 3
https://www.youtube.com/playlist?list=PLfAlku7WMht4Vm6ewLgdP9Ou8SCk4Zhar
------------------------------------------------------------------------
Yellow-Duck.net
https://www.youtube.com/channel/UCms3x1-QRmPMoKlA3Xpl8Zg/search?query=python
Yellow-Duck.net Python. Видеопримеры к курсам.
https://www.youtube.com/playlist?list=PL6LDsbZOeyrxrPfYl3Zh6pSBN1OOPMTjZ
Yellow-Duck.net Основы объектно-ориентированного програмирования
https://www.youtube.com/playlist?list=PL6LDsbZOeyrx462VmH18qS0a9Dw9LwpSu
------------------------------------------------------------------------
Чарльз Северенс | НОУ ИНТУИТ Введение в программирование на Python
http://www.intuit.ru/studies/courses/12179/1172/info
https://www.youtube.com/playlist?list=PLDrmKwRSNx7LSwH9FcFmWyHRr7W-UkbNT
------------------------------------------------------------------------
ИМКН УрФУ. Языки сценариев (Python) Подборка плейслистов
https://www.youtube.com/channel/UClQJvX1TXm0rXoxFtTczNog/playlists
https://www.youtube.com/channel/UClQJvX1TXm0rXoxFtTczNog
------------------------------------------------------------------------
Евгений Колтырин Python + PyGame. Создаём игры!
https://www.youtube.com/playlist?list=PLTteFr-DCrkQJm-QKnzQz-NyRTWzMse22
------------------------------------------------------------------------
ITGENIO Игры и проекты на Python
https://www.youtube.com/playlist?list=PL2_WTnP_CpnsnggVoFY9xK4wrhxwiezr7
------------------------------------------------------------------------
кузьма кузин Пишем игры на Python
https://www.youtube.com/playlist?list=PLk3dllNv0g25CVxcMx0ZqdMF-9jkeQNNY
кузьма кузин как создать сайт на Django Python
https://www.youtube.com/playlist?list=PLk3dllNv0g252fFKpiYeJaSRwEpBzhUcu
кузьма кузин Kivy - Python для Android
https://www.youtube.com/playlist?list=PLk3dllNv0g25LZNuptJZ8Bjj9gFIJ3McH
------------------------------------------------------------------------
IT Propaganda ЛП000 Ленивый питон - Программирование на Python
https://www.youtube.com/playlist?list=PLbKwBvrpogbZfU50rPMmXow3aMFjIw4gk
IT Propaganda ПК00 Питон на сайте Codecademy на русском языке
https://www.youtube.com/playlist?list=PLbKwBvrpogbaoy98U1HX0PlONUldxmGJF
IT Propaganda Питон на HackerRank
https://www.youtube.com/playlist?list=PLbKwBvrpogbZA3Cqmj4_1uv6JyJTDGIHt
------------------------------------------------------------------------
Павел Сутырин UNИX Python 2014 Спецкурс ВМК МГУ
https://www.youtube.com/playlist?list=PLPErILqzuTQr7QJ4rAFJVvzdTEFFPjaGz
Павел Сутырин UNИX Python-Dev 2015 Спецкурс ВМК МГУ
https://www.youtube.com/playlist?list=PLPErILqzuTQqXEIjjN6gwFzV1yRuwReR0
------------------------------------------------------------------------
[UNИX] Язык программирования Python (осень 2020)
https://www.youtube.com/playlist?list=PL6kSdcHYB3x693X-s-DOR-hzybJqcYiOX
[UNИX] Язык программирования Python (осень 2021)
https://www.youtube.com/playlist?list=PL6kSdcHYB3x4a_XEgZSeUnzMroujtDw0H
[UNИX] Язык программирования Python (осень 2022)
https://www.youtube.com/playlist?list=PL6kSdcHYB3x7ZVz-ZmjNc048-iIZVLpqu
------------------------------------------------------------------------
Ковчег знаний
Георгий Курячий Язык программирования Python
https://www.youtube.com/playlist?list=PLOaW8o20mEghAOnlW8zg9WCtjXMgF3hFI
https://www.youtube.com/@unx7784/playlists
------------------------------------------------------------------------
Тимофей Хирьянов 2020 Практика программирования на Python 3
https://www.youtube.com/playlist?list=PLRDzFCPr95fIDJUvFxvzWxg-V9BmZlMMe
Тимофей Хирьянов 2019 Практика программирования на Python 3
https://www.youtube.com/playlist?list=PLRDzFCPr95fLuusPXwvOPgXzBL3ZTzybY
Тимофей Хирьянов 2017-2018 Алгоритмы и структуры данных на Python 3
https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
Тимофей Хирьянов 2021 Анализ данных на Python
https://www.youtube.com/playlist?list=PLRDzFCPr95fIgPrFFW-0nXT5YH6ZnjRM6
Практика по курсу: http://judge.mipt.ru/mipt_cs_on_python3
Учебная программа: https://github.com/mipt-cs/course-site-python3/wiki
https://github.com/tkhirianov/fox_python_2016
https://github.com/tkhirianov/lections_2019
https://github.com/tkhirianov/lections_2020/tree/master/python
https://github.com/tkhirianov/course-site-python3
https://github.com/tkhirianov/Tkinter-GUI-Application-Development-Blueprints-Second-Edition
------------------------------------------------------------------------
ITVDN Python Essential
https://www.youtube.com/playlist?list=PLvItDmb0sZw_MVK2txwtBSHAzaYRrOdiJ
ITVDN Python Starter
https://www.youtube.com/playlist?list=PLvItDmb0sZw8RfG5odrtstiYkmiPg_Yo_
ITVDN Вебинары Python
https://www.youtube.com/playlist?list=PLvItDmb0sZw_x1QivR1pTQ6tAK8Awb57L
------------------------------------------------------------------------
Компьютерные науки Алексей Умнов Курс "Язык Python"
https://www.youtube.com/playlist?list=PLJOzdkh8T5kpIBTG9mM2wVBjh-5OpdwBl
------------------------------------------------------------------------
Computer Science Center | CSC
Екатерина Тузова | CSC | Лекториум | Python
https://www.lektorium.tv/lecture/14092
https://www.youtube.com/playlist?list=PL-_cKNuVAYAXkJLFpu-dq3nphjftOOR6C

Сергей Лебедев | Computer Science Center | CSC | Python
https://compscicenter.ru/courses/python/2015-autumn/
https://www.youtube.com/playlist?list=PLlb7e2G7aSpTTNp7HBYzCBByaE1h54ruW

Алексей Крюков Python Курс лекций CScenter Екатерина Тузова
https://www.youtube.com/playlist?list=PLEl2mW_X5hhkgW_e7B_ukSwPm3Q28eSyt

Алексей Александрович Кладов | Computer Science Center | CSC | Программирование на Python, осень 2018
https://compscicenter.ru/courses/python/2018-autumn/classes/4004/
https://www.youtube.com/playlist?list=PLlb7e2G7aSpQhNphPSpcO4daaRPeVstku

Иван Бибилов | Computer Science Center | CSC | Программирование на Python (2021)
https://compscicenter.ru/courses/python/2021-spring/
https://www.youtube.com/playlist?list=PLlb7e2G7aSpQmGnhrxlqI4iMXNv4R7khy

Вадим Леонардович Аббакумов | Computer Science Center | CSC |
Анализ данных на Python в примерах и задачах. Часть 1 (весна 2018)
https://www.youtube.com/playlist?list=PLlb7e2G7aSpRb95_Wi7lZ-zA6fOjV3_l7
Анализ данных на Python в примерах и задачах. Часть 2 (осень 2018)
https://compscicenter.ru/courses/data-mining-python2/2018-autumn/classes/3997/
https://www.youtube.com/playlist?list=PLlb7e2G7aSpT1ntsozWmWJ4kGUsUs141Y
------------------------------------------------------------------------
Roman Brovko
Сергей Лебедев | Computer Science Center | CSC | Python Python (2015)
https://www.youtube.com/playlist?list=PLwwk4BHih4fjnBhqvYFvPxP5quUXR1CMj
------------------------------------------------------------------------
Uproger
Python собеседования
https://www.youtube.com/playlist?list=PLysMDSbb9Hcyxwq966ET1_6dXkNF_PW0L
Задачи с собеседований Python
https://www.youtube.com/playlist?list=PLysMDSbb9HcwsFjHAQulUNURVBYOHhLAq
Парсинг на Python
https://www.youtube.com/playlist?list=PLysMDSbb9HcwWWhs1Cm9EF1sv0fo8kII5
Numpy полный бесплатный курс
https://www.youtube.com/playlist?list=PLysMDSbb9Hcz3Gdi9oV-btohZ9zhths-r
Django создание сайтов с нуля.
https://www.youtube.com/playlist?list=PLysMDSbb9HcyLnXB9eLiYmsznjzEXo_6W
Python и базы данных
https://www.youtube.com/playlist?list=PLysMDSbb9HcxdvtQSkYoO7xaF3SvGUD8n
Наука о данных
https://www.youtube.com/playlist?list=PLysMDSbb9HcwIpPPBR72Qe7CMCgx-D9Ob
------------------------------------------------------------------------
Aleksey Pirogov Python basics (in Russian)
https://www.youtube.com/playlist?list=PLUFoWyWge7mrKhLggkLAF4gh3am1yYgri
Aleksey Pirogov Advanced Python (in Russian)
https://www.youtube.com/playlist?list=PLUFoWyWge7mrOAlym1HxJRtQh4Fedg9kO
Aleksey Pirogov Мастерклассы
https://www.youtube.com/playlist?list=PLUFoWyWge7mqWTjKSKfDW3GlXRVmQDbA-
------------------------------------------------------------------------
Лекции по теоретической физике Python в научных вычислениях
http://www.inp.nsk.su/~grozin/python/
https://www.youtube.com/playlist?list=PLPFUq1zn8x34Bx6CWXJyTAZVCGrJLQxlf
------------------------------------------------------------------------
Python Meetup 2013
https://www.youtube.com/playlist?list=PLjiAaL1HtGPboVADzNr2_WdSX3Jte5lG9
Python Meetup 2014
https://www.youtube.com/playlist?list=PLjiAaL1HtGPY3c3odkiXkFD0XuxvQc2Gf
------------------------------------------------------------------------
Василий Айтипиплов PyCon Russia '13
https://www.youtube.com/playlist?list=PLRdS-n5seLRoptAxb8tW1uZd_mrCY_ZRt
Василий Айтипиплов PyCon Russia '14
https://www.youtube.com/playlist?list=PLRdS-n5seLRoQ3VZIHCGEC62vThIrieAu
Василий Айтипиплов PyCon Russia '15
https://www.youtube.com/playlist?list=PLRdS-n5seLRqGHVrXZHxXfdw--aAsMdiL
Василий Айтипиплов Pycon 2016
https://www.youtube.com/playlist?list=PLRdS-n5seLRqszBqVDF342RMlCWgOTm6q
------------------------------------------------------------------------
Moscow Python
https://www.youtube.com/user/moscowdjangoru/playlists
------------------------------------------------------------------------
DataArt Python
https://www.youtube.com/playlist?list=PLU6_HdJGVDx_9Fkt1OVL_xBDoY9EMDrwu
------------------------------------------------------------------------
GeekBrains Пишем свой веб-сервер на Python
https://www.youtube.com/watch?v=nhG_qhOP_k0
------------------------------------------------------------------------
Mihail Kozlov Python
https://www.youtube.com/playlist?list=PL5KGx5_ykLX8qOlP1CaxxlTXKOZhIvfZl
------------------------------------------------------------------------
Олег Молчанов Парсинг (скрапинг) сайтов
https://www.youtube.com/playlist?list=PLlWXhlUMyoobMzou-Hl6HQWcClzg85_TZ
Олег Молчанов Работа с API Вконтакте (vk.com)
https://www.youtube.com/playlist?list=PLlWXhlUMyooZx_th2MsNYTeLamdfCMAOm
Олег Молчанов Telegram боты на Python
https://www.youtube.com/playlist?list=PLlWXhlUMyooaTZA4vxU9ZRZQPCFxUq9VA
Олег Молчанов Python практика
https://www.youtube.com/playlist?list=PLlWXhlUMyooab9Tji3bNX8iyVDkllA3mP
Олег Молчанов Асинхронность в Python
https://www.youtube.com/playlist?list=PLlWXhlUMyooawilqK4lPXRvxtbYiw34S8
Олег Молчанов Уроки Kivy для Android
https://www.youtube.com/playlist?list=PLlWXhlUMyoobAlP3mZ0_uuJagsDSg_5YT
Олег Молчанов Создание простого blockchain на Python
https://www.youtube.com/playlist?list=PLlWXhlUMyooZWYV5ilzjRvRfmkYsDQuom
Олег Молчанов Sublime Text 3
https://www.youtube.com/playlist?list=PLlWXhlUMyooYUgxmybYJiYNTicSHR8nme
Олег Молчанов Введение во Flask (Блог)
https://www.youtube.com/playlist?list=PLlWXhlUMyooZr5R2u2Zwxt6Pw6iwBo5y5
Олег Молчанов Ответы на вопросы (подкасты)
https://www.youtube.com/playlist?list=PLlWXhlUMyooaFmWf92uUsUfdlOHmmUTfu
Олег Молчанов Python Casts
https://www.youtube.com/playlist?list=PLlWXhlUMyooYqypXIju-5czBtppKaWimP
------------------------------------------------------------------------
Артем Егоров egoroffchannel
Язык программирования PYTHON для начинающих
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvv2wxPGSCWjgy1qER_FvB6
Модули Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHv8zY70xUqLYNQDMmwi7wGl
Алгоритмы и структуры данных в Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHsaqspc3ncC-WsuYyuRf2-f
Объектно-ориентированное программирование (ООП) Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvyjJNjZK_unnLwMOXPTja8
Tkinter Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHsd6U5okp1XLoYyQR0oBjMM
Разбор задач для спонсоров. Программирование Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvscrP2pec3JUAzIcRxDc5E
Анализ данных с помощью Pandas
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvibdelR6YgWvxKRv-FDz4D
Pygame
https://www.youtube.com/playlist?list=PLQAt0m1f9OHsMP67JNONOMh13dw_UHf52
Игра "Змейка" на Python. Snake game Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHun6Q9uZPNryl5gXm1ng_kd
Создаем игру 2048 на Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvjnzfCUmIxfHR-beScFFeG
Создаем игру "Пинг-Понг"
https://www.youtube.com/playlist?list=PLQAt0m1f9OHt4G8G016AJOQuX4u1MekE-
Модуль turtle. Создаем графику в Python
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvowenYcOHrRP_v1VN-0TWF
Фишки Питона
https://www.youtube.com/playlist?list=PLQAt0m1f9OHvjhjLZhYsJirRYIPKLoJML
------------------------------------------------------------------------
Dmitry Glazentsov Автоматизация рутинной задачи
https://www.youtube.com/playlist?list=PLpQhlQbV3rwnw8RA9L6ZQcNS2nxO_bV0T
------------------------------------------------------------------------
Видеоуроки Python
http://python.divz.ru/
https://github.com/solkogan?tab=repositories
https://play.google.com/store/apps/details?id=ru.pythono.pythono
https://www.youtube.com/playlist?list=PLMS-se7ZYfux7-xa8oHqy3YHvA9bWZcOh
------------------------------------------------------------------------
Alexander Savchuk Python/Практика
https://www.youtube.com/playlist?list=PL1dS0bMnExD5AsKOoyIlKyNauWB0dAfLE
------------------------------------------------------------------------
Технострим Mail.Ru Group Введение в анализ данных (весна 2016)
https://www.youtube.com/playlist?list=PLrCZzMib1e9p5F99rIOzugNgQP5KHHfK8
------------------------------------------------------------------------
Основы программирования для географов Python. Программирование в ArcGIS for Desktop
https://www.youtube.com/playlist?list=PLbozJClxFQYVb3-f4Age1Wldd0YrGPNUS
Основы программирования для географов Python. Программирование в QGIS
https://www.youtube.com/playlist?list=PLbozJClxFQYXuIowdEYjUQRLEatzO2CqJ
Основы программирования для географов Python in Geography
https://www.youtube.com/playlist?list=PLbozJClxFQYWAlAHPwFP62Qes9ioVwgSs
------------------------------------------------------------------------
Andrey Sozykin Глубокое обучение на Python
http://www.asozykin.ru/courses/nnpython
https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiz9aaL_xcZd-x0qd8G0VN_
------------------------------------------------------------------------
Igor Starikov Выступления
https://www.youtube.com/playlist?list=PL2Z1mFj1DwKS0NcYjtGL2fgFOmmDgHdhF
Igor Starikov PyCon US
https://www.youtube.com/playlist?list=PL2Z1mFj1DwKTfahTnjoFKW_0dflGlnBW8
Igor Starikov PyCon US и прочие на русском
https://www.youtube.com/playlist?list=PL2Z1mFj1DwKS_n06FajgeaM9-YZFnlClu
------------------------------------------------------------------------
LvivPy LvivPy#5
https://www.youtube.com/playlist?list=PL7qCyIe8wyWCYdGRJbcUyvv0PUQ_xKMky
------------------------------------------------------------------------
DrapsTV Python3 Advanced Tutorials
https://www.youtube.com/playlist?list=PL1A2CSdiySGIPxpSlgzsZiWDavYTAx61d
DrapsTV Hacking With Python
https://www.youtube.com/playlist?list=PL1A2CSdiySGLtKwqBnqj9BON6QQjWkP4n
------------------------------------------------------------------------
Vitaly Pavlenko Веб-программирование на Физтехе
https://www.youtube.com/playlist?list=PLzQrZe3EemP5KsgWGnmC0QrOzQqjg3Kd5
------------------------------------------------------------------------
ТЫЖПРОГРАММИСТ Python
https://www.youtube.com/playlist?list=PLto9y93q2lqjn3r0skYzmTT2XV4mYN4gw
------------------------------------------------------------------------
Kris Occhipinti Python - Telnet part#1
https://www.youtube.com/watch?v=fIOk2EcgOI8
ТЫЖПРОГРАММИСТ 1.9 Python. Telnet. Подключение к нескольким устройствам.
https://www.youtube.com/watch?v=BQJxHttLLZU
------------------------------------------------------------------------
Python. Разработка веб-приложений
https://vk.com/wall-80984752_1074
https://vk.com/wall-80984752_1080
https://vk.com/wall-80984752_1105
https://vk.com/wall-80984752_1117
--------------------------------
https://vk.com/wall-54530371_49794
https://vk.com/wall-54530371_49904
https://vk.com/wall-54530371_50003
https://vk.com/wall-54530371_50237
--------------------------------
Профессиональные Python курсы online
https://vk.com/wall-80984752_1141
https://vk.com/wall-80984752_1174
https://vk.com/wall-80984752_1178
https://vk.com/wall-80984752_1186
----------------------------------
http://pythonz.net/videos/44/
https://github.com/s16h/py-must-watch




Python подборка, часть 2
Python подборка видео

развернуть

Сайты



http://python.org/
http://python.su/
https://pypi.org
http://pep8.ru/
http://pyston.org/
http://python-3.ru/
http://pythonworld.ru/
https://pythono.ru/
http://pythonicway.com/
https://python-scripts.com/
http://pythonz.net/
http://pynsk.ru/
http://djbook.ru/
http://vpython.org/
https://www.djangoproject.com/
http://wsgi.readthedocs.org/en/latest/
http://learning-python.com/
http://www.rmi.net/~lutz/
https://pythonpedia.com/
https://github.com/vinta/awesome-python
https://sites.google.com/view/pypry/


Блоги



http://starship.python.net/crew/index.html
http://pep8.ru/blog/
http://ru_python.livejournal.com
https://vk.com/python_programing
https://vk.com/python_progers
https://vk.com/python_developers
https://vk.com/python_3
https://vk.com/vk_python
https://vk.com/django_framework
https://vk.com/pythonic_way
https://vk.com/club24847633
https://vk.com/club52104930
https://vk.com/iamdev/python
https://vk.com/pynsk
https://vk.com/tproger/python
https://plus.google.com/communities/103393744324769547228
https://plus.google.com/communities/103624658452637344893
http://zelark.ru/blog/tags/python/
http://pythlife.blogspot.ru/
http://pythonblogg.blogspot.ru/
http://asvetlov.blogspot.ru/search/label/python
http://koder-ua.blogspot.ru/
http://python4u.blogspot.de/
http://python-lab.blogspot.ru/
http://pythonr.blogspot.ru/search/label/python
http://john16blog.blogspot.ru/search/label/python
http://gorodovets.blogspot.ru/search/label/Python
http://www.haikson.com/Postpart/programming/python/
http://chevalry.livejournal.com/tag/python
http://mylinuxprog.blogspot.ru/search?q=python
http://poliarush.com/tag/python
http://0agr.ru/blog/tag/python/
http://www.odmin4eg.ru/tag/python/
http://www.8host.com/blog/category/python/
http://blog.e0ne.info/category/Python.aspx
http://django-tutorial.blogspot.ru/
https://python.ivan-shamaev.ru/
https://proglib.io/

каналы
https://t.me/ru_python
https://t.me/python_beginners
https://t.me/ru_python_beginners
https://t.me/propython
https://t.me/rudepython
https://t.me/rupython
https://t.me/pp_telegram


Статьи



Python на Хабре
Учебник по языку программирования Python (хабраиндекс)
Учим Python качественно
Материалы продвинутого уровня по Питону
Перевод интерактивного учебника «Problem Solving with Algorithms and Data Structures»
Полезные ресурсы для Python-разработчиков
Python для чайников, где взять материалы?
Лучшие проекты, в которых стоит поучаствовать, чтобы примкнуть к Open Source движению и развить свои навыки. Часть четвертая. Python
-----------------------------------------------------------------------------------
Python: коллекции, часть 4/4: Все о выражениях-генераторах, генераторах списков, множеств и словарей
-----------------------------------------------------------------------------------
Как перенести код Python 2 на Python 3
Python, xlsx с картинками, макросами, media-art, внедренными объектами
Еще раз о многопоточности в одну строку

Python 3 - Введение в asyncio
Примеры использования asyncio: HTTPServer?!
Немного фактов о python asyncio
Какая асинхронность должна была бы быть в Python
Асинхронный python без головной боли
Асинхронный python без головной боли (часть 2)

Как устроен GIL в Python
GIL и его влияние на многопоточность Python
Сложности сборки Python3 + Qt5 приложений под Windows

Многопоточность Python без GIL
https://github.com/colesbury/nogil
https://hub.docker.com/r/colesbury/python-nogil
-----------------------------------------------------------------------------------
19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 1. Введение
19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 2. Блокирующие сокеты и многозадачность
19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 3. Первый подход к асинхронности
19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 4. Сопрограммы в Python
19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 5. Асинхронное программирование
-----------------------------------------------------------------------------------
Ключевые навыки Python-программиста
41 вопрос о работе со строками в Python

Пишем красивый идиоматический Python
Как писать питонический код: три рекомендации и три книги
Погружение в пучину интерпретатора Python. Ч1
Python(x, y) — набор библиотек и программного обеспечения для численных расчетов, анализа и визуализации данных на основе Python
PyBrain работаем с нейронными сетями на Python
Пользовательские атрибуты в Python
Python: вещи, которых вы могли не знать
Непрерывное тестирование питонопроекта
Руководство по магическим методам в Питоне
Исчерпывающее руководство по множествам в Python
Использование регулярных выражений в Python для новичков
Регулярки (regex) — основы для решения кейсов, про которые не пишут в статьях про основы
Несколько продвинутых приемов языка Python
17 лучших однострочников на Python
Решил 50 задач и ответил на вопрос — Python или JavaScript?

-----------------------------------------------------------------------------------
Внутри виртуальной машины Python. Часть 1
Внутри виртуальной машины Python. Часть 2
Как устроен парсер Python, и как втрое уменьшить потребление им памяти
-----------------------------------------------------------------------------------
Введение в функциональное программирование на Python
Руководство по интроспекции на Python
Классы, методы Python 3. Примеры ООП (объектно ориентированное программирование)
Программирование на Python. Часть 7: Специальные методы и атрибуты классов
http://www.ibm.com/search/csass/search/?q=python&
Понимаем декораторы в Python'e, шаг за шагом. Шаг 1
Понимаем декораторы в Python'e, шаг за шагом. Шаг 2
Python: декорируем декораторы. Снова
Путь к пониманию декораторов в Python
Разбираемся с декораторами в Python
Упущенные из виду факты о переменных и объектах в Python: все дело в указателях

-----------------------------------------------------------------------------------
22 лучших репозитория на GitHub для новичков, изучающих Python
Лучшие библиотеки Python 2024 года
Топ-5 лучших библиотек Python с графическим интерфейсом
Python + Pyside2 или просто «Калькулятор»
Простой GUI калькулятор на Python #1. Создание дизайна приложения
Кроссплатформенный переключатель прокси-сервера на Python + Qt
Быстрый, мощный интерфейс на Python
Старый новый pywinauto: автоматизация Windows GUI на Python на примере install/uninstall
Как Numba ускорит ваш код на Python в 13 раз
-----------------------------------------------------------------------------------
Создание .exe файла для авторизации и взаимодействия с VK API при помощи Python
cx_Freeze + virtualenv = баги и зигзаги
Создание запускаемых файлов из скриптов на языке Python с помощью cx_Freeze
https://github.com/brentvollebregt/auto-py-to-exe
https://pypi.org/project/auto-py-to-exe/
как сделать единый файл exe из скрипта python используя py2exe и PyInstaller
Сборка испольняемого файла из скриптов Python
Змеиная анатомия. Вскрываем и потрошим PyInstaller

Как ускорить Python с помощью C-расширений
ВСТРАИВАНИЕ PYTHON В C/C++: ПЕРВАЯ ЧАСТЬ

Как опубликовать ваш пакет в PyPI используя PyCharm
Об одном способе защиты исходников Python-программы
Как обезопасить исходники своего python-приложения
Исследование защиты Wing IDE
Сервис для системного администратора. Часть 1
Прямой доступ к диску из python
От Python скрипта до WSGI приложения
Некогда объяснять, тебе срочно нужен фронтенд на Brython
Змеиный фрукт или фруктовый Питон?
-----------------------------------------------------------------------------------
Практическое руководство по разработке бэкенд-сервиса на Python
DLL & Python
Пишем кросс-платформенную библиотеку на Python
Как разрабатывать на Python под Android
Полноценное Python приложение на Android
Android и Python. Мобильная разработка.
Python для Android
10 приложений для изучения Python на Android-устройствах
Вирус на Python: Изучаем возможности полноценного злокодинга на интерпретируемом языке
Поддержка токенов PKCS#11 с ГОСТ-криптографией в Python. Часть I
-----------------------------------------------------------------------------------
Змеиный укус. Python-фреймворк Viper для анализа малвари
Защита от "дурака" в программах на языке Python

Установка питона и пакетов
Интересные приёмы для Python
Python: скрипт инкрементального или полного бекапа файлов

Восстановление (импутация) данных с помощью Python
4х повышение разрешения изображения с использованием ESRGAN
Обработка изображений с помощью библиотеки Python Pillow
-----------------------------------------------------------------------------------
Собираем питоновский пакет и выкладываем на pypi
Пишем обертку над API, делаем из нее PIP-пакет, подключаем тестирование от Travis CI и смотрим на лицензии открытого ПО
Использование регулярных выражений в Python для новичков
5 способов использования подчеркивания (_) в Python
6 рекомендаций по определению метода __init__
Что такое *args и **kwargs в Python?
Магия __slots__
Специальный атрибут __slots__ класса Python.
Python: модуль argparse – опции командной строки в примерах
Гайд по магическим методам в Python

Синтез речи под Linux на Python + RHVoice
Как с помощью Python создать приложение для расшифровки речи в реальном времени
-----------------------------------------------------------------------------------
Автоматизация ip-сети с помощью подручных инструментов (Python)
Python для сетевых инженеров: начало пути
Автоматизация задач инженера/администратора при помощи Python
Составляем DNS-запрос вручную
Руководство по модулю клавиатуры Python

HTML парсер на Python
Парсинг ресурсов при помощи Python
Работа с ssh в Python
Python scirpt на службе сетевого администратора
telnetlib — Telnet client
Скачивание музыки из VK, используя VK api и Python3
Обучаемый Telegram чат-бот с ИИ в 30 строчек кода на Python
Парсим мемы в питоне: как обойти серверную блокировку
Скачивание любого сайта с помощью Python себе на компьютер
https://github.com/rajatomar788/pywebcopy/
https://uzverss.livejournal.com/116630.html
Как всегда знать свой адрес в сети и не платить за белый IP
Web3.0 на Python, часть 1: основы
-----------------------------------------------------------------------------------
Использование Sublime Text Editor 2 в качестве редактора текста Python 3.x
Python Developer Tools от Microsoft. Начало работы
Особенности Jupyter Notebook, о которых вы (может быть) не слышали
Как работать с PyScript — фреймворком для фронтенда на Python
Советы, которые могут спасти Вас от ужасов PyYAML
-----------------------------------------------------------------------------------
Возьми Python с собой
Pelican. Установка блога.
консоль python в роли командной строки
-----------------------------------------------------------------------------------
СРАВНЕНИЕ ВЕБ-СЕРВЕРОВ ПРИЛОЖЕНИЙ НА ОСНОВЕ PYTHON
DHCP+Mysql сервер на Python
PYTHON TO JS TRANSLATION

WSGI - протокол связи Web-сервера с Python приложением
Документация Основы Веб-программирования WSGI (pep-333)
Развертывание приложения Python WSGI с помощью uWSGI+NGINX
Настройка uWSGI и NGINX для обслуживания приложений Python в Ubuntu 14.04
веб-интерфейс для python в ubuntu используя nginx и uwsgi
Гайд по работе Docker в Python – от установки до сложных примеров
-----------------------------------------------------------------------------------
Последовательный порт. Да, поможет нам Python!
Bubot — очень легкий фреймворк на Python 3 для программирования роботов и домашней автоматизации
CPython internals: A ten-hour codewalk through the Python interpreter source code
Транскомпилируемые языки: проекты конвертации код-в-код
Полезные советы по Python, которых вы ещё не встречали
перевод статьи "Bookmark this if you are new to Python (especially if you self-learn Python)"
Как подружить PyTorch и C++. Используем TorchScript
Python: как уменьшить расход памяти вдвое, добавив всего одну строчку кода?
Как сделать «двойной break», то есть выйти из вложенного цикла, в Python?
Отладка в python через консоль
Удобный отладчик для Python/Django проектов Pudb
Введение в инструмент отладки Python PuDB
Python. Отладка при помощи pdb
Отладка Python/Django при помощи PuDB
Пишем инструменты командной строки на Python с помощью Click

Как спасти потерянный исходный код на Python, если он все еще не выгружен из памяти
Oh no! This package is Python 2 only (что делать если библиотека только на python 2)
На чем программировать AI: Theano vs TensorFlow vs Scikit-learn

Чему я научился на своём горьком опыте (за 30 лет в разработке ПО)
Обширный обзор собеседований по Python. Советы и подсказки


Книги



http://www.proklondike.com/books/python.html
http://padabum.net/search.php?tag=Python
http://scanlibs.com/python/
http://bookwebmaster.narod.ru/python.html
I am a DEVELOPER Книги по Python
http://pyqtforlinguists.appspot.com/book.pdf
Построение систем машинного обучения на языке Python
Основы программирования на языке Python С. К. Буйначев, Н. Ю. Боклаг 2014
Введение в программирование на Python (2-е изд.) Северенс Ч. 2016
Язык программирования Python (2-е изд.) Сузи Р.А. 2016
Простой Python. Современный стиль программирования Билл Любанович 2016
Программирование на Python для начинающих Майк МакГрат 2015
-----------------------------------------------------------------------------------
Владимир Дронов, Николай Прохоренок Python 3 и PyQt 5. Разработка приложений (2016)
Владимир Дронов, Николай Прохоренок Python 3 и PyQt 5. Разработка приложений (2016)
Н. Прохоренок, В. Дронов»Python 3 и PyQt 6
-----------------------------------------------------------------------------------
Скотт Мейерс Секреты Python. 59 рекомендаций по написанию эффективного кода
Основы Data Science и Big Data. Python и наука о данных Дэви Силен, Арно Мейсман 2017
Райан Митчелл Скрапинг веб-сайтов с помощью Python 2016
Python. Создание приложений (2016) Уэсли Дж. Чан
Разработка геоприложений на языке Python Эрик Вестра 2016
Учебник Python 3: быстрый старт Федоров Д. Ю. 2016
-----------------------------------------------------------------------------------
Д. Златопольский «Основы программирования на языке Python» 2017
Д. Златопольский «Основы программирования на языке Python» 2017
Python для детей и родителей Брайсон Пэйн 2017
A Byte of Python (Russian) Версия 2.01
-----------------------------------------------------------------------------------
Программирование на языке Python. Учебный курс (2017) Роберт Седжвик, Кевин Уэйн, Роберт Дондеро
Автостопом по Python (2017) Кеннет Рейтц, Таня Шлюссер
Автостопом по Python (2017) Кеннет Рейтц, Таня Шлюссер
Секреты Python. 59 рекомендаций по написанию эффективного кода (2016) Бретт Слаткин
-----------------------------------------------------------------------------------
Дмитрий Мусин "Самоучитель Python"
Учебное пособие для вузов Чернышев, С. А. «Основы программирования на Python» 2022
Кольцов Д. М. «Python. Полное руководство» 2022
Кольцов Д. М. «Python. Полное руководство» 2022
Кольцов Д., Дубовик Е. «Справочник Python» 2021
Кори Альтхофф Сам себе программист. Как научиться программировать и устроиться в Ebay? 2018
Кори Альтхофф Computer Science для программиста-самоучки 2023
Основы Python. Научитесь думать как программист [2021] Аллен Б. Дауни
Изучаем Python. Программирование игр, визуализация данных, веб-приложения Эрик Мэтиз 2017
Изучаем Python [2020] Эрик Мэтиз
Учимся программировать с примерами на Python [2020] Эрик Фримен
Учимся программировать с примерами на Python [2020] Эрик Фримен
Начинаем программировать на Python (5-е издание) Тони Гэддис
Тони Гэддис - Начинаем программировать на Python (5-е изд) - 2022
Алексей Горожанов "PyQT для лингвистов"
Построение систем машинноrо обучения на языке Python
Программируем коллективный разум
-----------------------------------------------------------------------------------
Автоматизация повседневных задач на Python
Автоматизация рутинных задач с помощью Python: практическое руководство для начинающих Эл Свейгарт 2016
Автоматизация рутинных задач с помощью Python: практическое руководство для начинающих Эл Свейгарт 2017
Свейгарт Эл «Автоматизация рутинных задач с помощью Python» 2021
Анил Агравал, Сародж Агравал «Автоматизация предприятия с помощью Python» 2022
Ной Гифт, Кеннеди Берман, Альфредо Деза, Григ Георгиу Python и DevOps: Ключ к автоматизации Linux. 2022
Ленц М. Python: Непрерывная интеграция и доставка 2020
-----------------------------------------------------------------------------------
Ной Гифт, Кеннеди Берман, Альфредо Деза, Григ Георгиу «Python и DevOps» 2022

Python 3 для сетевых инженеров
Чоу Эрик «Python для сетевых инженеров» 2023
Полное руководство работы с сетями на Python Эрик Чоу
-----------------------------------------------------------------------------------
Джастин Зейтц, Тим Арнольд «Black Hat Python» 2022
Джастин Зейтц, Тим Арнольд «Black Hat Python» 2022
Воган Ли «Python для хакеров» 2023
Сборник статей «Python глазами хакера» БХВ-Петербург, 2022
-----------------------------------------------------------------------------------
Бизли Дэвид «Python. Исчерпывающее руководство» 2023
Непрактичный Python: занимательные проекты для тех, кто хочет поумнеть. Ли Воган 2021
Свейгарт Эл «Python. Чистый код для продолжающих» 2022
Бейдер Д. Чистый Python. Тонкости программирования для профи. 2018
Computer Science для программиста-самоучки. Все, что нужно знать о структурах данных и алгоритмах. 2023.
Хиллард Дейн Секреты Python Pro. 2021.
Такфилд Брэдфорд «Алгоритмы неформально» 2022
Имран Ахмад «40 алгоритмов на Python» 2023 год
Чистый Python. Тонкости программирования для профи Бейдер Дэн 2018
Кристиан Майер «Однострочники Python» 2022
Шоу Энтони «Внутри CPython» 2023

Книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
http://www.libkruz.com/1-programming.html
http://24videokurs.ru/tag/python/
https://vk.com/itcookies/book
http://tparser.org/Python
ftp Python1

https://codelibs.ru/category/c/
https://codernet.ru/books/python/

поиск по торрентам
https://searchtor.to/
https://search.exfreedomist.com/


Переводы



https://digitology.tech/docs/python_3/index.html
https://github.com/sfcl/python_doc_3.8.3
https://aliev.github.io/runestone/
https://github.com/aliev/runestone
http://juster.fvds.ru/learnwithpython/ru2e/index.html
http://wombat.org.ua/AByteOfPython/
http://forum.ubuntu.ru/index.php?topic=218329.0
http://snakeproject.ru/python/ver1.3.htm
https://lancelote.gitbooks.io/intermediate-python/content/
https://github.com/borisuvarov/python-cookbook-ru
Gray Hat Python (Перевод: Prosper-H, M.Chumichev)


Подборки



Полезные ресурсы для Python-разработчиков
https://github.com/TheKnightsWhoSayNi/info/wiki/Hat
https://vk.com/page-54530371_48786262
https://vk.com/wall-54530371_1075
http://www.pvsm.ru/cat/python
http://www.py-my.ru/#tags=python
http://python.rabota-ka.ru/search/label/#python
http://ideafix.name/?cat=18
http://zetblog.ru/?s=python
http://rtfm.co.ua/tag/python/
http://rtfm.co.ua/category/python/
https://azure.microsoft.com/ru-ru/documentation/articles/?platform=python
http://cyberleninka.ru/search?q=python
http://jenyay.net/Programming/Python
http://intepra.ru/wiki/doku.php?id=about_python
http://tparser.org/Python
http://jenyay.net/Programming/Python
https://tproger.ru/digest/data-science-python/
http://tproger.ru/articles/free-programming-books/#python
http://tproger.ru/tag/python/
http://tproger.ru/?s=Python
https://tproger.ru/digest/python-articles/
https://xakep.ru/category/coding/python/
http://robocraft.ru/tag/python
https://russianpenguin.ru/tag/python/
http://ideafix.name/?cat=18
http://kostikvento.ru/cython/docs/
http://snakeproject.ru/rubric/rubric.php?id=5
http://djangosimple.blogspot.ru/search/label/python
http://pygo.ru/
http://itscreen.tk
http://www.slideshare.net/search/slideshow?searchfrom=header&q=python&ud=any&ft=all&lang=ru&sort=
https://www.8host.com/blog/category/python/
https://uproger.com/category/post/python/
https://habr.com/ru/hub/python/all/


Видео



http://uzverss.livejournal.com/tag/python





Python подборка, часть 1
Python подборка видео

развернуть

Новости



http://pythondigest.ru/
http://pygo.ru/


Игры



http://www.checkio.org/
http://codecombat.com/
https://www.codingame.com/start
http://www.pythonchallenge.com/
https://empireofcode.com/
http://www.cyber-dojo.org/setup/show_exercises/?language=Python&test=py.test
http://www.codewars.com/?language=python
https://universe.openai.com/
https://github.com/openai/universe


Задачи, тренировка



http://www.codewars.com/?language=python
https://www.hackerrank.com/domains/python/py-introduction
https://proghub.ru/t/python-basic


Курсы



http://it-students.net/content/course/python
https://compscicenter.ru/courses/python/
https://compscicenter.ru/courses/python/2015-autumn/
http://uneex.ru/LecturesCMC/PythonIntro2014
http://uneex.ru/LecturesCMC/PythonDevelopment2015
Дистанционная подготовка / ► Программирование на python
http://pythonworld.ru/kursy/free.html
https://www.redhat.com/en/services/training/ad141-red-hat-training-presents-introduction-to-python-programming
https://github.com/RedHatTraining/AD141-apps
-----------------------------------------------------------------------------------
stepik Добрый, добрый Python - обучающий курс от Сергея Балакирева
stepik Инди-курс программирования на Python
stepic Программирование на Python
stepik Python: основы и применение
stepik "Поколение Python": курс для продвинутых
-----------------------------------------------------------------------------------
https://xakep.shop/pythonivan
http://master-develop.com/programmirovaniya-na-python/
DEV-PYTHON. Прикладное программирование на языке Python
http://itmo-it.org/python-developer/
http://www.proglive.ru/courses/python
https://geekbrains.ru/professions/python_developer
geekbrains Python. Быстрый старт
http://pro365.net/
http://lessons2.ru/python-for-testers/
http://foxford.ru/wiki/informatika/o-yazyke-python
http://www.specialist.ru/dictionary/definition/python
https://www.coursera.org/specializations/python
intuit Введение в программирование на Python
intuit Язык программирования Python Роман Сузи
Программирование на языке Python для сбора и анализа данных
https://github.com/ischurov/pythonhse
https://github.com/Yorko/python_intro
http://itvdn.com/ru/shares/free-python-course
Младшая лига PyShop
https://itproger.com/course/python
http://uneex.ru/Python
https://mastergroosha.github.io/telegram-tutorial/
Андрей Созыкин Онлайн курс "Программирование глубоких нейронных сетей на Python"
Примеры программ
ТОП-30 бесплатных курсов обучения по Python 2022 года
Топ бесплатных курсов по Python в 2024 году
https://katalog-kursov.ru/courses/razrabotka_python/
skillfactory Специалист по нейронным сетям

https://skillfactory.ru/python-developer
https://www.udemy.com/ru/topic/python/


Wiki



https://ru.wikibooks.org/wiki/Python
https://ru.wikiversity.org/wiki/Программирование_и_научные_вычисления_на_языке_Python
http://xgu.ru/wiki/Python_для_сетевых_инженеров
https://ru.wikiversity.org/wiki/Курс_по_библиотеке_Tkinter_языка_Python
http://younglinux.info/tkinter/tkinter.php
http://younglinux.info/book/export/html/48
http://www.russianlutheran.org/python/life/life.htm
http://python-lab.ru/
http://www.wikiwand.com/ru/Python
http://www.tutorialspoint.com/python/index.htm
http://m3.bars-open.ru/stories/move-to-python3.html


Шпоры



http://pythonworld.ru/uploads/mementopython3-russian.pdf
http://pythonworld.ru/uploads/python-error.png
http://pythonworld.ru/osnovy/programma-ne-raboaet.html
https://hsto.org/files/a98/e04/74c/a98e0474c2534e138a265d3b9577caab.png
https://psv4.userapi.com/c816129/u183791845/docs/f480a5b1ace9/python_cours_mementopython3-english.pdf
Инструменты Python: лучшая шпаргалка для начинающих
http://python.cx/blog/article/PyPi_pip_python
http://overapi.com/python/
http://iakovlev.org/index.html?p=5791
Руководство по магическим методам в Питоне
http://www.michurin.net/tools/python-methods.html
http://ps.readthedocs.io/ru/latest/index.html
http://overapi.com/python
https://python.libhunt.com/
https://cheatsheets.zip/python

стиль написания кода
http://pep8.ru/doc/pep8/
http://pythonworld.ru/osnovy/pep-8-rukovodstvo-po-napisaniyu-koda-na-python.html
https://habr.com/ru/post/180509/
---------------------------------------------------------------------------
напоминание о читабельном коде
$ pip3 install pep8
$ pep8 optparse.py
$ pip3 install autopep8
$ autopep8 --in-place optparse.py
---------------------------------------------------------------------------

примеры
проверка скорости интернета в консоли


Самоучители



http://pythonworld.ru/samouchitel-python
http://pythonworld.ru/uploads/pythonworldru.pdf
http://pythontutor.ru/
https://docs-python.ru/
https://pavel-karateev.gitbook.io/intermediate-python/
http://python-rutour.rhcloud.com/
http://learnxinyminutes.com/docs/ru-ru/python-ru/
http://programarcadegames.com/index.php?lang=ru
http://juster.fvds.ru/learnwithpython/ru2e/index.html
http://jjc.freeshell.org/easytut/Easytut_Russian/
http://progras.ru/uchebnik-programmirovaniya-programmirovanie-eto-interesno/
http://theor.mephi.ru/wiki/index.php?title=Python
http://python-lab.ru/index.html
http://pythonlearn.ru/
https://codechick.io/tutorials/python/
http://www.uchi-it.ru/9/11/soder.html
http://www.inp.nsk.su/~grozin/python/
http://ilnurgi1.ru/docs/python/index.html
http://younglinux.info/python.php
http://pythoner.name/
http://snakeproject.ru/python/ver1.3.htm
https://snakify.org/
https://devpractice.ru/python-lessons/
http://espressocode.top/python/
Язык программирования Python — подробно для начинающих
Язык программирования Python за 10 минут
Основы Python Хендбук по Python Яндекс Образование
Руководство по языку программирования Python
Примерный план изучения python по направлениям

Jupyter Notebook для начинающих: учебник

PyQt
PyQt6 — полное руководство для новичков
PyQt6 — полное руководство для новичков. Продолжение
PyQt5 для начинающих
Сложности сборки Python3 + Qt5 приложений под Windows
Простой GUI калькулятор на Python #1. Создание дизайна приложения
Кроссплатформенный переключатель прокси-сервера на Python + Qt
Программирование на Python с использованием PyQt4

Flask
https://ru.wikibooks.org/wiki/Flask
Мега-Учебник Flask, Часть 1: Привет, Мир
Мега-Учебник Flask Глава 1: Привет, мир! ( издание 2018 )
http://flask-russian-docs.readthedocs.io/ru/latest/

Работа Zope 3 шаг за шагом
Документация Основы Веб-программирования Python
Пособие по MySQL на Pythonl
Python, осень 2015: Классы 1
https://codeby.net/threads/powershell-python-katalog-statej.65016/
Заметки на тему Python


Реальные примеры приложений на Python и PyQT: от косынки до веб-браузера


Алгоритмы
https://github.com/TheAlgorithms/Python/tree/master


Разное (фреймворки, косвенно связанное с python и тд.)



http://cython.org/
http://www.celeryproject.org/
http://nuitka.net
https://blog.pyston.org/
https://github.com/numba/numba
https://plone.org/
http://www.zope.org/
http://flask.pocoo.org/
https://pyscript.net/
https://github.com/pyscript/pyscript/
http://pythonpaste.org/
http://vpython.org/
http://www.wxpython.org/
http://www.pylonsproject.org/
http://bottlepy.org/docs/dev/index.html
http://urwid.org/
http://russianlutheran.org/python/nardo/nardo.html
http://www.devdungeon.com/content/gui-programming-python#menu
http://orelsokolov.blogspot.ru/2012/11/tk-tutorial-rus.html
http://tclstudy.narod.ru/
http://minix3.ru/docs/tcl.pdf
http://www.opennet.ru/docs/RUS/tcltk/tk.html
Реализация графического интерфейса библиотеки Python Typer для приложений CLI.
https://www.pysimplegui.org/en/latest/
Ipython notebook. Часть I — установка в Ubuntu 12.04 и запуск.
Ipython notebook. Часть II — пример работы
http://flask-russian-docs.readthedocs.org/ru/latest/
http://wiki.python.su/Документации/ВведениеВСредуPyQt4
http://wiki.python.su/Документации/SQLAlchemy
https://support.google.com/a/answer/91077?hl=ru
https://cloud.google.com/appengine/
http://turbogears.org/
http://doc.sagemath.org/html/ru/tutorial/index.html
http://wiki.python.su/Документации/Bluebream
https://wiki.python.org/moin/boost.python
https://code.google.com/archive/p/unpyc3/
http://pyjs.org/
http://pypyjs.org/
https://github.com/PythonJS
https://github.com/getpelican/pelican
http://www.espruino.com/
https://pypi.python.org/pypi/RPi.GPIO
https://github.com/pyserial/pyserial
http://micropython.org/
http://www.skulpt.org/
http://www.numpy.org/
https://github.com/chriskiehl/Gooey
https://kivy.org/
https://github.com/quora/asynq
https://pypi.python.org/pypi/lys
http://docs.grablib.org/ru/latest/
https://html5lib.readthedocs.io/en/latest/
https://github.com/google/python-fire
http://www.paramiko.org/
https://github.com/eliangcs/http-prompt
https://github.com/dbcli/mycli
https://github.com/pallets/click
https://github.com/jkbrzt/httpie
https://github.com/kennethreitz/pipenv
https://github.com/mitsuhiko/pipsi
https://github.com/lk-geimfari/expynent
https://pypi.python.org/pypi/you-get
https://pypi.python.org/pypi/wget
https://pypi.python.org/pypi/pyrasite/
https://pypi.python.org/pypi/uncompyle6
https://pypi.python.org/pypi/xonsh
https://pypi.python.org/pypi/sh
https://pexpect.readthedocs.io/
https://voc.readthedocs.io/en/latest/

https://pypi.org/project/keyboard/

uzverss Raspberry PI, Arduino, Python

django
https://www.djangoproject.com/
http://uzverss.livejournal.com/67272.html


Вопросы, ответы, решения



http://python.su/forum/
http://www.cyberforum.ru/python/
http://vresheno.ru/tag/29
http://pytalk.ru/forum/python/
http://forum.vingrad.ru/forum/python-forum.html
http://pythonworld.ru/osnovy/faq.html
https://ru.stackoverflow.com/questions/tagged/python
http://www.stofl-ru.com/tags/python
https://toster.ru/tag/python/info
https://forum.antichat.ru/search/5995441/?q=Python&o=relevance
https://codeby.net/forum/forums/python.136/
http://www.govnokod.ru/python
https://github.com/wasmerio/Python-Scripts

привести код в порядок
python3 -m pip install flake8
flake8 myscript.py # проверить как и где именно нарушается стиль

python3 -m pip install black
black --check myscript.py # проверить будет ли black изменять файл
black --diff myscript.py # показать изменения
black myscript.py # отформатировать

Посмотреть исходный код



https://github.com/python/cpython
https://hg.python.org/
http://nullege.com/
http://www.programcreek.com/python/
http://pastebin.com/
https://searchcode.com/


Консоль



https://www.pythonanywhere.com/
https://repl.it/
https://try.jupyter.org/
http://www.codeskulptor.org/
http://pythonfiddle.com/
https://ideone.com/
https://koding.com/
http://codepad.org/
https://trycode.pw/
http://ideone.com/
http://melpon.org/wandbox
https://repl.it/languages/python3
http://live.sympy.org/
http://rextester.com/l/python3_online_compiler
http://www.brython.info/tests/console.html
http://pythontutor.com/visualize.html
http://www.learnpython.org/
http://www.tutorialspoint.com/execute_python3_online.php
https://www.tutorialspoint.com/codingground.htm
http://www.skulpt.org
https://github.com/selectel/pyte
https://github.com/eliangcs/http-prompt
http://http-prompt.com/
https://micropython.org/unicorn/
http://www.skulpt.org/

https://httpie.org/

http://www.tutorialspoint.com/codingground.htm
http://www.pythontutor.com/

uzverss консоль python в роли командной строки


Программное обеспечение



https://www.python.org/downloads/
https://github.com/python/cpython
https://pypi.python.org/pypi
https://pypi.org
https://pythonwheels.com/
https://store.docker.com/images/python
https://github.com/dropbox/pyston
http://www.activestate.com/activepython
http://portablepython.com/
http://python-xy.github.io/
https://www.continuum.io/downloads
http://www.lfd.uci.edu/~gohlke/pythonlibs/
http://winpython.github.io/
https://code.google.com/p/pythonxy/
http://www.riverbankcomputing.com/news
http://wiki.qt.io/PySide

https://github.com/colesbury/nogil
https://hub.docker.com/r/colesbury/python-nogil

https://ipython.org/
http://xon.sh/
https://amoffat.github.io/sh/
https://github.com/selectel/pyte
https://github.com/eliangcs/http-prompt
http://bpython-interpreter.org/
https://github.com/jonathanslenders/ptpython
https://github.com/jonathanslenders/pymux/
https://github.com/jonathanslenders/python-prompt-toolkit

http://ipython.org/notebook.html
http://jupyter.org/
https://wingware.com/
https://netbeans.org/
http://nbpython.org/
http://komodoide.com/
http://www.ninja-ide.org/
http://www.aptana.com/
https://www.jetbrains.com/pycharm/
http://www.pydev.org/
http://eric-ide.python-projects.org/
https://github.com/spyder-ide/spyder (sudo apt-get install spyder3)
http://www.sublimetext.com/3
http://www.iep-project.org/
http://drpython.sourceforge.net/
http://satsky.spb.ru/codimension/
http://sourceforge.net/projects/pyscripter/
http://sourceforge.net/projects/boa-constructor/
http://sourceforge.net/projects/pycrust/
http://monkeystudio.org/ (sudo apt-get install monkeystudio)
http://dashingsoft.com/wp/?page_id=180
http://idlex.sourceforge.net/
http://griffon.lasotel.fr/
https://code.visualstudio.com/
https://marketplace.visualstudio.com/items?itemName=ms-python.python

https://github.com/axcheron/pydasm


Плагины для хрома



Python Shell
https://chrome.google.com/webstore/detail/python-shell/diebclfbkfamdacginejnaookipodhng

Python
https://chrome.google.com/webstore/detail/python/nodpmmidbgeganfponihbgmfcoiibffi

Python Fiddle
https://chrome.google.com/webstore/detail/python-fiddle/imldfcloildiapnfjoocfpdmoajnjelf

Python Editor v5 beta
https://chrome.google.com/webstore/detail/python-editor-v5-beta/lldlpeacadpdfaoekhaiphamkndjghgo

Codeanywhere
https://chrome.google.com/webstore/detail/codeanywhere/jdofbmaiblhheoneemdjccjeeihbiabl

https://github.com/ohyicong/decrypt-chrome-passwords


ПО для Android



Изображения



https://www.bhmpics.com/python-wallpaper.html
https://xakep.ru/wp-content/uploads/2018/07/177015/Python.jpg
https://pbs.twimg.com/media/Bv10LFJCcAAjA64.jpg:large
https://web.archive.org/web/20190131003746/https://thesoftwarebucket.appspot.com/static/img/portfolio/python.png
https://web.archive.org/web/20180318003938/https://www.directed.com.au/wp-content/uploads/2013/09/Python-Logo.png
http://img07.deviantart.net/3115/i/2013/303/6/a/wallpaper_python_programming_by_artgh-d6sf9dw.jpg
http://orig03.deviantart.net/d6cb/f/2012/292/e/8/wallpaper_python_tierra_by_sapphiregd-d5i9tr3.jpg
http://sookyungkim.net/wp-content/uploads/2013/09/python_logo2.png
http://images6.fanpop.com/image/photos/35100000/Python-programming-35141649-1680-1050.jpg
http://www.cambiadeso.es/wp-content/uploads/2011/04/python-.png
https://web.archive.org/web/20160904081832/https://groklearning-cdn.com/static/images/badges/python-for-beginners@2x.png
http://a4.mzstatic.com/us/r1000/104/Purple/v4/ae/79/58/ae795815-30ab-4492-4d2b-ddbe2c2e8e00/mzl.gmodzffv.png
https://lozingletechblog.files.wordpress.com/2014/03/lozingle_10032014.jpg
http://i.imgur.com/kHqKP.png
https://s1.hostingkartinok.com/uploads/images/2024/07/45c2daf693a15c176fdf224956af9504.png
http://3.bp.blogspot.com/-CJPVGWMheg0/UZv0c6VvObI/AAAAAAAAAEY/aUL20gL7JIk/s1600/python-programming.jpg
http://proft.me/static/img/python/python-run.gif
https://web.archive.org/web/20150429042220/https://upload.wikimedia.org/wikipedia/ru/2/25/PythonProgLogo.png
https://web.archive.org/web/20160417011832/http://www.victorperez.co.uk/images/screencapture_pythonHOME.png


Полезное, не связанное с PL Python



Книги
http://www.mccme.ru/free-books/ МЦНМО
http://ilib.mccme.ru/ золотой фонд популярной физико-математической литературы
http://e-maxx.ru/bookz/ библиотека

Английский
http://uzverss.livejournal.com/70895.html

Алгоритмы
http://e-maxx.ru/algo/ Алгоритмы
Подборка книг по Алгоритмам
Алгоритмические трюки для программистов(второе издание)Генри Уоррен 2014
Знай сложности алгоритмов
------------------------------------------------------------------------
Volodya Mozhenkov алгоритмы
https://www.youtube.com/playlist?list=PLY7PmJJFH5nSkAteyHnYQzi0FY4JniexT
Roman Brovko Введение в алгоритмы
https://www.youtube.com/playlist?list=PLwwk4BHih4fjIT5cT4i1s93b99aJScUGB
------------------------------------------------------------------------
http://tproger.ru/translations/sorting-for-beginners/ Алгоритмы и структуры данных
https://ru.wikibooks.org/wiki/Реализации_алгоритмов

Задачи
http://eax.me/programming-language-learning/

Основы
Код. Тайный язык информатики Чарльз Петцольд 2001
http://javarush.ru/cs50.html Гарвардский курс CS50 («Основы программирования и компьютерных наук»)
https://www.youtube.com/playlist?list=PLawfWYMUziZqyUL5QDLVbe3j5BKWj42E5

ООП
CMTV [Грани Hi-Tech] Изучение программирования. Суть ООП
https://www.youtube.com/playlist?list=PLDywto_IU4_5UdZeKaoe-JWSl9LoaWmH9
Yellow-Duck.net Основы основ программирования
https://www.youtube.com/playlist?list=PL6LDsbZOeyrwLLZYsBMT6zVS_0jqIf3E6
Yellow-Duck.net Основы объектно-ориентированного програмирования
https://www.youtube.com/playlist?list=PL6LDsbZOeyrx462VmH18qS0a9Dw9LwpSu
LessonFirst Объектно-ориентированное программирование [завершен]
https://www.youtube.com/playlist?list=PLi3gxGWPyGGQvfcZZr04KToj3beWtOz6o

Тестирование ПО
https://vk.com/wall-79831840_4507 Тестирование ПО
https://www.youtube.com/playlist?list=PLrCZzMib1e9pDKLsabJYuODdVJrHYc4Jd
http://svyatoslav.biz/software_testing_book/

Репозиторий публичных API
https://github.com/public-apis/public-apis

Си/Си++
https://uzverss.livejournal.com/113036.html

SQL
https://uzverss.livejournal.com/116184.html

Assembler
https://uzverss.livejournal.com/89062.html

JavaScript
http://uzverss.livejournal.com/62394.html

PHP
http://uzverss.livejournal.com/76110.html

Java
https://uzverss.livejournal.com/103312.html

Erlang Elixir
https://www.erlang.org/
https://elixir-lang.org/
https://www.phoenixframework.org/
«Введение в Elixir» — первая книга по Эликсиру на русском
Начни изучать Elixir прямо сейчас! Перевод всей серии статей готов
Разработка приложений на Elixir/Phoenix с помощью Docker

Прочие языки
93 видео-лекции по Scala
------------------------------------------------------------------------
http://vk.com/dlang D
------------------------------------------------------------------------
http://swiftbook.ru/ Swift
------------------------------------------------------------------------
http://www.lisp.ru/ Lisp
http://lisper.ru/
https://habr.com/ru/hub/lisp/
------------------------------------------------------------------------


http://uzverss.livejournal.com/tag/python




консоль python в роли командной строки часть 1

заглянуть

Работа с WWW



сервер
запускает HTTP для всех локальных интерфейсов на порту 8080
python -m SimpleHTTPServer 8080 # python2
python3 -m http.server 8080

python3 -m http.server 8080 --cgi # запустить в папке, где находится каталог cgi-bin
# со сценарием cgi

открыть в браузере адреса
http://0.0.0.0:8080/ или http://localhost:8080/ или http://127.0.0.1:8080/

python -m SimpleHTTPServer # без указания порта запустит сервер на порту 8000
python3 -m http.server

запускает сервер SMTP на порту 1025
python -m smtpd -n -c DebuggingServer localhost:1025
запустить сервер SMTP на стандартном порту 25
sudo python -m smtpd -n -c DebuggingServer localhost:25

http://rus-linux.net/nlib.php?name=/MyLDP/consol/oneliners.html

работа с http

import webbrowser
webbrowser.open('http://www.habrahabr.ru/') # открыть ссылку в браузере
webbrowser.open(u'file://home/user/mysite.html')
webbrowser.open(u'mailto:foo@bar.com?subject=Feedback%20message') # открыть почтовый клиент создать письмо
http://habrahabr.ru/post/62383/
если нет модуля webbrowser то
apt-get install python-pip python3-pip
pip install webbrowser
http://rtfm.co.ua/python-utilita-pip-pypi/
http://asvetlov.blogspot.ru/2014/05/pip.html
import urllib2
urllib2.urlopen('http://www.example.com/').read()
# скачать файл по протоколу http

работа с ftp

from ftplib import FTP
f = FTP('ftp.gnu.org')
f.login('','') # f.login('login', 'password')
for x in f.nlst()[:9]: print(x)
L = []
f.dir(L.append)
for x in L[:15]: print(x)
f.nlst()
f.dir()
f.nlst()[17]
remotefiles=f.nlst()[17]
localdir = '/home/user/path/'
localpath = os.path.join(localdir, remotefiles)
localfile = open(localpath, 'wb')
f.retrbinary('RETR ' + remotefiles, localfile.write)
localfile.close()
import os
os.listdir()

pypi install wget
import wget
wget.download("http://www.python.org/")


Экранирование тегов html



>>> import cgi
>>> cgi.escape('a < b > c & d "spam"', 1)
'a &lt; b &gt; c &amp; d &quot;spam&quot;'
>>> s = cgi.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'
>>>
>>> import html
>>> html.escape('a < b > c & d "spam"', 1)
'a &lt; b &gt; c &amp; d &quot;spam&quot;'
>>> s = html.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'

>>> import cgi, html.parser
>>> s = cgi.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'
>>>
>>> html.parser.HTMLParser().unescape(s)
'1<2 <b>hello</b>'
>>>
>>> import html, html.parser
>>> s = html.escape("1<2 <b>hello</b>")
>>> s
'1&lt;2 &lt;b&gt;hello&lt;/b&gt;'
>>> html.parser.HTMLParser().unescape(s)
'1<2 <b>hello</b>'

>>> import urllib.parse
>>> urllib.parse.quote("a & b #! c")
'a%20%26%20b%20%23%21%20c'
>>> urllib.parse.quote_plus("C:\stuff\spam.txt")
'C%3A%5Cstuff%5Cspam.txt'
>>> x = urllib.parse.quote_plus("a & b #! c")
>>> x
'a+%26+b+%23%21+c'
>>> urllib.parse.unquote_plus(x)
'a & b #! c'


Экранирование адресов URL



>>> import urllib.parse
>>> b='http://lurkmore.to/Монти_Пайтон'
>>> urllib.parse.quote(b)
'http%3A//lurkmore.to/%D0%9C%D0%BE%D0%BD%D1%82%D0%B8_%D0%9F%D0%B0%D0%B9%D1%82%D0%BE%D0%BD'
>>> d=urllib.parse.quote(b)
>>> d
'http%3A//lurkmore.to/%D0%9C%D0%BE%D0%BD%D1%82%D0%B8_%D0%9F%D0%B0%D0%B9%D1%82%D0%BE%D0%BD'
>>> urllib.parse.unquote(d)
'http://lurkmore.to/Монти_Пайтон'


Экранирование адресов URL с якорями
python3
>>>
>>> import urllib.parse
>>> s='http://lurkmore.to/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BF%D0%B0%D1%81%D1%82%D0%B0:Python#.D0.9E.D1.80.D0.B8.D0.B3.D0.B8.D0.BD.D0.B0.D0.BB'
>>> (a,b)=s.split('#')
>>> a
'http://lurkmore.to/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BF%D0%B0%D1%81%D1%82%D0%B0:Python'
>>> b
'.D0.9E.D1.80.D0.B8.D0.B3.D0.B8.D0.BD.D0.B0.D0.BB' 
>>> b=b.replace('.','%')
>>> b
'%D0%9E%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB' 
>>> j=a+'#'+b
>>> j
'http://lurkmore.to/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BF%D0%B0%D1%81%D1%82%D0%B0:Python#%D0%9E%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB'
>>> 
>>> l=urllib.parse.unquote(j)
>>> l
'http://lurkmore.to/Копипаста:Python#Оригинал'



Почтовые вложения и ссылки base64



>>> import base64
>>> base64.b64decode('aHR0cDovLzR1ZnJlZS50ay9tZWRpYTcyMzY0Ni9mdWVuZi8wMzYubXAz')
b'http://4ufree.tk/media723646/fuenf/036.mp3' 



Шифрование



a ^ b ^ b == a

>>> 1925^99
2022
>>> 2022^99
1925

шифрование искажение символов (простое)
sys.stderr.write('using simple\n')
adder = 1
def do_encode(pswd):
    pswd = 'vs' + pswd + '48'
    res = ''
    for char in pswd:
        res += chr(ord(char) + adder) # увеличить каждый код ASCII
    return str(res)
def do_decode(pswd):
    pswd = pswd[2:-2]
    res = ''
    for char in pswd:
        res += chr(ord(char) - adder)
    return res

http://pythonlearn.ru/без-рубрики/shifrovanie-strok-s-pomoshhyu-modulya-hashlib-python/
>>> import hashlib
>>> h = hashlib.sha1(b"password")
>>> h = hashlib.sha1()
>>> h.update(b"password")
>>> h = hashlib.sha1(b"password")
>>> h.digest()
'[\xaaa\xe4\xc9\xb9??\x06\x82%\x0bl\xf83\x1b~\xe6\x8f\xd8'
>>> h.hexdigest()
'5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8'

>>> import hashlib
>>> h = hashlib.md5(b"password")
>>> p = h.hexdigest()
>>> p
'5f4dcc3b5aa765d61d8327deb882cf99'
>>> p    # Пароль, сохраненный в базе
'5f4dcc3b5aa765d61d8327deb882cf99'
>>> h2 = hashlib.md5(b"password")   # Пароль, введенный пользователем
>>> if p == h2.hexdigest(): print("Пароль правильный")
... 
Пароль правильный

http://ivinside.blogspot.ru/2012/04/aes-pycrypto.html
from Crypto.Cipher import AES
import base64
import os
# размер блока шифрования
BLOCK_SIZE = 32
# символ, использующийся для дополнения шифруемых данных
# до размера, кратного 32 байтам
PADDING = '{'
# функция дополнения
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
# функции шифрования и расшифрования
# результат дополнительно обертывается в base64
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
# генерируем ключ
secret = os.urandom(BLOCK_SIZE)
# создаем объект
cipher = AES.new(secret)
# шифруем строку
encoded = EncodeAES(cipher, 'password')
print 'Encrypted string:', encoded
# расшифровываем строку
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded


Простое шифрование с openssl
http://www.py-my.ru/post/554f1ca43ad2ff04ff2d41ba
Шифруем:
openssl aes-256-cbc -in input_file -out output_file
Дешифруем:
openssl aes-256-cbc -d -in input_file -out output_file
При выполнении запрашивается пароль.


Изображения



мануал

Pillow
$ pip install Pillow
from PIL import Image, ImageFilter
# Считываем изображение
im = Image.open( 'image.jpg' )
# Показываем изображение
im.show()
# Применяем фильтр к изображению
im_sharp = im.filter( ImageFilter.SHARPEN )
# Сохраняем отфильтрованное изображение в новый файл
im_sharp.save( 'image_sharpened.jpg', 'JPEG' )
# Разбиваем изображение на соответствующие bands (то есть на красный, зеленый # и синий для RGB) r,g,b = im_sharp.split()
# Просматриваем данные EXIF, встроенные в изображение
exif_data = im._getexif() exif_data

Как легко вырезать фон на изображении с помощью Python
# pip install rembg pillow
from rembg import remove
from PIL import Image
input_path = "in.png"
output_path = "out.png"
input = Image.open(input_path)
output = remove(input)
output.save(output_path)

python rembg - изменить цвет фона
это даст вам вывод с полностью красным фоном.
removeim = remove(im,bgcolor=[255,0,0,255])
измените bgcolor=[255,0,0,255] на bgcolor=[0,255,0,255], чтобы получить полностью зеленый фон.


cv2
распознавание лиц в реальном времени, видео в реальном времени
https://github.com/Itseez/opencv/blob/master/samples/python/facedetect.py

http://tinyurl.com/opencv3-py-tutorial
http://tinyurl.com/opencv3-py3-ubuntu
http://tinyurl.com/opencv3-py3-anaconda

from cv2 import * import numpy as np
# Считываем изображение img = cv2.imread('testimg.jpg')
# Показываем изображение
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Применяем к изображению фильтр Grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Сохраняем отфильтрованное изображение в новый файл
cv2.imwrite('graytest.jpg',gray)

Scikit-Image
http://scikit-image.org/docs/dev/auto_examples/


Разные модули



модуль Wget
https://pypi.python.org/pypi/wget
>>> import wget
>>> wget.download("http://www.python.org/")
или
python -m wget [options]

модуль xonsh
http://xon.sh/
Xonsh is a Python-ish, BASHwards-looking shell language and command prompt.


модуль sh
http://amoffat.github.io/sh/
>>> from sh import tar
>>> tar("cvf", "/tmp/test.tar", "/my/home/directory/")

>>> from sh import ls
>>> print(ls("/"))

>>> from sh import ifconfig
>>> print(ifconfig("wlan0"))

>>> from sh import find
>>> find("/tmp")

psutil
https://github.com/giampaolo/psutil
>>> import psutil
>>> psutil.cpu_times()
>>> psutil.virtual_memory()
>>> psutil.swap_memory()
>>> psutil.disk_partitions()
>>> psutil.disk_usage('/')
>>> psutil.net_io_counters(pernic=True)
>>> psutil.net_connections()
>>> psutil.net_if_addrs()
>>> psutil.net_if_stats()
>>> psutil.users()
....................

PyAutoGui модуль управления компьютером
pip install pyautogui

import pyautogui as pg

# Получение позиции мыши и вывод в консоль
print(pg.position())

# Передвижение мыши
pg.move(50, 50, duration=0.5)
pg.moveTo(150, 200, 0.5) # Передвигаем к точке относительно экрана

# Нажатие мышкой по определенной точке
pg.click(769, 101)
pg.doubleclick(769, 101) # двойное нажатие
pg.rightclick(769, 101) # нажатие правой кнопкной мыши
pg.leftclick(769, 101) # нажатие левой кнопкной мыши

# Ввод текста
pg.typewrite("itproger.com")
# Выполнения нажатия на клавишу
pg.typewrite(["enter"])

# Выполнения нажатия на сочетание клавиш
pg.hotkey("winleft")
pg.hotkey("winleft", "up")
pg.hotkey("ctrl", "t")

# Вызов различных всплывающих окон
pg.alert("Окно с информацией", "Название окна", button="Текст на кнопке")
age = pg.prompt("Укажите возраст: ", "Название окна")
print(age)
pg.confirm("Вам больше 18?", "Название окна", ("Да, точно", "Нет"))
pg.password("Введите пароль", "Название окна")

# Создание скриншота
pg.screenshot("yourPic.png")

# Мини программа
website = pg.prompt("Введите название сайта:", "Веб сайт", "https://")
pg.click(769, 101)
pg.typewrite(website)
pg.typewrite(["enter"])
pg.screenshot("yourPic.png")



Отладка в python через консоль



href="http://www.py-my.ru/post/4e37737b1d41c8451b000002

Запуск скрипта в отладчике

$ python -m pdb script.py

Либо можно прописать запуск отладчика в самом скрипте, для этого нужно добавить код

import pdb
pdb.set_trace()
Команды
help       Список команд
list	   Отображение листинга, отображает точки останова - "B" в начале строки
list s,e   Часть листинга: s - начальная строка, e - конечная строка
next	   Выполнить следующую команду текущего метода
step	   Выполнить следующую команду со входом внутрь методов
return	   Выполнить текущий метод до конца
until	   Выполнить до конца метода/цикла
args	   Вывести список локальных переменных
locals()   Отображение текущей области видимости (команда не отладчика)
quit	   Выйти из отладчика
where	   Определить текущее местоположение
up	   Перемещение по стеку вверх
down	   Перемещение по стеку вниз
p value	   Вывести на экран значение (print)
pp value   Более красивый вывод на экран
!command   Выполнить произвольную команду
jump       Перейти на строку (выполнить до строки)
run [ 'script.py', 'a', 'b', 'c']	Перезапуск скрипта с параметрами
alias pl pp %1	Создать алиас команды, %1 - входящий параметр
unalias pl	Удаление алиаса

Точки останова
break	        Просмотр установленных т.о. и их номеров
disable 1	Отключить т.о. по номеру
enable 1	Включить т.о. по номеру
break 15	Установить т.о. на указанной строке
break foo	Установить т.о. на методе
break ../script2.py:15	Установить т.о. в другом файле
break 15, i>7	Установить т.о. с условием
condition 1 i>0	Назначить условие на существующую т.о.
tbreak 15	Временная т.о., удаляется при достижении
continue	Продолжить выполнение скрипта
clear	        Удалить все т.о.
clear 1	        Удалить т.о. под номером 1
ignore 1 10	Установка счетчика "не срабатывания", для т.о. 1, пропустить 10 остановок
commands 1
...
end	        Создать сценарий для т.о. 1

Настройки по умолчанию можно сохранить в файле ~/.pdbrc и ./.pdbrc (последний переопределяет настройки первого)

Кратко в деталях
https://unixhow.com/3849/kak-zapustit-python-skript-v-rezhime-otladki
Вам нужно запустить ваш скрипт на пайтоне, используя модель pdb (Python Debug):

python -m pdb merge_lists.py

Увидите нечто такое:

python -m pdb merge_lists.py
> /Users/and3001/Documents/Personal/Coding/Python/merge_lists.py(3)()
-> my_list     = [3, 4, 6, 10, 11, 15]
(Pdb)

Что бы продолжить работу, нажмите n (next). Так пошагово разберете все шаги вашего скрипта.

(Pdb) n
> /Users/and3001/Documents/Personal/Coding/Python/merge_lists.py(4)()
-> alices_list = [1, 5, 8, 12, 14, 19]
(Pdb)

Что бы выйти, нажмите q


Разное



выполнение строки
python3 -c "print(bin(255))"
echo "print(bin(255))" |python3

документация по модулям
pydoc -p 8080
http://localhost:8080/

вывод AST и cкомпилированного кода в веб-интерфейсе
$ pip install instaviz
vi test.py


python3 test.py

printf
https://stackoverflow.com/questions/63627692/making-the-printf-function-of-c-into-python
https://stackoverflow.com/questions/19457227/how-to-print-like-printf-in-python3
импорт из Си

import ctypes
libc = ctypes.cdll.LoadLibrary("libc.so.6")
printf = libc.printf
printf(b'num: %d, txt: %s\n', 42, b'Hello World') # b' - обязательно

импорт из sys

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

printf('num: %d, txt: %s\n', 42, 'Hello World')

сделать функцию

def printf(text, *args):
    print(text % args)

printf('num: %d, txt: %s\n', 42, 'Hello World')


привести код в порядок
python3 -m pip install flake8
flake8 myscript.py # проверить как и где именно нарушается стиль

python3 -m pip install black
black --check myscript.py # проверить будет ли black изменять файл
black --diff myscript.py # показать изменения
black myscript.py # отформатировать

показать текущее время с датой
>>> impotr time
>>> time.ctime(time.time())
>>> time.asctime()

Uuid

>>> import uuid
>>> print uuid.uuid4()
# e7bafa3d-274e-4b0a-b9cc-d898957b4b61

Progressbar


узнать все зарезервированные слова
>>> import keyword
>>> keyword.kwlist

li=[]
if not li: print "empty" # проверить список на пустоту

"12345".zfill(10) # дополнить строку нулями

hasattr(a,'attributename') # узнать имеет ли объект атрибут в Python?

сделать отсортированный список по значениям из cловаря

newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])

разбить список на части одинакового размера
def chunks(l, n):
    for i in xrange(0, len(l), n):
        yield l[i:i+n]


выполнить код в зависимости от версии интерпретатора
import sys
import __future__

if sys.version_info[0] == 2:
    # Python 2 code
else:
    # Python 3 code

или
if sys.version[:1] == '2':
    # Python 2 code
else:
    # Python 3 code


найти файл либы
аналог
ldconfig -p |grep udev

import ctypes.util
ctypes.util.find_library("udev")

в сборке с musl не работает, поэтому патч
https://git.alpinelinux.org/aports/tree/main/python3/musl-find_library.patch

Поймать несколько исключений в одной строке
except (Exception1, Exception2) as e: pass

http://www.user.su/Основы_Python
http://jenyay.net/Programming/Python

легендарный FuzzBuzz
https://megamozg.ru/post/23556/
https://megamozg.ru/post/10308/
В поисках компактного FizzBuzz на Python
a = list(range(1, 101))
for i in a:
    if i%15 == 0: print(i, 'FuzzBuzz')
    if i%3 == 0 and i%15!=0: print(i, 'Fuzz')
    if i%5 == 0 and i%15!=0: print(i, 'Buzz')

Начнём со стандартного, классического решения:
for i in range(1, 101):
    if i%3==0 and i%5==0:
        print('FizzBuzz')
    elif i%3==0:
            print('Fizz')
    elif i%5==0:
            print('Buzz')
    else:
        print(i)

Укладываем стандартное решение в стандартный однострочник
print('\n'.join('FizzBuzz' if i%3==0 and i%5==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else str(i) for i in range(1, 101)))

Избавляемся от Join, приручаем Print
[print('FizzBuzz' if i%3==0 and i%5==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else i) for i in range(1, 101)]

Добавляем срез, укрощаем if else
[print('FizzBuzz'[4 if i%3 else 0:4 if i%5 else 8] or i) for i in range(1, 101)]

Оптимизируем срез, избавляемся от if else
[print('FizzBuzz'[i*i%3*4:8--i**4%5] or i) for i in range(1, 101)]

Сократили неплохо. Но, похоже с этой вариацией дальше не продвинуться. Пробуем иной вариант.
Заменяем срез конкатенацией, вертаем оператор modulo
[print('Fizz'*(i%3==0)+'Buzz'*(i%5==0) or i) for i in range(1, 101)]

Оптимизируем решение. Выравниваем по длине со срезом
[print((i%3<1)*'Fizz'+(i%5<1)*'Buzz' or i) for i in range(1, 101)]

Уходим в отрыв. Модифицируем окончательный вариант
[print(i%3//2*'Fizz'+i%5//4*'Buzz' or i+1) for i in range(100)]

А если избавиться от списка, будет ещё короче и, возможно, быстрее:
for i in range(100):print(i%3//2*'Fizz'+i%5//4*'Buzz'or i+1)




pyperclip
взято тут
видеоуроки по теме

pip3 install pyperclip




Занимательные фигуры на Python в одну строку
странности
(Link)
>>> type( {} ),type( { () } )
(, )

>>> 1, + 2,
(1, 2)

>>> (1,) + (2,)
(1, 2)

>>> (1,) + 2,
Traceback (most recent call last):
File "<input ... >", line 1, in 
(1,) + 2

>>> __ = [1,2]; _= range(5);[_ for _ in _ if _ not in __]
[0, 3, 4]

>>> __
[1, 2]



Кристиан Майер «Однострочники Python» 2022
https://github.com/finxter/PythonOneLiners



консоль python в роли командной строки часть 2

заглянуть

Модули



Шоу Энтони «Внутри CPython» 2023

узнать конфигурацию сборки python
python3 -m sysconfig

документация по модулям
pydoc -p 8080
http://localhost:8080/

импорт из github.com
https://github.com/nvbn/import_from_github_com
pip install import_from_github_com

чтобы загрузить модуль нужно его импортировать: import модуль, например
import os
удалить модуль (или переменную)
del os

узнать все модули:
pydoc3 -b
pydoc -b

или вбить в консоли python
help('modules')
pip freeze

узнать что входит в модуль:
import sys
sys. # нажать на Tab

узнать где расположен файл с модулем
import модуль
print(модуль.__file__)

Встроенные функции Python содержатся в модуле __builtin__(импортировать его для использования функций не нужно):
dir(__builtins__)
__builtins__. # нажать на Tab

В возвращаемом функцией dir() списке не содержится встроенных функций и переменных. Если вы хотите получить их список, то они определены в стандартном модуле builtins
builtins - встроенные модули, у которых отсутствует имя файла
>>> import builtins
>>> dir(builtins)
>>> import pprint, sys
>>> pprint.pprint(sys.modules)
>>> pprint.pprint(sys.path)

sys.path представляет собой список файловых путей, в которых лежат модули
интерпретарор ищет модули вначале в текущем каталоге, а затем в каталогах, указанных в переменной окружения PYTHONPATH

Получаем список переменных внутри функции
>>> print(locals())
>>> print(globals())
Функция locals() возвращает словарь переменных из текущего пространства имён Ключи словаря — названия переменных, а значения — это их значения.
С помощью похожей функции globals() можно получить все переменные конкретного модуля в таком же виде


пути загрузки модулей
import sys
print(sys.path)

автоматический путь к каталогу с модулями
import sys
sys.path.append(f"/usr/lib/python{sys.version_info.major}.{sys.version_info.minor}/mprdaemon")

import platform
print(f'/usr/lib/python{platform.python_version()[:3]}/distutils') # каталог distutils дан для примера
sys.path.append(f'/usr/lib/python{platform.python_version()[:3]}/distutils')

Откуда грузятся модули?
__import__
sys.modules
sys.path
.pth файлы
sys.meta_path
sys.path_hooks
sys.path_import_cache
http://pep8.ru/doc/tutorial-3.1/6.html
http://asvetlov.blogspot.ru/2010/05/2.html

Решение проблем с модулями и пакетами Python

impotr time
time.ctime(time.time()) # показать текущее время с датой
time.asctime()

import os
os.system('команда') # запустит команду, напр. os.system('mc')
os.getcwd() # узнать местонахождение
os.chdir('/home') # переместится в /home
os.listdir('/usr/src') # узнать что находится в /usr/src
print os.path.isfile('fname') # проверить, существует ли файл
os.stat('/home/user/2') # узнать сведения о файле или каталоге /home/user/2
os.path.getsize('/home/user/path/hello.txt') # узнать размер файла
list(os.popen('du -sh /home/user/path')) # узнать размер каталога path
os.mkdir('/home/user/path') # создать каталог /home/user/path
os.makedirs('/home/user/path/1/1/1/1') # Создать каталог и промежуточные каталоги
os.rmdir('/home/user/path') # удалить каталог /home/user/path
os.removedirs('/home/user/path/1/1/1/1') # автоматически удалит все пустые родительские каталоги (~/1/1/1)
os.remove('/home/user/path/hello.txt') # удалит файл hello.txt
os.rename('/home/user/path', '/home/user/tmp/path') # переименует (или перенесёт в существующий каталог) каатог или файл
os.symlink('/home/user/path', '/home/user/22') # создаст символическую ссылку с именем 22
os.system('id') # узнать свой id
os.chown('/home/user/path', uid, gid ) # сменить владельца -uid, группу - gid
uid root - 0, gid root - 0
os.chmod('/home/user/path' 0o100644) # дать права (в восьмеричной системе)

oct(число) # число в восьмеричной системе
hex(число) # в шестнадцатеричной
bin(число) # в двоичной
int(0o1000) # 512 в десятеричной
int(0b1000) # 8
int(0x1000) # 4096

import shutil
shutil.copyfile('/home/user/path/hello.txt', '/home/user/tmp/hel.txt') # cкопирует файл с именем hel.txt, метаданные (права и тд) не копирует
shutil.copy('/home/user/path/hello.txt', '/home/user/tmp/hel.txt') # cкопирует файл с именем hel.txt, копирует метаданные
shutil.copy2('/home/user/path/hello.txt', '/home/user/tmp/hel.txt') # cкопирует файл с именем hel.txt, полное копирование метаданных
shutil.move('/home/user/path', '/home/user/tmp/tmp/tmp') # переместить/переименовать каталог/файл если промежуточных каталогов нет, то создаст оные
shutil.move('/home/user/path/hello.txt', '/home/user/tmp') # перенесёт с тем же именем в каталог tmp
shutil.copytree('/home/user/path', '/home/user/tmp/new') # скопирует каталог path со всем содержимым (дерево каталогов) в tmp с именем new
shutil.rmtree('/home/user/tmp/new') # удалит каталог new со всем содержимым


Управление модулями, pip



wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

$ pip help # помощь по доступным командам.
$ pip install package_name # установка пакета(ов).
$ pip uninstall package_name # удаление пакета(ов).
$ pip-autoremove package_name # удаление пакета(ов), с установленными зависимостями
$ pip install -U # обновление пакета(ов).
$ pip install --force-reinstall # при обновлении, переустановить пакет, даже если он последней версии.
$ pip list # Смотрим на список установленных (доступных) библиотек
$ pip list -o # узнать, какие библиотеки можно обновить
$ pip show package_name # узнать версию, местонахождение на диске и зависимости.
$ pip search pycp # покажет список всех пакетов, в названии которых есть pycp
$ pip --proxy user:passwd@proxy.server:port # использование с прокси.
$ pip completion --bash >> ~/.bashrc # Автодополнение
http://asvetlov.blogspot.ru/2014/05/pip.html

Как обновить существующие пакеты? (пользоваться осторожно, лучше в virtualenv или pyenv )

$ pip install pip-review
$ pip-review --local --interactive
или
$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
$ for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done
$ sudo pip install -U $(pip freeze | awk '{split($0, a, "=="); print a[1]}')
$ sudo pip install -U $(pip freeze | cut -d '=' -f 1)

http://python.cx/blog/article/3
http://xgu.ru/wiki/Работа_с_модулями_в_Python

Удаление ненужных пакетов

$ pip install pip-autoremove
$ pip install Flask Sphinx
$ pip-autoremove Flask Sphinx -y
http://python.cx/blog/article/PyPi_pip_python


Проверка наличия



Проверка существования переменной в локальной видимости
if 'myVar' in locals():
# myVar exists

Проверка существования переменной в глобальной видимости
if 'myVar' in globals():
# myVar exists

Проверка существования переменной используя исключения
try:
myVar
except NameError:
myVar = None

Проверка существования ключа в словаре способ 1
if key in dictname:
# key exists in dictname

Проверка существования ключа в словаре способ 2
try:
dictname['key']
except KeyError:
dictname['key'] = None

Проверка существования индекса в списке
try:
dictname['1']
except IndexError:
dictname['1'] = None

Проверка наличия метода, свойства в объекте
if hasattr(obj, 'attr_name'):
# obj.attr_name exists


Оболочки, библиотеки



https://ipython.org/
http://xon.sh/
https://amoffat.github.io/sh/
https://github.com/selectel/pyte
https://github.com/eliangcs/http-prompt
http://bpython-interpreter.org/
https://github.com/jonathanslenders/ptpython
https://github.com/jonathanslenders/pymux/
https://github.com/jonathanslenders/python-prompt-toolkit


Исходный код



Посмотреть код функции:
>>> import inspect
>>> import abc
>>> print(inspect.getsourcefile(abc))
/usr/lib/python3.4/abc.py
>>> print(inspect.getsource(abc))
# Copyright 2007 Google, Inc. All Rights Reserved.
# Licensed to PSF under a Contributor Agreement.

"""Abstract Base Classes (ABCs) according to PEP 3119."""

from _weakrefset import WeakSet
.................
>>> print(inspect.getmodule(abc))
<module 'abc' from '/usr/lib/python3.4/abc.py'>
при попытке посмотреть код созданной в интерпретаторе функции выдаст ошибку:
 
>>> def object():
...     print("hello")
... 
>>> print(inspect.getsource(object))
..................
OSError: could not get source code

но это возможно в IPython:

In [1]: def object():
   ...:     print("hello")
   ...:     

In [2]: import inspect

In [3]: print(inspect.getsource(object))
def object():
    print("hello")

или с помощью сторонних модулей:
нужно установить dill
sudo apt install python3-dill
или
sudo pip3 install dill

>>> def object():
...     print("hello")
... 
>>> import dill
>>> print(dill.source.getsource(object))
def object():
    print("hello")

>>> import dis
>>> dis.dis(object)
  2           0 LOAD_GLOBAL              0 (print)
              3 LOAD_CONST               1 ('hello')
              6 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
              9 POP_TOP
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE
>>> 


Операции с числами



round(632.742774, 3) # округлит до 632.743 (3 - сколько знаков после запятой)

a=[1, 2, 3, 4]
for x in a: print(x + 3, end = ',')
list(map((lambda x: x + 3), a))

from math import *
D={'S':sin, 'C':cos, 'E':exp}
D['S'](pi/2)
D['C'](pi)
D['E'](1)

http://ru_python.livejournal.com/337028.html
>>> from decimal import Decimal
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
Decimal('0.0')
>>> from fractions import Fraction
>>> Fraction(1,10)+Fraction(1,10)+Fraction(1,10)-Fraction(3,10)
Fraction(0, 1)

from fractions import Fraction as fr
>>> fr('1/3') + fr('1/3') + fr('1/3')
Fraction(1, 1)
>>> fr('9/7') - fr('20/21')
Fraction(1, 3)
>>>
>>> from sympy import *
>>> x = Symbol('x')
>>> y = Symbol('y')
>>> x + x + y*3 -y
2*x + 2*y
>>> expand((x+1)*(y-1)**3)
x*y**3 - 3*x*y**2 + 3*x*y - x + y**3 - 3*y**2 + 3*y - 1
>>> expand(cos(x+y), trig=True)
-sin(x)*sin(y) + cos(x)*cos(y)
>>> simplify((x+x*x*y)/x)
x*y + 1
>>> solve(x**2 - y, x)
[-sqrt(y), sqrt(y)]
>>> solve(exp(x)+1, x)
[I*pi]

особенности двоичной математики
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> 0.7-0.5-0.2
-5.551115123125783e-17
>>> (0.1+0.1+0.1-0.3)-(0.7-0.5-0.2)
1.1102230246251565e-16
>>> (0.7-0.5-0.2)-(0.1+0.1+0.1-0.3)
-1.1102230246251565e-16

зато тут магия куда то делась
>>> (0.1+0.1+0.1-0.3)+(0.7-0.5-0.2)
0.0

>>> 0.1 + 0.1 + 0.1 - 0.3 == 1.0 / (2**54)
True
>>> 0.7-0.5-0.2 == -1.0 / (2**54)
True
>>> 5.551115123125783e-17 == 1.0 / (2**54)
True
>>> 0.1 + 0.1 + 0.1 - 0.3 == math.pow(2, -54)
True


Работа с файлами



open('/home/user/path/hello.txt', 'w') # создаст пустой файл (аналог touch hello.txt)

f=open('/home/user/path/hello.txt', 'w') # создать или открыть существующий файл hello.txt на запись
'r' открытие на чтение (является значением по умолчанию).
'w' открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
'x' открытие на запись, если файла не существует, иначе исключение.
'a' открытие на дозапись, информация добавляется в конец файла.
'b' открытие в двоичном режиме.
't' открытие в текстовом режиме (является значением по умолчанию).
'+' открытие на чтение и запись
'r+' означает, что файл доступен как для чтения, так и  для записи,
при этом содержимое существующих файлов сохраняется
'w+', позволяет выполнять операции чтения и записи, но создает файл заново,
уничтожая прежнее его содержимое

f.write('Привет, всё норм.')
f.close()# закрыть файл

f=open('/home/user/path/hello.txt', 'r') # открыть файл на чтение

f.read(8) # читает 8 символов
f.readline() # читает построчно
f.__next__()
next(f)
f.readlines() # читает файл целиком
f.readlines(200) # читает 200 символов
f.seek(0) # перейти в начало файла # цифры - позиция
f.close()

f=open('/home/user/path/hello.txt', 'a') # открыть файл на дозапись
ABC='очень,очень,многобукав' # создание переменной ABC

f.writelines('ABC') # допишет в файл буквы ABC
f.writelines(ABC) # допишет в файл очень,очень,многобукав

for line in output.splitlines(): print(line) # разбить текст на отдельные строки

file.writelines(['Hello file world!\n', 'Bye file world.\n']) # записывает все строки из списка

list(map(str.rstrip, open('/home/user/path/hello.txt').readlines(200))) # прочтёт 200 символов, без /n перевода строки

list(map(str.splitlines, open('/home/user/path/hello.txt').readlines(200)))

open('somefile.txt', 'w').write("G'day Bruce\n") # записать во временный файл
open('somefile.txt', 'r').read() # прочитать временный файл

После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:
file.close()
with open(filename) as myfile # с применением менеджера контекста (гарантировано закрыть файл после использования)

пример передачи данных с текстового файла в переменную
cat /path/to/file
NAME="file1"
VERSION=1.1.1

def get_version():
    with open('/path/to/file','r') as myfile:
        content = myfile.read()
        values = content.split("\n")
        get_version_file = str(content.split("\n")[content.count('VERSION')]).split('=')[-1]
    return get_version_file

#file_src = get_version()
file_src = '"{0}"'.format(str(get_version())) # чтоб в кавычках было
print("version = ", file_src )

поиск файлов

import glob
glob.glob('/usr/src/*.deb') # покажет список deb пакетов в /usr/src, поиск файлов по маске
os.system('grep -r /usr/lib/python3 -e __all__ ')

сравнение файлов

import filecmp
filecmp('/home/user/path/hello.txt', '/home/user/tmp/hello.txt') # сравнение файлов True - совпадают, False - нет

сравнение каталогов

filecmp.dircmp('/home/user/path', '/home/user/tmp').report() # сравнение каталогов
diff_files - сообщает о разнице меж одноимёнными файлами
same_files - сообщает о идентичных файлах в двух каталогах
common - выводит список общих имён и каталогов
report() - подробный отчёт о сравнении каталогов
report_full_closure() - подробный отчёт сравнения всех каталогов, вложенных файлов и каталогов

http://iakovlev.org/index.html?p=577&m=1&l1=2

Сортируем файлы с помощью Python
https://github.com/lesskop/file-sorter


Работа с БД



C:\...\PP4E\Dbase> python
>>> import dbm                  # получить интерфейс: bsddb, gnu, ndbm, dumb
>>> file = dbm.open('movie', 'c') # создать файл DBM с именем 'movie'
>>> file['Batman'] = 'Pow!'        # сохранить строку с ключом 'Batman'
>>> file.keys()                    # получить список ключей в файле
[b'Batman']
>>> file['Batman']                 # извлечь значение по ключу 'Batman'
b'Pow!'
>>> who = ['Robin', 'Cat-woman', 'Joker']
>>> what = ['Bang!', 'Splat!', 'Wham!']
>>> for i in range(len(who)):
...     file[who[i]] = what[i]     # добавить еще 3 "записи"
...
>>> file.keys()
[b'Cat-woman', b'Batman', b'Joker', b'Robin']
>>> len(file), 'Robin' in file, file['Joker']
(4, True, b'Wham!')
>>> for key in file.keys(): print(key, file[key])
>>> for key in file: print(key.decode(), file[key].decode())
>>> file['Batman'] = 'Ka-Boom!' # изменить значение ключа Batman
>>> del file['Robin']            # удалить запись Robin
>>> file.close()                   # иногда требуется закрывать явно


упаковка объектов

pickle
>>> table = {'a': [1, 2, 3],
             'b': ['spam', 'eggs'],
             'c': {'name':'bob'}}
>>>
>>> import pickle
>>> mydb = open('dbase', 'wb')
>>> pickle.dump(table, mydb)

C:\...\PP4E\Dbase> python
>>> import pickle
>>> mydb = open('dbase', 'rb')
>>> table = pickle.load(mydb)
>>> table
{'a': [1, 2, 3], 'c': {'name': 'bob'}, 'b': ['spam', 'eggs']}


shelve
import shelve
dbase = shelve.open("mydbase")
dbase['key'] = object # сохранить объект
value = dbase['key'] # извлечь объект
len(dbase) # количество хранящихся элементов
dbase.keys() # список ключей хранящихся элементов


JSON
http://python-lab.ru/documentation/27/stdlib/json.html
https://pythonworld.ru/moduli/modul-json.html
Кодирование JSON
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'

>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'

Красивый вывод:
>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True,
...                  indent=4, separators=(',', ': '))
{
    "4": 5,
    "6": 7
}

Декодироние JSON

>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]

Использование json.tool из шелла для проверки и красивого вывода:
$ echo '{"json":"obj"}' | python -mjson.tool
{
    "json": "obj"
}


sqlite3
>>> import sqlite3
>>> conn = sqlite3.connect('dbase1') # при необходимости используйте полный путь к файлу
# мож­но пе­ре­дать спе­ци­аль­ную стро­ку «:memory:», что­бы соз­дать вре­мен­ную ба­зу дан­ных в па­мя­ти
>>> curs = conn.cursor()
>>> tblcmd = 'create table people (name char(30), job char(10), pay int(4))'
>>> curs.execute(tblcmd)
>>> curs.executemany('insert into people values (?, ?, ?)',
...          [ ('Sue', 'mus', '70000'),
...            ('Ann', 'mus', '60000')])
>>> rows = [['Tom', 'mgr', 100000],
...         ['Kim', 'adm', 30000],
...         ['pat', 'dev', 90000]]
>>> for row in rows:
...     curs.execute('insert into people values (? , ?, ?)', row)
...
>>> conn.commit() # сохранить изменения в базе
>>> curs.execute('select * from people') # выбрать записи
>>> curs.fetchall() # из­влечь записи
[('Bob', 'dev', 5000), ('Sue', 'mus', 70000), ('Ann', 'mus', 60000), ('Tom',
'mgr', 100000), ('Kim', 'adm', 30000), ('pat', 'dev', 90000)]

>>> for (name, job, pay) in curs.fetchall():
...     print(name, ':', pay)

>>> curs.execute('select * from people')
>>> colnames = [desc[0] for desc in curs.description]
>>> colnames
['name', 'job', 'pay']
>>> for row in curs.fetchall():
...     for name, value in zip(colnames, row):
...        print(name, '\t=>', value)
...    print()

>>> curs.execute('delete from people where name = ?', ['Bob'])
>>> curs.execute('delete from people where pay >= ?',(90000,))
>>> curs.execute('select * from people')
>>> curs.fetchall()
[('Sue', 'mus', 70000), ('Ann', 'mus', 65000), ('Kim', 'adm', 65000)]
>>> conn.commit()

>>> curs.execute('select * from people')
>>> colnames = [desc[0] for desc in curs.description]
>>> rowdicts = [dict(zip(colnames, row)) for row in curs.fetchall()]
>>> rowdicts[0]
{'pay': 70000, 'job': 'mus', 'name': 'Sue'}

>>> from sqlite3 import connect
>>> conn = connect('dbase1')
>>> curs = conn.cursor()
>>> curs.execute('delete from people')      # очистить таблицу
>>> curs.execute('select * from people')
>>> curs.fetchall()
[]
>>> file = open('data.txt')
>>> rows = [line.rstrip().split(',') for line in file]
>>> rows[0]
['bob', 'devel', '50000']

>>> curs.execute("select sum(pay), avg(pay) from people where job = 'devel'")
>>> curs.fetchall()
[(150000, 50000.0)]

http://www.internet-technologies.ru/articles/article_2190.html


records
>>> import records 
>>> db = records.Database('sqlite:///mydb.db') 
>>> 
>>> rows = db.query('SELECT * FROM cheese') 
>>> print(rows.dataset) 
name         |price 
-------------|----- 
red leicester|1.0 
wensleydale  |2.2 
>>> 
>>> print(rows.export('json')) 
[{"name": "red leicester", "price": 1.0}, {"name": "wensleydale", "price": 2.2}]

$ records 'SELECT * FROM cheese' yaml --url=sqlite:///mydb.db 
- {name: red leicester, price: 1.0} 
- {name: wensleydale, price: 2.2} 
$ records 'SELECT * FROM cheese' xlsx --url=sqlite:///mydb.db > cheeses.xlsx



Работа с архивами



создание архива
$ python3
>>> import shutil
>>> shutil.make_archive('/home/user/каталог/имя_архива', 'zip', '/home/user/path')

сделает архив содержимого каталога path и положит в указанном месте с указанным именем,
добавив расширение сжатия (zip), форматы сжатия zip gztar bztar xz

распаковка архива
$ python3
>>> import zipfile
>>> zipfile.ZipFile('/home/user/file.zip').extractall('/home/user/tmp/new')

распакует архив в папку new, папка будет создана, если её нет

или просто в консоли использовать модули python:
https://docs.python.org/3/library/tarfile.html

$ python3 -m tarfile -c $HOME/tmp/new_archiv.tar.bz2 $HOME/tmp/rt/ - создать архив
$ python3 -m tarfile -e $HOME/tmp/new_archiv.tar.bz2 $HOME/tmp/rt/1 - распаковать архив

аналогично для форматов tar.gz и tar.xz


Работа со строками



Строки. Функции и методы строк
Использование регулярных выражений в Python для новичков
41 вопрос о работе со строками в Python
в python3 достаточно просто присвоить строку
$ python3
>>> str='Самой используемой кодировкой в мире является utf8'
>>> str
'Самой используемой кодировкой в мире является utf8'

в python2 чуть больше телодвижений
$ python
>>> str=u'Самой используемой кодировкой в мире является utf8'
>>> print str
Самой используемой кодировкой в мире является utf8

Кодировки в python

Методы строк
str.find(substr)
Вы­пол­ня­ет по­иск под­стро­ки.
str.replace(old, new)
Вы­пол­ня­ет под­ста­нов­ку под­стро­ки.
str.split(delimiter)
Раз­би­ва­ет стро­ку по ука­зан­но­му раз­де­ли­те­лю или про­бель­ным сим­во­лам.
str.join(iterable)
Объ­еди­ня­ет под­стро­ки, встав­ляя раз­де­ли­те­ли ме­ж­ду ни­ми.
str.strip()
Уда­ля­ет ве­ду­щие и за­вер­шаю­щие про­бель­ные сим­во­лы.
str.rstrip()
Уда­ля­ет толь­ко за­вер­шаю­щие про­бель­ные сим­во­лы, ес­ли они име­ют­ся.
str.rjust(width)
Вы­рав­ни­ва­ет стро­ку по пра­во­му краю в по­ле фик­си­ро­ван­ной ши­ри­ны.
str.upper()
Пе­ре­во­дит все сим­во­лы в верх­ний ре­гистр.
str.isupper()
Про­ве­ря­ет – все ли сим­во­лы в стро­ке яв­ля­ют­ся сим­во­ла­ми верх­не­го ре­ги­ст­ра.
str.isdigit()
Про­ве­ря­ет – все ли сим­во­лы в стро­ке яв­ля­ют­ся циф­ра­ми.
str.endswith(substr-or-tuple)
Про­ве­ря­ет при­сут­ст­вие под­стро­ки (или од­но­го из ва­ри­ан­тов в кор­те­же) в кон­це дан­ной стро­ки.
str.startswith(substr-or-tuple)
Про­ве­ря­ет при­сут­ст­вие под­стро­ки (или од­но­го из ва­ри­ан­тов в кор­те­же) в на­ча­ле дан­ной стро­ки.


преобразование строк в кортеж, список и обратно
>>> 'spam eggs ham'.split()
['spam', 'eggs', 'ham']
>>> tuple(['spam', 'eggs', 'ham'])
('spam', 'eggs', 'ham')
>>> list(('spam', 'eggs', 'ham'))
['spam', 'eggs', 'ham']
>>> list('spam eggs ham')
['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm']
>>> ''.join(['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm'])
'spam eggs ham'
>>> '*'.join('spam eggs ham')
's*p*a*m* *e*g*g*s* *h*a*m'
>>> 's*p*a*m* *e*g*g*s* *h*a*m'.split('*')
['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm']
>>> ''.join(['s', 'p', 'a', 'm', ' ', 'e', 'g', 'g', 's', ' ', 'h', 'a', 'm'])
'spam eggs ham'

вредный совет
выпрямить вложенные списки с помощью функции sum()
>>> l=[['a', 'b', 'c'], ['1', '2'], ['#']]
>>> sum(l, [])
['a', 'b', 'c', '1', '2', '#']



столбик
типа 
perl -pa0e'$_=join",",@F' 1.txt > 2.txt
sed ':a;N;$!ba;s/\n/ /g' my.txt > my1.txt

>>> s="""
... Keujiuz8 
... ze5iiFee 
... chuF7hae 
... Quah8equ 
... UZiloh9A 
... quiWin0d 
... Fael9uo8 
... pheeph7M
... """
>>> s
'\nKeujiuz8 \nze5iiFee \nchuF7hae \nQuah8equ \nUZiloh9A \nquiWin0d \nFael9uo8 \npheeph7M\n'
>>> ' '.join(s.split())
'Keujiuz8 ze5iiFee chuF7hae Quah8equ UZiloh9A quiWin0d Fael9uo8 pheeph7M'

>>> d=s.split()
>>> for i in range(len(d)): print(d[i])
... 
Keujiuz8
ze5iiFee
chuF7hae
Quah8equ
UZiloh9A
quiWin0d
Fael9uo8
pheeph7M

>>> a=['sjdej', 'jsjjjsj', 'jdeechfeo']
>>> for i in a: print(i)
... 
sjdej
jsjjjsj
jdeechfeo

>>> for i in range(1,4): print ("abc"*i)
... 
abc
abcabc
abcabcabc

>>> for i in range(2, 22, 3): print('Номер ('+ str(i)+')')
... 
Номер (2)
Номер (5)
Номер (8)
Номер (11)
Номер (14)
Номер (17)
Номер (20)

>>> supplers = ['pens', 'staplers', 'binders']
>>> for i in range(len(supplers)):
...     print('Index ' + str(i) + ' in supplers is: ' + supplers[i])
... 
Index 0 in supplers is: pens
Index 1 in supplers is: staplers
Index 2 in supplers is: binders


регистр строки
>>> str='blablabla'
>>> str=str.upper()
>>> str
'BLABLABLA'
>>> str=str.lower()
>>> str
'blablabla'
>>> str=str.capitalize()
>>> str
'Blablabla'
>>> str=str.swapcase()
>>> str
'bLABLABLA'
>>> str=str.title()
>>> str
'Blablabla'
>>> 'bLABLABLA'.casefold()
'blablabla'


перевернуть строку
>>> a=list('habrahabr')
>>> a.reverse()
>>> ''.join(a)
'rbaharbah'

>>> 'hanrahabr'[::-1]
'rbaharnah'


Работа с ошибками
>>> import difflib 
>>> capitals = ('Montgomery', 'Juneau', 'Phoenix', 'Little Rock') 
>>> difflib.get_close_matches('Fenix', capitals) 
['Phoenix']


разные манипуляции
>>> 'spam eggs ham'[5:10]            # извлечение среза: подстрока
'eggs '
>>> 'spam ' + 'eggs ham'             # конкатенация (и *, len(), [ix])
'spam eggs ham'
>>> 'spam %s %s' % ('eggs', 'ham') # выражение форматирования: подстановка
'spam eggs ham'
>>> 'spam {} {}'.format('eggs', 'ham') # метод форматирования: альтернатива %
'spam eggs ham'
>>> 'spam = "%-5s", %+06d' % ('ham', 99) # более сложное форматирование
'spam = "ham ", +00099'
>>> 'spam = "{0:<5}", {1:+06}'.format('ham', 99)
'spam = "ham ", +00099'

>>> '-'.join([str(i) for i in range(10)])
'0-1-2-3-4-5-6-7-8-9'
>>> "bla {} blabl {} lala {}".format(1,2,3) 
'bla 1 blabl 2 lala 3'
>>> "bla {2} blabl {0:=10} lala {1}".format(1,2,3) 
'bla 3 blabl          1 lala 2'
>>> "bla   blabl  lala ".split()
['bla', 'blabl', 'lala']
>>> "blahblablhlala".split('h')
['bla', 'blabl', 'lala']
>>> "blahblablhlala".replace('a','z')
'blzhblzblhlzlz'
>>> '_'.join([str(i) for i in range(10)])
'0_1_2_3_4_5_6_7_8_9'

>>> y = {c.upper() * 4 for c in 'spamham'} # генератор множеств
>>> y
{'SSSS', 'AAAA', 'MMMM', 'HHHH', 'PPPP'}
>>>
>>> list(set([1, 2, 3, 1, 2]))             # удалит дубликаты из списка
[1, 2, 3]

>>> L = [{'n':3}, {'n':20}, {'n':0}, {'n':9}]
>>> L.sort(key=lambda x: x['n'])
>>> L
[{'n': 0}, {'n': 3}, {'n': 9}, {'n': 20}]

>>> L = [2, 4, 1, 3, 5]
>>> L.reverse()
>>> L
[5, 3, 1, 4, 2]
>>> L = [2, 4, 1, 3, 5]
>>> list(reversed(L))
[5, 3, 1, 4, 2]

>>> 'A B C D'.split()
['A', 'B', 'C', 'D']
>>> 'A+B+C+D'.split('+')
['A', 'B', 'C', 'D']
>>> '--'.join(['a', 'b', 'c'])
'a--b--c'

>>> 'aaa--bbb--ccc'.split('--')
['aaa', 'bbb', 'ccc']
>>> 'aaa--bbb--ccc'.replace('--', '...') 
'aaa...bbb...ccc' 

>>> x=[34,56]
>>> print((''.join(list(map(str,x)))),)
3456

удалить общие строки из двух списков

>>> a="abb bbb ccc eee".split()
>>> b="aab bbb ccd eee".split()
>>> aa=set(a)
>>> bb=set(b)
>>> c = bb.difference(aa)
>>> print(c)
{'aab', 'ccd'}

удаление повторяющихся в списке значений:

>>> nums = [1, 3, 2, 3, 1, 2, 3, 1, 2]
>>> unique_nums = list(set(nums))
>>> unique_nums
[1, 2, 3]



замена символов
Замена в строке с помощью Python

аналог sed 's/Windows/Linux/g'
>>> s='Windows Windows Windows'
>>> s.replace('Windows', 'Linux')
'Linux Linux Linux'

аналог sed -i 's/Windows/Linux/g' text
>>> old="Windows"
>>> new="Linux"
>>> text="Windows Windows Windows"
>>> import re
>>> print(re.sub(r'\bWindows\b', 'Linux', line))


бы­ст­ро за­ме­нить в фай­ле ка­ж­дый сим­вол та­бу­ля­ции че­тырь­мя точ­ка­ми
from sys import *
stdout.write(('.' * 4).join(stdin.read().split('\t'))) 

[a-zA-Z0-9_]+ со­от­вет­ст­ву­ет са­мой длин­ной стро­ке из од­но­го или бо­лее сим­во­лов букв, цифр или под­чер­ки­ва­ний. 
\w Лю­бой ал­фа­вит­но-циф­ро­вой сим­вол ([a-zA-Z0-9_] для ASCII)
[\t ]* со­от­вет­ст­ву­ет ну­лю или бо­лее та­бу­ля­ций и про­бе­лов        

>>> table = "".maketrans('12', '34', 'cs')
>>> '1212cs 5612cs cscs'.translate(table)
'3434 5634 '

>>> intab = "aeiou"
>>> outtab = "12345"
>>> trantab = str.maketrans(intab, outtab)
>>> str = "this is string example....wow!!!"
>>> print (str.translate(trantab))
th3s 3s str3ng 2x1mpl2....w4w!!!

strip() удаляет начальные и конечные пробелы
replace() удаляет все пробелы из строки
translate() избавиться от всех пробелов, а также от символов новой строки
" ".join(s.split()) избавиться от всех повторяющихся пробелов и символов новой строки
'строка'[1:] удалить первый символ строки

добавить символы в начало и конец строки
yourstring = "L{0}LL".format(yourstring) 
yourstring = ''.join(('L','yourstring','LL'))
yourstring = "L%sLL" % yourstring
yourstring = "L" + yourstring + "LL"

yourstring = '"'{0}'"'.format(yourstring) добавить кавычки в начало и конец строки



Очистка входных строковых данных
Полезные советы по Python, которых вы ещё не встречали
user_input = "This\nstring has\tsome whitespaces...\r\n"

character_map = {
 ord('\n') : ' ',
 ord('\t') : ' ',
 ord('\r') : None
}
user_input.translate(character_map)  # This string has some whitespaces... "


модуль re
аналог sed -i 's/Windows/Linux/g' text
>>> old="Windows"
>>> new="Linux"
>>> text="Windows Windows Windows"
>>> import re
>>> print(re.sub(r'\bWindows\b', 'Linux', line))

>>> import re
>>> re.split('--', 'aaa--bbb--ccc')
['aaa', 'bbb', 'ccc']
>>> re.sub('--', '...', 'aaa--bbb--ccc')    # случай с единственным разделителем
'aaa...bbb...ccc'
>>> re.split('--|==', 'aaa--bbb==ccc')      # разбить по -- или ==
['aaa', 'bbb', 'ccc']
>>> re.sub('--|==', '...', 'aaa--bbb==ccc') # заменить -- или ==
'aaa...bbb...ccc'
>>> re.split('[-=]', 'aaa-bbb=ccc')      # односимвольные альтернативы
['aaa', 'bbb', 'ccc']
>>> re.split('(--)|(==)', 'aaa--bbb==ccc')     # результат разбиения
['aaa', '--', None, 'bbb', None, '==', 'ccc'] # включает группы
>>> re.split('(?:--)|(?:==)', 'aaa--bbb==ccc') # часть выражения, не группы
['aaa', 'bbb', 'ccc']


использование обратного слэша
>>> a='Это не будет развернуто: \nновая строка'
>>> print(a)
Это не будет развернуто: 
новая строка
>>> a='Это не будет развернуто: \tновая строка'
>>> print(a)
Это не будет развернуто: 	новая строка
>>> a='Это не будет развернуто: \vновая строка'
>>> print(a)
Это не будет развернуто: 
                         новая строка
>>> a='Это не будет развернуто: \fновая строка'
>>> print(a)
Это не будет развернуто: 
                         новая строка
>>> a='Однажды Арнольд сказал: "I\'ll be back"'
>>> print(a)
Однажды Арнольд сказал: "I'll be back"


5 СПОСОБОВ ФОРМАТИРОВАНИЯ СТРОК
https://shultais.education/blog/python-f-strings

>>> name = "User"
>>> age = 100
>>> print("Меня зовут " + name + ". Мне " + str(age) + " лет.")
>>> Меня зовут User. Мне 100 лет.

>>> name = "User"
>>> age = 100
>>> print("Меня зовут %s. Мне %d лет." % (name, age))
>>> Меня зовут User. Мне 100 лет.
>>> print("Меня зовут %(name)s. Мне %(age)d лет." % {"name": name, "age": age})
>>> Меня зовут User. Мне 100 лет.

>>> from string import Template
>>> name = "User"
>>> age = 100
>>> s = Template('Меня зовут $name. Мне $age лет.')
>>> print(s.substitute(name=name, age=age))
>>> Меня зовут User. Мне 100 лет.

>>> name = "User"
>>> age = 100
>>> print("Меня зовут {}. Мне {} лет.".format(name, age)
>>> Меня зовут User. Мне 100 лет.
>>> print("Меня зовут {name} Мне {age} лет.".format(age=age, name=name)
>>> Меня зовут User. Мне 100 лет.

# начиная с Python 3.6
>>> name = "User" 
>>> age = 100
>>> print(f"Меня зовут {name} Мне {age} лет.")
>>> Меня зовут User. Мне 100 лет.


ПОГРУЖЕНЕ В F-СТРОКИ
>>> "обычная строка"
>>> f"f-строка"

f-строки также поддерживают расширенное форматирование чисел:
>>> from math import pi
>>> print(f"Значение числа pi: {pi:.2f}")
>>> Значение числа pi: 3.14

С помощью f-строк можно форматировать дату без вызова метода strftime():
>>> from datetime import datetime as dt
>>> now = dt.now()
>>> print(f"Текущее время {now:%d.%m.%Y %H:%M}")
>>> Текущее время 24.02.2017 15:51

Они поддерживают базовые арифметические операции. Да, прямо в строках:
>>> x = 10
>>> y = 5
>>> print(f"{x} x {y} / 2 = {x * y / 2}")
>>> 10 x 5 / 2 = 25.0

Позволяют обращаться к значениям списков по индексу:
>>> planets = ["Меркурий", "Венера", "Земля", "Марс"]
>>> print(f"Мы живим не планете {planets[2]}")
>>> Мы живим не планете Земля

А также к элементам словаря по ключу:
>>> planet = {"name": "Земля", "radius": 6378000}
>>> print(f"Планета {planet['name']}. Радиус {planet['radius']/1000} км.")
>>> Планета Земля. Радиус 6378.0 км. 

Причем вы можете использовать как строковые, так и числовые ключи. Точно также как в обычном Python коде:
>>> digits = {0: 'ноль', 'one': 'один'}
>>> print(f"0 - {digits[0]}, 1 - {digits['one']}")
>>> 0 - ноль, 1 - один

Вы можете вызывать в f-строках методы объектов:
>>> name = "User"
>>> print(f"Имя: {name.upper()}")
>>> Имя: User

А также вызывать функции:
>>> print(f"13 / 3 = {round(13/3)}")
>>> 13 / 3 = 4


zip + list

http://blog.lerner.co.il/implementing-zip-list-comprehensions/
>>> s = 'abc'
>>> t = (10, 20, 30)
>>> u = (-5, -10, -15)
>>> list(zip(s,t,u))
[('a', 10, -5), ('b', 20, -10), ('c', 30, -15)]
>>> [(s[i], t[i]) for i in range(len(s))] 
[('a', 10), ('b', 20), ('c', 30)]
>>> [(s[i], t[i]) for i in range(len(sorted((s,t), key=len)[0]))]
[('a', 10), ('b', 20), ('c', 30)]
>>> def shortest_sequence_range(*args):
...     return range(len(sorted(args, key=len)[0]))
... 
>>> [(s[i], t[i]) for i in shortest_sequence_range(s,t) ]
[('a', 10), ('b', 20), ('c', 30)]
>>> g = ((s[i], t[i]) for i in shortest_sequence_range(s,t) )
>>> for item in g: print(item)
... 
('a', 10)
('b', 20)
('c', 30)

>>> names = ['Tom', 'Dick', 'Harry']
>>> ages = [50, 35, 60]
>>> dict(zip(names, ages))
{'Harry': 60, 'Dick': 35, 'Tom': 50}



Работа с текстом




Сравнение содержания двух текстовых файлов
http://www.cyberforum.ru/python/thread1452346.html
http://aidalinux.ru/w/Grep
grep: коллекция примеров использования
вместо
grep -F -f 2.txt 1.txt > 3.txt (все совпадающие)
grep -Fv -f 2.txt 1.txt > 3.txt (разница)
grep -i -Fv -f 2.txt 1.txt > 3.txt (разница без учёта регистра)
pcregrep -vFf 2.txt 1.txt

эти точнее
diff --old-line-format=$'%l\n' --new-line-format='' --unchanged-line-format='' <(sort -u 2.txt) <(sort -u 1.txt)
comm -23 1.txt 2.txt
comm -13 <(sort -u 1.txt) <(sort -u 2.txt)|cat > output
Compare-Object (gc 1.txt) (gc 2.txt)  -PassThru


$ cat 1.txt
one two three four
$ cat 2.txt
two three one

вначале привести к одинаковому регистру 
типа
$ tr '[:upper:]' '[:lower:]'  lower.txt

Все буквы будут большими:
$ sed -i 's/.*/\U&/' 1.txt

Все буквы будут маленькими:
$ sed -i 's/.*/\L&/' 1.txt

>>> with open('1.txt', 'r',  encoding='utf-8-sig') as fileinput: fileinput.read().lower();

>>> data = [set(open(i).read().split()) for i in ('1.txt', '2.txt')]
>>> print(data[0].difference(data[1]))

nano diff_files1.py


python3 -m diff_files1


# запись
with open("filename.txt", "w") as file: file.write("hello world")

# чтение целиком
for line in open('filename.txt'): print(line)


# построчное чтение

for line in open('filename.txt').xreadlines(): print(line)
# в python2x

for line in open('filename.txt').readlines(): print(line, end='') # в python3x

B = 'spamspamspam'
open('savetree.txt', 'w').write(str(B))
# Сохранить в файл для последующего просмотра
open('latindata', 'w', encoding='latin-1').write(B) # Запись в latin-1
open('utf8data', 'w', encoding='utf-8').write(B) # Запись в utf-8
open('latindata', 'r', encoding='latin-1').read() # Декодирование выполняется при чтении
open('utf8data', 'r', encoding='utf-8').read() # в соответствии с названием кодировки
open('latindata', 'rb').read() # Прочитать двоичные данные


import pysed
print(pysed.replace("очень очень много букв", 'о', '!!!!'))
http://rtfm.co.ua/python-modul-pysed-rasshirennyj-analog-redaktora-sed/
https://pypi.python.org/pypi/pysed

правильное чтение



найти слово в тексте
https://pynative.com/python-search-for-a-string-in-text-files/



транслитерация

pip install transliterate
>>> from transliterate import translit
>>> print(translit(u"всякий разный текст", 'ru', reversed=True))



Кодировки



# -*- coding: utf-8 -*-
или
# coding: utf8

import sys
sys.getdefaultencoding() # Кодировка по умолчанию
import encodings.aliases
list(encodings.aliases.aliases)
print(encodings.aliases.aliases)
import encodings.aliases
arr = encodings.aliases.aliases
keys = list(arr.keys())
keys.sort() 
for key in keys: 
    print("%s => %s"% (key, arr[key]))

>>> from encodings.aliases import aliases
>>> def find(q):
...     return [(k,v) for k, v in aliases.items() if q in k or q in v]
...
>>> find('1252') # multiple aliases
[('1252', 'cp1252'), ('windows_1252', 'cp1252')]
>>> find('koi')
[('cskoi8r', 'koi8_r')]
>>> a=find('')
>>> a.sort()
>>> print(a)
[большой список]

import pkgutil
import encodings
false_positives = set(["aliases"])
found = set(name for imp, name, ispkg in pkgutil.iter_modules(encodings.__path__) if not ispkg)
found.difference_update(false_positives)
print(found)

>>> import chardet
>>> s = '\xe2\x98\x83' # ☃
>>> chardet.detect(s)
{'confidence': 0.505, 'encoding': 'utf-8'}

from encodings.aliases import aliases
print aliases.keys()

import os
import encodings
os.listdir(os.path.dirname(encodings.__file__))

https://docs.python.org/3/library/codecs.html#standard-encodings
https://docs.python.org/3/library/codecs.html#python-specific-encodings
http://stackoverflow.com/questions/1728376/get-a-list-of-all-the-encodings-python-can-encode-to


Ше­ст­на­дца­терич­ное зна­че­ние ко­да ASCII



>>> hex(ord('&'))
'0x26'
>>> hex(ord('+'))
'0x2b'

Новый год — самое время для легких извращений. Хотя для тебя, читающего эту статью практически весной, год уже не новый, да и сама идея изучения вируса, написанного на питоне, может показаться вовсе даже не легким извращением…

Read more... )
https://xakep.ru/2011/03/13/55980/

Python — один из наиболее популярных языков программирования, превзошедший по популярности по индексу TIOBE язык PHP.
Синтаксис Python может показаться странным по началу, особенно для разработчиков на Java. Некоторые фрагменты кода используются довольно часто, но для новичков их воспроизведение может оказаться не под силу. Такие фрагменты называют «идиомами». Их прочтение может оказаться зачастую полезным для изучения нового языка программирования. В этой статье мы познакомим вас с некоторыми из наиболее популярными фрагментами кода.


Read more... )



Писать программы на питоне быстро, просто, удобно, и приятно, но поставлять их конечному пользователю не очень легко. Тут мы сталкиваемся по меньшей мере с двумя проблемами:

углубиться в тему
Во-первых поставляя исходный скрипт нужно позаботится о присутствии интерпретатора нужной версии у пользователя да еще и нужных модулей. 

Во-вторых отдавая пользователю текстовый скрипт он получает возможность изменять его, что для некоторых приложений крайне недопустимо. Этот пункт касается не только python а и других динамических языков с интроспекцией. Безусловно, любой исполняемый файл написанный на компилируемом языке можно дезасемблировать, но это требует от злоумышленника большего опыта и больший усилий. А вот получить даже из байт-кода в .pyc файле текстовый .py может любой кто умеет пользоваться google.

В этой статье мы попробуем разобраться с решением обоих проблем. 

Будем создавать 32-х битный файл для винды, собрать 64-бит версию вы сможете по аналогии, но х32 версия обязательна так как может работать как на 32-битных виндовсах так и на 64-х. Эта инструкция в принципе должена работать и под linux с небольшими изменениями.

Установка cython



У меня уже установлен python версии 3.4.2 (32 бит):


Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32


Разработку скрипта я веду в виртуальном окружении, то есть начиная новый проект я выполняю:

c:\Python34\python.exe -m venv project_env

При этом в текущей папке создается папка project_env с копией интерпретатора и туда мы можем ставить любые модули не засоряя системный python. Правда перед началом работы нужно активировать виртуальное окружение выполнив:

project_env\Scripts\activate.bat

При этом в приглашении в командной строке должно быть видно "(project_env)". Если вы используете среду разработке (например eclipse или PyCharm), то в ней нужно задать интерпретатор из папки project_env.

Для компиляции исходных кодов .py в архитектурный код мы должны установить модуль cython. Он позволит собирать наши скрипты в объектный код путем преобразования программ на питоне в язык си. Но для этого нам нужно настроить компилятор С. Тут у нас есть два решения: либо использовать Microsoft Visual C, либо открытый gcc из mingw, совместимый с MVC. Конечно же мы выбираем gcc.

Устанавливая Mingw нужно выбрать пакеты:

mingw_gcc_packssel.jpg

Установив компилятор мы должны прописать к нему путь в PATH добавив туда: C:\MinGW\bin;C:\MinGW\msys\1.0\bin . После этого нужно перезапустить cmd в которой запущено виртуальное окружение и затем проверить прописался ли path, выполнив echo %PATH%. Потом повторно активировать окружение.

Осталось указать компилятор установщику pip. Для этого создаем файл c:\Python34\Lib\distutils\distutils.cfg и в него добавляем:

[build]
compiler=mingw32

Примечание: идеологически файл distutils.cfg мы должны создавать в виртуальном окружении а не в папке Python. Но в силу непонятных причин pip отказался его подхватывать из project_env\Lib\distutils\distutils.cfg либо из project_env\pydistutils.cfg. Если у кого-то получится - пишите в комментариях.

Наконец запускаем в нашем окружении project_env:

pip install cython

В конечном итоге все должно закончится фразой типа:

Successfully installed cython-0.22

Кроме cython нам опционально понадобится пакет pywin32. Он понадобится для включения в exe-файл информации о версии. Для python 2.7 его можно установить через pip, однако для 3.4 пока поддерживается только отдельный инсталлятор, который можна найти тут:
http://sourceforge.net/projects/pywin32/files/pywin32/
Так как мы используем venv, устанавливать нужно при помощи easy_install -N, например:

easy_install -N "Downloads\pywin32-219.win32-py3.4.exe"

Работа над проектом



Наконец можем приступать к компиляции рабочего проекта. Смысл состоит в том чтобы вынести весь код который мы хотим скрыть в пакеты и оставить в рабочем каталоге только основной файл, например main.py, в котором будет минимум вашего кода. Выбор имени главного модуля повлияет на название исполняемого файла (например main.exe), так что выбирайте его согласно названию вашей программы. Пакетом в питоне как известно считается папка в которой присутствует файл __init__.py (желательно что бы он был пустой, так как он не будет компилироваться).

Например мы можем разместить файлы проекта в такую структуру:
каталог_проекта
  |
  |-- gui
  |      |
  |      |-- __init__.py
  |      |-- login_window.py
  |      |-- main_window.py
  |
  |-- logic
  |      |
  |      |-- __init__.py
  |      |-- program_logic.py
  |
  |-- defs
  |      |
  |      |-- __init__.py
  |      |-- program_logic.py
  |
  |-- res
  |      |
  |      |--appicon.ico
  |      |--applogo.png
  |
  |-- main.py


В проекте у меня три пакета: 

  1. gui - пакет с файлами определения графических интерфейсов. Например я использую кросс-платформенный открытый PySide основный на Qt.

  2. logic - пакет со всякими модулями определяющими логику работы программы

  3. defs - пакет с константами и определениями.


Кроме того у меня есть папка res для всяких ресурсов (иконок картинок и т.д.), которые нужно будет поставлять вместе с программой.

Для сборки релиза я предлагаю создать ряд скриптов, которые позволят автоматизировать процесс.

Генерация файла версии



Начнем со скрипта генерирующего версию программы gen_version.py. Его нужно создать в каталоге проекта(рядом с main.py) Этот скрипт не есть обязательным но очень полезным с точки зрения сопровождения программы. Скрипт достает номер ревизии и хеш коммита из репозитория системы контроля версий git, находящегося в папке проекта. Если вы используете другую СКВ, например svn, вам не составит труда адаптировать скрипт. Если вы не используете системы контроля версий вообще, но все же хотите генерировать файл версии, то простым решением будет обычный инкримент номера (до открытия файла на записать нужно открыть его для  чтения вычитать текущий номер, если удалось сделать +1, иначе присвоить ноль). Кроме этого gen_version.py подсчитывает CRC32 всех исходников .py и записывает время запуска этого скрипта (типа время и дата сборки). Вот его код:



Выполнив функцию create_version_file(путь_к_файлу_версии), мы получаем файл вроде такого:

COMMIT_REVISION = 3
COMMIT_HASH = 0x11b38900
SOURCES_CRC = 0xac699a53
BUILD_TIME = 1425129933.589303

COMMIT_REVISION можно использовать как версию программы (он будет увеличиваться от коммита к комиту при условии что мы будем делать релизы из одной ветки), COMMIT_HASH поможет нам найти коммит, из которого создавалась версия, например мы сможем на него вернутся и протестировать багу. SOURCES_CRC покажит реальное сотояние исходников, что позволит определить был ли реально сделан коммит или нет, а BUILD_TIME содержит timestamp указывающий на дату и время сборки.

Компиляция пакетов при помощи cython



Создаем файл compile.py в каталоге проекта.



Создание исполняемого файла



Создаем в папке проекта скрипт makebin.py



Если вы не используете генерацию версии замените строку COMMIT_REVISION на свое значение. Также укажите свои "имя_программы", "Короткое описание программы", путь к иконке res/appicon.ico. Также обратите внимание что в packages нужно перечислить используемые в импортах пакеты, в том числе внешние, например "os", "Crypto" и т.д.

Скрипт сборки



Ну и последнее что осталось сделать, это создать наконец окончательный скрипт который будет вызывать другие скрипты. В папке проекта создаем  build_release.py:



Тут мы выполняем генерацию версии в файл defs/version.py а затем копируем рекурсивно все содержимое папки проекта в под-папку building, переходя в нее мы и начинаем сборку. Это позволяет нам не изменять основную папку и не создавать в ней всякого мусор. Папка building при каждой новой сборке полностью удаляется что позволяет избавиться от конфликтующих или просто ненужных файлов в процессе сборки.

Затем мы выполняем компиляцию модулей в пакете, и после этого удаляем все .py, .c, .pyc файлы в пакетах (кроме пустых __init__.py, которые по прежнему определят пакет). Так мы гарантируем, что исходных файлов не осталось в пакетах, а остались только скомпилированные cython-ом.

Ну и напоследок мы собираем все в .exe файл, и копируем папку с релизом, в которую войдут папка ресурсов res и необходимые библиотеки. Все это будет находится в building\build\exe.win32-3.4\. Эту папку можно завернуть в SFX архив, или в какой-нибудь инсталлятор (например InnoSetup).

Запуск скрипта нужно выполнять в виртуальном окружении при помощи:

python build_release.py

Бонус: создание инсталлятора для Windows при помощи Inno Setup



Скачать Inno Setup, тут: http://www.jrsoftware.org/isdl.php

В папке проекта создаем папку inno_setup, в нее помещаем два bmp-файла:

  • WizModernImage-IS.bmp


  • WizModernSmallImage-IS.bmp


Скопировать их можно из "c:\Program Files (x86)\Inno Setup 5\"  (или без x86) и по желанию подредактировать под свои нужды, например используя GIMP (Формат bmp должен быть 24 разряда на цвет пикселя).

Также создаем скрипт формирования иснталлятора proj.iss (кодировка ANSI cp1251):



Первые 4-5 срок скрипта измените под свой проект.
Теперь в build_release.py можем добавить:


print(">> Building installer")
os.system('"c:\Program Files (x86)\Inno Setup 5\ISCC.exe" inno_setup\proj.iss')


После запуска "python build_release" в папке \building\inno_setup\installer забирайте свежий инсталлятор!
____________________________________________________
____________________________________________________

ещё способы, для простых вещей:
cython --embed my_script.py -o my_script.c
gcc -g -O2 -o my_script.exe my_script.c `python-config --includes --ldflags`


Ставится Cython через pip:
pip install Cython

Cython → C:
cython -2 pi_approximater.pyx -o pi_approximater.c

Компилируем С-шный код:
gcc -g -O2 -shared -o pi_approximater.so pi_approximater.c python-config --includes --ldflags -fPIC


http://nuitka.net/doc/user-manual.html
pip install -U nuitka
nuitka --module some_package --recurse-directory=some_package
nuitka --recurse-all my_proga.py

Ставится через pip:
pip install nuitka

Для генерации исполняемого файла достаточно выполнить команду:
python -m nuitka --follow-import some_program.py

Для компиляции модуля:
python -m nuitka --module some_module.py

Для компиляции пакета:
python -m nuitka --module some_package --include-package = some_package



либо

http://www.pyinstaller.org/
PyInstallerGUI How to create Python executables
python drag and drop explorer files to tkinter entry widget
Convert Python application to exe file
Python для Начинающих - Конвертирование .py в .exe


ссылки
Компиляция Python
https://web.archive.org/web/20161108064748/http://bovs.org/post/144/sborka-ispolnyaemogo-faila-iz-skriptov-python
http://nuitka.net/doc/user-manual.html
Компиляция Windows программы в Ubuntu Linux
http://blog.golovin.in/portable-mingw-and-msys/
https://cygwin.com/index.html
https://msys2.github.io/
https://habrahabr.ru/post/282359/ cx_Freeze + virtualenv
Python Tools для Visual Studio, о новинках из первых рук
https://github.com/Microsoft/PTVS/wiki/PTVS-Installation
Параметры компилятора, упорядоченные по категориям
Python 3. Компиляция в EXE и MSI
Python компилятор - Бета-тестирование ??
Tutorial: Compile Python to EXE
как сделать единый файл exe из скрипта python используя py2exe
Как защитить Python-код от модификации?
Компилятор GCC
Использование GCC
С++ для начинающих MinGW командная строка. Работа из консоли Windows
MXE (M кросс-среда) - это GNU Makefile, компилирует кросс-компилятор и кросс-компилирует множество библиотек
О GCC, компиляции и библиотеках
GCC online documentation



открыть, глянуть
1. скачать и установить свежую версию Python тут, не забыть добавить Python в переменные среды
https://www.python.org/downloads/

2. установить py2exe
в командной строке переходим в папку с установленным питоном
cd C:\Python34

и устанавливаем py2exe
pip install py2exe

3. создать файл setup.py с таким содержимым

from distutils.core import setup
import py2exe
setup(console=['myscript.py'], zipfile=None)
# myscript.py - скрипт из которого будет exe

4. собираем экзешник
setup.py py2exe -b 0

5. экзешник находится в каталоге dist
C:\Python34\dist

6. проверяем как работает
cd C:\Python34\dist
myscript.exe


PS. альтенатива:

cython --embed my_script.py -o my_script.c
gcc -g -O2 -o my_script.exe my_script.c `python-config --includes --ldflags`


ещё:

pyinstaller -D -F -n=ExeFileName -w PythonModule.py
Аргументы:
-D собрать в одну директорию
-F собрать в один файл
-n= имя выходного исполняемого файла
-w оконный режим


http://nuitka.net/doc/user-manual.html
pip install -U nuitka
nuitka --module some_package --recurse-directory=some_package
nuitka --recurse-all my_proga.py

http://www.pyinstaller.org/
PyInstallerGUI How to create Python executables
python drag and drop explorer files to tkinter entry widget
Convert Python application to exe file
Python для Начинающих - Конвертирование .py в .exe

PyInstaller компиляция в единый файл
https://www.youtube.com/watch?v=9bK5JJFVMbk
Хауди Хо™ - Просто о мире IT! Учим Python Kivy #5 - Компиляция под Windows

spec файл из ролика





Как преобразовать скрипт Python в .exe файл
Как создать exe файл для Python кода с помощью PyInstaller
https://pypi.org/project/auto-py-to-exe/
https://github.com/brentvollebregt/auto-py-to-exe
http://pythonworld.ru/osnovy/program-compilation-with-cx-freeze.html
Компиляция модулей Python - Python
Tutorial: Compile Python to EXE
Делаем standalone exe на IronPython
Создаём окружение для PyQt5 в Linux MInt (Ubuntu) tutorial
pyqtdeploy, или упаковываем Python-программу в exe'шник… the hard way
PyQt5 GUI-тулза которая конвертирует из .py в .exe

Как защитить Python-код от модификации?
Сборка испольняемого файла из скриптов Python


Прекрасная стандратная тема Idle меня не смущает, т.к. я чаще пытаюсь творить в Sublime Text 3.Но все же как изменить цветовую тему Idle на более темную...

Read more... )


http://livelikeapythonista.blogspot.ru/2014/05/idle-highlighting-themes.html
https://gist.github.com/dsosby/1122904#file-config-highlight-cfg





раскрыть
Использование:
Запускается mps-youtube с помощью команды

mpsyt

Найти нужный ролик:

/название_ролика

проиграть его - поставить цифру выбранного ролика

выбранный_номер

скачать:

d выбранный_номер

получить url и информацию о ролике

i выбранный_номер

играть ролик по прямой ссылке:

playurl ссылка

установка

sudo apt-get install pip3
sudo pip3 install mps-youtube


обновление

pip3 install mps-youtube --upgrade

Просмотр текущих настроек:

set

Сброс изменений настроек:

set all default

Отключение опции поиска только музыки:

set search_music False

mps-youtube по умолчанию воспроизводит только аудио, активировать воспроизведение видео можно отключив эту опцию командой:

set show_video True

В качестве медиаплеера "по умолчанию" mps-youtube использует MPV, заменить его (например на MPlayer) можно командой:

set player mplayer

Для использования других клавиатурных сочетаний можно импортировать соответствующий файл (input.conf) из MPV или MPlayer (в ~/.config/mps-youtube).

https://github.com/mps-youtube/mps-youtube
https://pypi.python.org/pypi/mps-youtube
http://zenway.ru/page/mpsyt
http://rus-linux.net/MyLDP/consol/youtube-player-in-consol.html

Начало читаем в предыдущей статье как установить Pelican.


Чтобы было полегче с настройками, необходимо выбрать хорошую тему, в которой предустановлено большинство нужных вещей, а потом уже допиливать её по необходимости :)


Все изменения вносятся в основной файл настроек pelicanconf.py

Read more... )
http://webquant.ru/posts/pelican-extra/
Расшариваем веб-сайт на localhost в глобальную сеть интернет.

Подготовка зависимостей


Для того чтобы сделать блог, нам понадобиться установить генератор статических сайтов (наш блог будет на Pelican), который будет преобразовывать все текстовые записи в Markdown в статичные HTML страницы. Начнем с подготовки и установим все необходимые зависимости:

Read more... )
http://webquant.ru/posts/pelican/

Mало кто знает, что Github кроме превосходного хостинга ваших Git проектов
может также хостить ваш персональный сайт.
Например на нем расположен этот блог. В своей первой статье я
расскажу как максимально удобно настроить эту функциональность.

Read more... )
http://klen.github.io/github-blog.html

Думали ли вы (в очередной раз подготавливая среду для Python) о том, как было бы здорово, если бы не приходилось настраивать с нуля рабочее окружение (да ещё и под разными операционными системами), а можно было бы сесть и просто начать писать? Я случайно открыл для себя pythonanywhere.com — сервис, позволяющий вести разработку на Python онлайн, прямо в браузере. Под катом — описание сервиса с картинками и видео.
Read more... )


http://www.pvsm.ru/python/8193
портабельный python

PS
плагины для хрома

Python Shell
https://chrome.google.com/webstore/detail/python-shell/diebclfbkfamdacginejnaookipodhng

Python
https://chrome.google.com/webstore/detail/python/nodpmmidbgeganfponihbgmfcoiibffi

Python Fiddle
https://chrome.google.com/webstore/detail/python-fiddle/imldfcloildiapnfjoocfpdmoajnjelf




развернуть
Есть неплохой редактор Sublime Text, в нём удобно редактировать код, для того чтобы можно было сразу смотреть на его исполнение необходимо:

1. Установить Sublime Package Control, он поможет легко управлять плагинами, нажимаем ctrl+` и в открывшейся консоли вставляем код


если возникает ошибка
Error validating download (got ...... ), please try manual install
то взять код здесь
https://packagecontrol.io/installation#st3

2. Устанавливаем необходимые плагины
Preferenses -> Package Control -> Install Package
в окно вставляем плагины:
SublimeREPL
SublimePythonIDE
если нужно
http://damnwidget.github.io/anaconda/
и прочие необходимые, которые находятся по запросу в Install Package
устанавливаем их
список годных схем оформления и плагинов:


3. Создаём для запуска горячую клавишу:
Preferenses -> Key Bindings-User
вставить в Key Bindings-User следующий код:

Теперь при нажатии win+z происходит исполнение кода

Прочие мелочи:
Preferenses -> Settings-User
вставить в Settings-User следующий код:


или например этот:



Sublime Text можно настроить на любой вкус, чтобы изменить тему нужно в Settings-User всавить вместо приведённой "theme": "Sunrise.sublime-theme"
вот некоторые из тёмных тем:



темы и стили оформления можно посмотреть тут:

https://packagecontrol.io/search/Theme
https://colorsublime.github.io/


горячие клавиши:



русификация меню (если нужна) есть по ссылке
http://dimox.name/sublime-text-russian-menu/
http://files.is-best.net/Public/Sublime_Text_2/SublimeTextRussianMenu/

скрипт, чтоб не заморачиваться, использовать если нет каталогов
$HOME/.config/sublime-text-3/Packages/Default/ и $HOME/tttmppp




Для того чтобы код выполнялся в интерпретаторе python3 необходимо:

1. Изменить PYTHONPATH:
Preferences -> Package Setting -> SublimeREPL -> Setting - Default - копируем содержимое
Preferences -> Package Setting -> SublimeREPL -> Setting - User вставляем содержимое, заменяя
"default_extend_env": {},
на
"default_extend_env": {"PYTHONPATH": "YOU_PATH"},
Где вместо YOU_PATHs - прописываем нужные вам пути
узнать PYTHONPATH можно так:
запускаем интерпретатор python3
вбиваем там
import sys
print(sys.path)
получаем
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-i386-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']



2. в Preferenses -> Key Bindings-User изменить
"cmd": ["python", "-u", "$file_basename"],
на
"cmd": ["python3", "-u", "$file_basename"],




Sublime Text 3 и gcc
Как установить Sublime Text для работы с C/C++
Sublime Text как IDE для ARM на примере STM32

нужно установить All autocomplete, C++ completions, C++ snippets и (если есть необходимость) SublimeGDB
запуск на компиляцию (и выполнение): Ctrl + b


советы
Как скомпилировать и запустить C в sublime text 3?
Для системы сборки sublime, реализующей команду меню Выполнить :
Перейдите в меню Инструменты->Система сборки->Новая система сборки...
Или
Создать файл ~/.config/sublime-text-3/Packages/User/GCC.sublime-build
И вставьте это:



1. Создайте новую систему сборки в Sublime: Инструменты > Система сборки > Новая система сборки. ..
2. Будет создан новый файл с именем untitled.sublime-build .
Если нет, перейдите в Настройки > Обзор пакетов > Пользователь
Если файл untitled.sublime-build есть , откройте его , если его нет , создайте его вручную и откройте .
3. Скопируйте и вставьте приведенный ниже код в вышеупомянутый файл untitled.sublime-build и сохраните его.


Закройте файл. Вы почти закончили!
4. Наконец , переименуйте свой файл с untitled.sublime-build на myC.sublime-build , или вы можете также показать свое творчество здесь. Просто сохраните расширение файла таким же.
5. Наконец , установите для текущей системы сборки имя файла, которое вы написали на предыдущем шаге. В этом случае это myC


Помеченные строки (Bookmarks)
Ctrl + F2 (по ней же и снимается), чтобы была возможность делать кликом мыши:

nano $HOME/.config/sublime-text-3/Packages/Default/Context.sublime-menu

добавить строчку:
    { "command": "toggle_bookmark", "caption": "Отметить строку" },

И в контекстном меню появится соответствующая команда.

Как вернуть верхнюю панель инструментов в Sublime Tex 2.02?
если случайно скрылось меню ;)

Нажимаете Alt, затем «View» ► «Show menu»

f78e468f931b45ccacc9636a08307909.jpg

для Linux: ctrl+shift+p, в водим в поиске "menu" и выбираем "View: Toggle Menu".

f39d4f2d793c45ae89f211d40dceeb8d.png


чтобы сохранить сессию

Preferences > Package Control), select Package Control: Install package, and search for “Session Manager”.
https://packagecontrol.io/packages/Session%20Manager
The commands, accessible through the command palette (ctrl+shift+p), are:

Session Manager: Save Session
Session Manager: Load Session
Session Manager: Delete Session



горячие клавиши

Работа с текстом

Хоткей Описание
ctrl+l Выделить строку.
ctrl+shift+m Выделить текст между двумя парными скобками.
ctrl+shift+a Выделить текст между двумя парными тегами.
ctrl+shift+j Выделить текст с соответствующим отступом.
ctrl+shift+space Выделить по контексту.
ctrl+shift+left Выделить слово слева.
ctrl+shift+right Выделить слово справа.
ctrl+a Выделить весь текст.
ctrl+shift+l Разделить выделенные строки на независимые участки редактирования.
ctrl+shift+up Переместить выделенные строки вверх.
ctrl+shift+down Переместить выделенные строки вниз.
ctrl+shift+d Дублировать строку.
ctrl+shift+k Удалить строку.
ctrl+backspace Удалить часть слова до курсора.
ctrl+delete Удалить часть слова после курсора.
ctrl+shift+backspace Удалить текст от курсора и до начала строки.
ctrl+k, ctrl+backspace Удалить текст от курсора и до начала строки.
ctrl+shift+delete Удалить текст от курсора и до конца строки.
ctrl+k, ctrl+k Удалить текст от курсора и до конца строки.
ctrl+j Объединить выделенные строки.
alt+q Объединить строки в параграфе.
ctrl+enter Добавить пустую строку под курсором.
ctrl+shift+enter Добавить пустую строку над курсором.
ctrl+alt+up Добавить курсор на следующей или предыдущей строке.
ctrl+alt+down Добавить курсор на следующей или предыдущей строке.
ctrl+/ Добавить или убрать однострочный комментарий.
ctrl+shift+/ Добавить или убрать блочный комментарий.
f9 Отсортировать строки в алфавитном порядке.
ctrl+f9 Отсортировать строки в алфавитном порядке с учетом регистра.
ctrl+k, ctrl+l Трансформировать выделенный текст в нижний регистр.
ctrl+k, ctrl+u Трансформировать выделенный текст в верхний регистр.
ctrl+t Транспонировать текст.
alt+. Закрыть незакрытый тег.
alt+shift+w Обернуть тегом выделенный текст.
insert Переключить режим ввода: вставка или замена.
ctrl+k, ctrl+space Установить метку.
ctrl+k, ctrl+a Выделить текст от курсора до метки.
ctrl+k, ctrl+x Поменять местами метку и курсор.
ctrl+k, ctrl+w Удалить метку.
ctrl+k, ctrl+g Удалить все метки.
ctrl+] Убрать отступ.
ctrl+[ Добавить отступ.
ctrl+y Повторить последнее действие.
ctrl+c or ctrl+insert Копировать.
ctrl+v or shift+insert Вставить.
ctrl+shift+v Вставить с отступом.
ctrl+x Вырезать.
shift+delete Вырезать.
ctrl+z Отмена последнего действия.
ctrl+shift+z Повторить последнее отмененное действие.
ctrl+u Отменить последнее выделение.
ctrl+shift+u Повторить последнее отмененное выделение.

Поиск и замена

Хоткей Описание
ctrl+f Открыть панель поиска.
ctrl+h Открыть панель поиска и замены.
ctrl+shift+f Открыть панель поиска и замены по всем файлам проекта.
ctrl+i Открыть панель быстрого поиска и поиск.
ctrl+shift+i Открыть панель быстрого поиска и поиск в обратном направлении.
alt+a Включить или выключить режим сохранения регистра на панели поиска и замены.
alt+r Включить или выключить использование регулярных выражений на панели поиска и замены.
f6 Включить или выключить проверку правописания.
alt+c Включить или выключить чувствительность к регистру на панели поиска и замены.
alt+w Включить или выключить режим поиска слова целиком на панели поиска и замены.
alt+enter Найти все.
ctrl+` Показать панель.
shift+enter Поиск в обратном направлении.
ctrl+alt+enter «Заменить все» на панели поиска и замены.
ctrl+shift+h Заменить текст далее.
f3 Поиск.
shift+f3 Поиск в обратном направлении.
f4 Переход к следующему результату поиска по всем файлам.
shift+f4 Переход к предыдущему результату поиска по всем файлам.
ctrl+f3 Быстрый поиск.
ctrl+shift+f3 Быстрый поиск в обратном направлении.
ctrl+d Найти и выделить текст.
ctrl+k, ctrl+d Пропустить выделенный текст.
alt+f3 Найти все.
ctrl+e Скопировать слово или выделенный текст в окно поиска.
ctrl+shift+e Скопировать слово или выделенный текст в окно замены.
ctrl+f6 Перейти к следующей ошибке.
ctrl+shift+f6 Перейти к предыдущей ошибке.
ctrl+p Открыть окно поиска файла «Goto Anything…».
ctrl+r Открыть окно перехода к функциональному блоку.
ctrl+g Открыть окно для перехода к заданной строке.
ctrl+; Открыть окно для перехода к заданному слову.

Фолдинг

Хоткей Описание
ctrl+shift+[ Свернуть код.
ctrl+shift+] Развернуть код.
ctrl+k, ctrl+1 – 9 Свернуть код соответствующего уровня.
ctrl+k, ctrl+0 or ctrl+k, ctrl+j Развернуть все.
ctrl+k, ctrl+t Свернуть атрибуты тегов.

Навигация

Хоткей Описание
ctrl+alt+p Открыть окно выбора проектов.
ctrl+f2 Установить или снять закладку.
f2 Перейти к следующей закладке.
shift+f2 Перейти к предыдущей закладке.
alt+f2 Выделить все закладки.
ctrl+shift+f2 Удалить все закладки.
ctrl+k, ctrl+c Переместить экран к курсору.
ctrl+up Прокрутка окна редактирования.
ctrl+down Прокрутка окна редактирования.
ctrl+m Переместить курсор к парной скобке.

Управление окнами

Хоткей Описание
alt+0 – 9 Выбор соответствующей вкладки.
ctrl+f4 Закрыть вкладку.
ctrl+tab Переключиться на следующую вкладку.
ctrl+shift+tab Переключиться на предыдущую вкладку.
ctrl+pageup Переключиться на вкладку слева.
ctrl+pagedown Переключиться на вкладку справа.
alt+shift+1 – 5 Управление количеством и расположением областей редактирования.
alt+shift+8 – 9 Управление количеством и расположением областей редактирования.
ctrl+1 – 4 Переключиться в соответствующую область.
ctrl+shift+1 – 4 Переместить вкладку в соответствующую область.
f11 Развернуть окно во весь экран.
shift+f11 Переключиться в «Отвлеченный режим».
ctrl+k, ctrl+b Показать или скрыть боковую панель.
ctrl+0 Переключить фокус на боковую панель.
ctrl+n Создать новую вкладку.
ctrl+w Закрыть текущую вкладку.
ctrl+shift+n Создать новое окно.
ctrl+shift+w Закрыть окно.

Работа с файлами

Хоткей Описание
ctrl+o Вызвать окно «Открыть файл».
ctrl+shift+t Открыть последний закрытый файл.
ctrl+s Сохранить текущий файл.
ctrl+shift+s Вызвать окно «Сохранить как».
alt+o Переключение между файлами представления и реализации.

Разное

Хоткей Описание
ctrl+shift+p Открыть окно списка функций.
ctrl++ Увеличить размер шрифта.
ctrl+- Уменьшить размер шрифта.
ctrl+q Запустить или остановить запись макроса.
ctrl+shift+q Воспроизвести макрос.
ctrl+alt+shift+p Отобразить в статусной строке название контекста, в котором находится курсор.
f7 Выполнить
ctrl+b Выполнить
ctrl+shift+b Выполнить
ctrl+break Отменить выполнение


доп. плагины
https://packagecontrol.io/packages/Terminus
https://github.com/daveleroy/sublime_debugger

удалённое редактирование конфигов
вставить в свой файл /etc/ssh/sshd_config на стороне сервера:
Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
закомментить
#Subsystem sftp /usr/lib/openssh/sftp-server

systemctl restart sshd

в /etc/sudoers просто поместите новые записи после них.
sudo visudo
Новая запись должна выглядеть
myuser ALL=(ALL) NOPASSWD: ALL для одного пользователя, или
%sudo ALL=(ALL) NOPASSWD: ALL для группы.

разное
отредактировать хоткей множественного курсора
https://www.sublimetext.com/docs/multiple_selection_with_the_keyboard.html

Preferenses -> Key Bindings



в CudaText В command-palette нажми F9 для задания хоткея. Для команд "carets extend: ..........."

Просмотр и редактирование окончаний строк в Sublime Text
установить RawLineEdit
Ctrl+Shift+P
Raw Line Edit: Toggle Line Edit Mode
Raw Line Edit: View Line Endings

ссылки
Использование Sublime Text Editor 2 в качестве редактора текста Python 3.x
Настройка Sublime Text для Python

https://sublime.wbond.net/installation
https://sublime.wbond.net/packages/SublimeREPL
http://sublimetext.ru/documentation/горячие-клавиши
http://sublimetext.ru/documentation/параметры
djbook.ru Рецепты Sublime Text 3
Делаем из Sublime Text 3 IDE для Python и Django
Sublime-Text 3. Коротко о главном
Как sublimerepl установит на горячую клавишу?
Отображение непечатных символов в SublimeText2 как это делается в vim'e
Шпаргалка по Sublime Text 2
http://coddism.com/zametki/nastrojka_sublime_text
http://blog.brainf.net/soft/nastrojjki-sublime-text/
http://iklmn.net/blog/moi-nastroki-sublime-text-3.html
Превращаем Sublime Text 2 в Notepad++
Интегрируем Git в Sublime Text
Лучшие плагины Sublime Text 3
Top 12 Sublime Text Plugins
Sublime Text 2 хитрости
Небольшой обзор Sublime Text 2
Sublime Text — горячие клавиши
uzverss JavaScript в консоли Sublime Text
uzverss Настройка Sublime Text для работы через прокси
------------------------------------------------------------------------
Олег Молчанов Sublime Text 3
https://www.youtube.com/playlist?list=PLlWXhlUMyooYUgxmybYJiYNTicSHR8nme
------------------------------------------------------------------------
Web Developer Blog Sublime Text 2
https://www.youtube.com/playlist?list=PLVfMKQXDAhGXTtaRwrHzPLNQALkVhGWKj
------------------------------------------------------------------------


есть годный, лёгкий редактор кода IEP но у него по умолчанию гадкая тема оформления, простыми способами её не изменить
1. скачиваем с поддержкой gtk отсюда
2. отрыть в редакторе (с подсветкой кода) файл (где находится программа)iep/source/iep/codeeditor/base.py
и добавить в метод __init__ стиль (добавляем сюда)

    def __init__(self,*args, **kwds):
        ....
        S["Editor.Line numbers"] = "back:%s, fore:%s" % (back2, back3)
 
        # Apply style
        self.setStyle(S)
        ....

Read more... )
http://blogs.univ-poitiers.fr/laurentsignac/2013/09/01/sublime-dark-iep/

чтобы переключить настройки ("продвинутые") нужно вбить
iep.resetConfig() либо iep.resetConfig(True) в консоль логгера (Tools -> Logger) и перезапустить IEP


В линуксе питон всегда с тобой, но в винде это не так (
Решил я сию беду так: дабы на каждый комп не устанавливать в локальной сетке сделал папку с правом на чтение только для избранных ;) так как флешки у компов отрублены, ибо секурность, и большая часть компов вообще на втвари
Python взял отсюда
Поскольку стандартная консоль винды убога весьма, сделал запуск python в ConEmu
для сего в папку App с программой разархивировал то что скачал тут
и сотворил там же батник запуска с таким содержимым:

start /b "" "%~dp0ConEmu" python

ссылку на батник отправил на свой рабочий стол
теперь мой python всегда со мной )

Возьми Python с собой
http://portablepython.com/
Альтернативный терминал для Windows
Запуск .bat файла из сетевой папки
Урок bat-аники
Использование переменных среды в Cmd.exe
http://настройкапк.рф/bat_файлы/


Для полного конвертирования всей музыкальной библиотеки будем использовать скрипт mid3iconv, который поставляется в комплекте пакета python-mutagen.
Для правильной работы пакет python-mutagen должен быть версией не ниже 1.1.

   1. Устанавливаем пакет python-mutagen:
      Debian, Ubuntu, Kubuntu..:

      # sudo apt-get install python-mutagen
  
   2. Переходим в директорию с Вашей музыкальной библиотекой:

      # cd /home/ВАШ_ЛОГИН/Музыка

      Возможно директория с музыкальной библиотекой у Вас будет другой.

   3. Конвертируем библиотеку:

      # find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

    ____       _       __     __    ______                     _____   
   / __ \__  _| |     / /__  / /_  / ____/___  ____  __  __   /__  /   
  / /_/ / / / / | /| / / _ \/ __ \/ /   / __ \/ __ \/ / / /     / /    
 / ____/ /_/ /| |/ |/ /  __/ /_/ / /___/ /_/ / /_/ / /_/ /     / /     
/_/    \__, / |__/|__/\___/_.___/\____/\____/ .___/\__, /     /_/      
      /____/                               /_/    /____/               


раскрыть
https://github.com/rajatomar788/pywebcopy/

pip install pywebcopy
pip install validators



взято тут

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 15th, 2026 11:08 pm
Powered by Dreamwidth Studios