• Как получить имя ПК на Python?

    Zoominger
    @Zoominger Куратор тега Python
    System Integrator
    import socket
    print(socket.gethostname())
    Ответ написан
    Комментировать
  • Не получается собрать Python 3.7 из официальных исходников?

    sim3x
    @sim3x
    Гайд
    Как установить питон, требуемой версии одному пользователю в домашнюю директорию

    Вам не нужно менять системный питон
    Никогда

    Запускать так python3.7 -v
    Не так python3 -v
    Почему? which python3.7; which python3

    Что требуется поставить для сборки в убунтах 16.хх-18.хх
    apt-get install -y \
      build-essential git libexpat1-dev libssl-dev zlib1g-dev \
      libncurses5-dev libbz2-dev liblzma-dev \
      libsqlite3-dev libffi-dev\
      libffi-dev tcl-dev linux-headers-generic libgdbm-dev \
      libreadline-dev tk-dev \
      libdb-dev \
      libmpdec-dev \
      libncursesw5-dev




    Получаем исходники и чекаутим нужную версию
    cd /tmp
    git clone https://github.com/python/cpython.git
    cd cpython
    git checkout 3.7


    Обращаем внимание
    Не --prefix=$HOME/.local/bin а --prefix=$HOME/.localИнсталлер создаст такие диры ${prefix}/{bin,include,lib,share}
    Сделайте tree .local до и после make install, тогда не возникнет вопросов, что поставил питон

    Перед любой операцией - требуется читать ман!
    ./configure --help
    Например если предполагается собирать разные варианты питона --with-lto может сильно ускорить процесс

    -j4 повесит сборку на 4 ядра, если они у вас конечно есть

    ./configure --prefix=$HOME/.local --enable-optimizations
    make -j4
    make install


    инсталлер формирует такую структуру для питона
    Перед установкой, желательно руками удалить все. Не директории. В данной директории может быть много софта
    .local
    ├── bin
    │   ├── 2to3 -> 2to3-3.7
    │   ├── 2to3-3.7
    │   ├── easy_install-3.7
    │   ├── idle3 -> idle3.7
    │   ├── idle3.7
    │   ├── pip3
    │   ├── pip3.7
    │   ├── pydoc3 -> pydoc3.7
    │   ├── pydoc3.7
    │   ├── python3 -> python3.7
    │   ├── python3.7
    │   ├── python3.7-config -> python3.7m-config
    │   ├── python3.7m
    │   ├── python3.7m-config
    │   ├── python3-config -> python3.7-config
    │   ├── pyvenv -> pyvenv-3.7
    │   └── pyvenv-3.7
    ├── include
    │   └── python3.7m
    ├── lib
    │   ├── libpython3.7m.a
    │   ├── pkgconfig
    │   └── python3.7
    │   └── man


    Если после инстала и сборки which python3.7не дает результата - проверьте наличие в PATH ~./local/bin
    $ grep "$HOME/.local/bin:" <<< "$PATH"  
    /home/sim3x/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
    Ответ написан
    7 комментариев
  • Как подключить две версии jQuery?

    freislot
    @freislot
    Frontend-разработчик
    Можно вот так. Менее запутанно но смысл тот же

    <!-- load jQuery 1.10.2 -->
    <script type="text/javascript" src="http://example.com/jquery-1.10.2.js"></script>
    <script type="text/javascript">
    var jQuery_1_10_2 = $.noConflict(true);
    </script>
    
    <!-- load jQuery 3.2.1 -->
    <script type="text/javascript" src="http://example.com/jquery-3.2.1.js"></script>
    <script type="text/javascript">
    var jQuery_3_2_1 = $.noConflict(true);
    </script>


    и в коде где вы вызываете свои плагины пишете так вместо $('#selector').function()
    jQuery_3_2_1('#selector').function();
    Ответ написан
    3 комментария
  • Самый компактный и информативный учебник(книга) по Python?

    adugin
    @adugin Куратор тега Python
    Ответ написан
    Комментировать
  • Как лучше всего обрабатывать ошибки в python?

    adugin
    @adugin Куратор тега Python
    Основная конструкция:
    try:
        ...
    except SomeException as e:
        ...
    except AnotherException as e:
        ...
    except (ThirdException, FourthException):
        ...
    else:
        ...
    finally:
        ...

    Для явного замалчивания ошибок:
    from contextlib import suppress
    
    with suppress(SomeException):
        ...

    Это эквивалентно следующей конструкции:
    try:
        ...
    except SomeException:
        pass


    Для записи логов используйте модуль logging.
    Ответ написан
    1 комментарий
  • Зачем работать с базой ORACLE только через процедуры?

    @res2001
    Developer, ex-admin
    Нормальный подход. 20 лет назад он был фактически стандартом.
    Разработчик баз данных обычно стоит дороже PHP разработчика.
    Сейчас, обычно, такой подход используют в корпоративных разработках, где могут позволить держать таких специалистов.
    А в mysql еще совсем недавно не было никаких хранимых процедур. С тех пор так и пошла мода всю логику запихивать в сервер-приложений.
    Это ни плохо и не хорошо, нужно идти от задачи и знать сильные и слабые стороны размещения бизнес-логики в сервер-приложений или в сервер базы данных.
    https://habrahabr.ru/post/219445/
    Ответ написан
    Комментировать
  • Зачем работать с базой ORACLE только через процедуры?

    @Sumor
    Если проект простой, то конечно удобнее из клиентского приложения вызывать SELECT, UPDATE и INSERT.
    Но как только проект становится достаточно большим, или накладываются дополнительные ограничения на безопасность, то удобнее вынести часть бизнес-логики на сервер. В данном случае - на хранимые процедуры.
    Плюсы следующие:
    1. Хранимые процедуры и клиентское приложения могут писать разные люди (команды), с разной подготовкой. Хранимые процедуры - боле опытные, клиентское приложение - более неопытные.
    2. Хранимые процедуры могут обеспечить дополнительный уровень безопасности. Часть проверочной логики может быть реализовано на сервере. И клиентское ПО даже изменив или подделав вызовы не получит не принадлежащие им данные. Если вся логика приложения реализована на клиенте, то злоумышленник может переписать запросы и получить не принадлежащие ему данные. Помимо этого от клиентского ПО скрывается структура БД.
    3. Хранимые процедуры, как неинтерактивные модули, проще отлаживать и тестировать в автоматическом режиме.
    4. Написанные хранимки меньше, чем клиентское ПО, подвержены изменениям в ходе эволюции и активно повторно используются в разных клиентских модулях.
    Ответ написан
    Комментировать
  • Почему вылетает исключение при выносе кода из метода __del__ в change_extension()?

    @nirvimel
    Python не C++, в Python НЕТ деструкторов (в смысле C++), которые вызываются гарантированно. __del__ - не прямой аналог деструктора C++, его поведение зависит от GC, он может вызываться в любой момент, и в общем случае нет никакой гарантии что он вообще будет вызван. В общем, __del__ в Python - плохая практика.
    Что же делать:
    1. Надо стараться реорганизовать код так, чтобы объект, требующий финаллизации, использовался через with(your_object). Надо следовать хорошим примерам, например, file object, работа с которым идет через with(open('workfile')).
    2. Если совсем не получается свести к логику кода к такой модели, то можно объявить метод close() и вызывать его вручную. Но если ваш код размазан так, что в него не получается вкрутить with, то нет гарантий что на какой-то ветке алгоритма вы забудете вызвать этот close().
    3. Худший вариант: оставить таки __del__. Нигде не вызвать его явно, просто бросать объекты после использования. По окончанию исполнения скрипта, GC подберет их и вызовет всем __del__, но только в том случае если между ними нет циклических ссылок, но в достаточно крупной программе это вообще невозможно гарантировать.
    Ответ написан
    Комментировать
  • Как подчинить сортировку с буквой Ё и с itemgetter?

    adugin
    @adugin Куратор тега Python
    Формальный говнокод для решения проблемы буквы Ё (концепт):
    key = lambda c: ord('Е') + 0.5 if c == 'Ё' else ord(c)

    Правильный путь:
    import locale
    from functools import cmp_to_key
    from collections import OrderedDict
    
    locale.setlocale(locale.LC_ALL, 'Russian_Russia.1251')
    
    a = [{'src': 'Яблоко', 'dst': 2343}, {'src': 'Ананас', 'dst': 323}, {'src': 'Ёжик', 'dst': 3223}]
    
    # Чтобы не вызывать связку cmp_to_key(locale.strcoll) в sorted() многократно
    def keyfunc(item, func=cmp_to_key(locale.strcoll)):
        return func(item[0])
    
    d = OrderedDict(sorted(((e['src'], e['dst']) for e in a), key=keyfunc))

    Если всё же требуется именно список словарей:
    # Чтобы не вызывать связку cmp_to_key(locale.strcoll) в sorted() многократно
    def keyfunc(item, func=cmp_to_key(locale.strcoll)):
        return func(item['src'])
    
    sorted(a, key=keyfunc)

    Но самое адекватное решение будет таким (для работы: pip install sortedcontainers):
    from sortedcontainers import SortedDict
    d = SortedDict(cmp_to_key(locale.strcoll), {e['src']:e['dst'] for e in a})

    Примечания:
    1. Если можете использовать последнюю версию Python, то начиная с версии 3.6 порядок элементов в словаре не меняется, то есть его можно создать сразу сортированным и работать без опасений.
    2. Модуль sortedcontainers по быстродействию и удобству оставляет позади все существующие альтернативные библиотеки, включая стандартную collections. Очень рекомендую.
    Ответ написан
  • Какую программу написать на Python?

    Сделать графический интерфейс к какому-нибудь публичному api. Вот пару списков:
    https://github.com/abhishekbanthia/Public-APIs
    https://github.com/toddmotto/public-apis
    Ответ написан
    Комментировать
  • Как закрепить версию пакета за проектом?

    @id2669099
    при использовании менеджера пакетов, к примеру, pip, можно выполнить команду "pip freeze" и тогда будет выведены все пакеты, которые установлены, этот вывод можно записать в файл requirements.txt (pip freeze > requirements.txt) и при разворачивании проекта выполнить "pip install -r requirements.txt" и тогда установятся требуемые версии пакетов
    Ответ написан
    Комментировать
  • Как удалить старые партиции?

    Lorien_Elf
    @Lorien_Elf
    Keep calm and drop database
    Я вам настоятельно рекомендую начать работу с ORACLE с чтения основных концепций.
    https://docs.oracle.com/database/121/CNCPT/toc.htm

    В частности там почитать про корзину. Объекты из нее удаляются командой PURGE.

    PURGE RECYCLEBIN;
    Ответ написан
    Комментировать
  • Как сделать правильный вывод генерируемых блоков при генерации option в JS?

    Stalker_RED
    @Stalker_RED
    Половину кода пришлось выбросить
    $('.sel').html(data.map(d=>`<option value="${d.name}">${d.name}</option>`))
    $('.box').html(data.map(d=>`<p class="${d.name}">${d.name}</p>`))
    
    $('.sel').on('change', function() {
      $('.box .'+this.value).slideDown().siblings().hide()
    })
    https://jsfiddle.net/ok834qLs/
    Ответ написан
    Комментировать
  • Как запустить аргумент в уже работающий код на Python?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    2) очереди
    1) fileopen
    0) socket
    Ответ написан
    Комментировать
  • Как получить разницу между массивами?

    @wostex
    var i = array1.filter(al => {return !array2.map(bl => bl.id).includes(al.id)});


    i вернет массив объектов с id, которых нет в array2

    массив именно значений:

    array1.filter(al => {return !array2.map(bl => bl.id).includes(al.id)}).map(l => l.id)
    Ответ написан
    3 комментария
  • Как узнать кол-во процессов и кодировку файловой системы c помощью python?

    @newpy
    web-dev
    Воспользоваться psutil
    import psutil
    
    for proc in psutil.process_iter():
        try:
            pinfo = proc.as_dict(attrs=['pid', 'name'])
        except psutil.NoSuchProcess:
            pass
        else:
            print(pinfo)
    Ответ написан
    Комментировать
  • Что конкретно означает в вакансии строка "опыт проектирования сложных БД"?

    sim3x
    @sim3x
    В теории - сложная структура, свои типы, дополнения на С, использование субд на максимуме
    На практике - говнокод, который нужно разгрести за парой поколений школьников и студентов, писавших софт до тебя
    Ответ написан
    Комментировать
  • Где можно посмотреть пример сайта?

    RevHarris
    @RevHarris
    Шо то, шо это
    Ну например вот.

    Вот ещё (там ссылка на исходник).

    А вот тут, я так понял, целый список нужных вам сайтов. Выбирай не хочу.
    Ответ написан
    Комментировать
  • Как из Python отдать команды в PowerShell по строкам?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    ;
    Ответ написан
    Комментировать