Задать вопрос
  • Правда ли то, что большинство Python библиотек пишут на C/C++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Не, не правда. 99% библиотек для Python написано на Python. На Сях пишутся только критичные к скорости выполнения и расходу памяти. А ещё бывает, что для исходно Сишной библиотеки, ставшей популярной, пишут обвязку на Python, так как это относительно просто позволяет заимствовать профит.
    Ответ написан
    Комментировать
  • Mожно ли сделать bluetooth приложение на python kivy?

    @vanillathunder
    Ответ написан
    Комментировать
  • Как создать виртуальное окружение Python 3.7, при наличии нескольких версий интерпретатора в ОС семейства Linux?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Используй pyenv если работаешь с разными версиями Python. Ну и для разработки лучше использовать не системный Python.

    Так что pyenv-installer и вперёд!
    ставишь pyenv
    прописываешь в ~/.bash_profile
    ставишь нужную версию python: pyenv install 3.7.3 (или что надо из списка pyenv install --list)
    создаешь виртуальность: pyenv virtualenv 3.7.3 venv37
    переходишь в каталог проекта и ставишь эту виртуальность по умолчанию для каталога: pyenv local venv37

    Вуаля! При переходе в каталог проекта virtualenv активируется автоматически.
    Каждому проекту - свою virtualenv и со своей версией python (если надо, конечно)
    Ответ написан
    Комментировать
  • Как можно описать такой запрос при помощи синтаксиса Django ORM?

    Bobsans
    @Bobsans Автор вопроса
    Full-Stack Developer
    Решение подсказал Вадим Шаталов. Сылка: https://docs.djangoproject.com/en/dev/ref/models/e...
    В моем случае вот что получилось:
    class Item(models.Model):
        name = models.CharField(max_length=255)
        price = models.DecimalField(max_digits=16, decimal_places=2)
        
    class ConvertedPrice(models.Model):
        item = models.ForeignKey(Item, on_delete=models.CASCADE)
        currency = models.CharField(max_length=3)
        value = models.DecimalField(max_digits=16, decimal_places=2)
    
    ordered_items = Item.objects.annotate(converted=Subquery(
        ConvertedPrice.objects.filter(item=OuterRef('id'), currency='USD').values('value')
    )).order_by('converted')

    И на выходе вот такой SQL:
    SELECT 
        "app_item"."id", 
        "app_item"."name", 
        "app_item"."price", 
        (
            SELECT U0."value" 
            FROM "app_convertedprice" U0 
            WHERE (U0."currency" = USD AND U0."item_id" = ("app_item"."id"))
        ) AS "converted" 
    FROM "app_item" 
    ORDER BY "converted" ASC;
    Ответ написан
    Комментировать
  • Как оформить Python приложение для публикации в pypi и использовании в качестве CLI утилиты?

    deepblack
    @deepblack Куратор тега Python
    Как вам уже сказали, вам сначала сюда: packaging.python.org

    А дальше создаете setup.py в проекте, подобного содержания:

    посмотреть код
    from setuptools import setup
    from my_pkg import constants
    from os import path
    
    this_directory = path.abspath(path.dirname(__file__))
    with open(path.join(this_directory, 'README.md')) as f:
        long_description = f.read()
    
    setup(
        name='my_pkg',
        version=constants.MY_PKG_VERSION,
        description='Pkg description',
        author='Your Name',
        author_email='your@ema.il',
        url='http://github.com/some/user',
        packages=[
            'my_pkg',
            'my_pkg.abstractions',
            'my_pkg.exceptions',
        ],
        long_description=long_description,
        long_description_content_type='text/markdown',
        include_package_data=True,
        install_requires=[],
        python_requires='>=3.4',
        classifiers=[
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python",
            "Programming Language :: Python :: 3.4",
            "Programming Language :: Python :: 3.5",
            "Programming Language :: Python :: 3.6",
            "Programming Language :: Python :: 3.7",
            "Natural Language :: English",
            "Operating System :: OS Independent",
            "Development Status :: 1 - Planning",
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Topic :: Software Development :: Libraries"],
        package_data={
            '': ['*.md', '*.txt', '*.json']
        },
        keywords='my_pkg',
        license='MIT',
    )


    Как разберетесь с этим, переходите сюда command-line-scripts

    После того как прочитаете, в setup.py добавляете (предварительно реализовав базовые функции скрипта):
    entry_points={
            'console_scripts': ['your_command=my_pkg.cli.command_line:main'],
        },


    UPD:
    Касательно кода, рекомендую ознакомиться с этими источниками:
    Ответ написан
    2 комментария
  • Создание лицензии для плагина на Python+Django?

    sim3x
    @sim3x
    Я вам посоветую опубликовать ваш плагин под gnu-like лицензией без всякой защиты и продавать консалтинг и внеочередные хотелки юзеров

    Любой тип защиты потребует вашего времени и с не нулевой вероятностью приведет к багам
    А наивная защита для популярного плагина - еще и бесполезна
    Надежная защита в виде бинарника с защитой от реверса - не тривиальная штука. И ее не написать без опыта в области реверса
    Ответ написан
    Комментировать
  • Есть ли преимущество Java над Python для веб-приложения?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Главное преимущество и проклятие скриптовых языков - их динамическая природа. С одной стороны это даёт быстрый цикл разработки, а с другой утяжеляет поддержку крупных проектов. В строготипизорванной Java большая часть ошибок, особенно глупых, уходит на этапе компиляции. С другой стороны, чтобы запустить простой проект на Java придётся выполнить много лишних телодвижений. Ну и всем известная смешная картинка
    java-stack.jpg

    Поэтому лучше выбирать инструмент под задачу, не забивать кувалдой шпильки и не стучать ювелирным молоточком по железнодорожному костылю.
    Ответ написан
    2 комментария
  • Как преобразовать строку в функцию?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Если функция next определена в том же модуле, где callback_inline, то

    globals()[callback_data.data](user_last_message)

    Если в импортированном модуле, например с именем example, то

    getattr(example, callback_data.data)(user_last_message)
    Ответ написан
    Комментировать
  • Как найти частичное совпадение строк?

    @deliro
    pip3 install fuzzywuzzy[speedup]

    from fuzzywuzzy import fuzz
    
    x = "0 .. трубок использовали для прожигания стальковша.Замена воронки 18м 8сл. Разлита полностью."
    y = "трубок использооали для прожигания"
    
    fuzz.partial_ratio(x, y)


    https://github.com/seatgeek/fuzzywuzzy
    Ответ написан
    8 комментариев
  • Как правильно делать email рассылку с помощью celery?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Лучше второе, проще делать повторные попытки с нарастающим ожиданием в случае сбоя отправки.
    Ответ написан
    Комментировать
  • Как выйти из нескольких вложенных циклов?

    15432
    @15432
    Системный программист ^_^
    i = j = a = LIMIT;
    break;
    Ответ написан
    2 комментария
  • Как через Python + MySQL сделать обратный отсчёт времени?

    SagePtr
    @SagePtr
    Еда - это святое
    Ещё можно использовать встроенный в MySQL планировщик заданий, тогда не придётся что-нибудь дёргать из cron. По умолчанию этот планировщик выключен, потому нужно сперва включить в конфигах.
    Ответ написан
    Комментировать
  • Как правильно обработать urls в django?

    ulkoart
    @ulkoart
    что мешает поставить 1.9 и действовать по книге? на этапе обучения будет не очень удобно каждый раз отвлекаться на различия версий.
    Ответ написан
    2 комментария
  • Когда использовать процессы в Python?

    denisbondar
    @denisbondar
    Python, PHP developer
    Используйте потоки для задач, связанных с ограничениями ввода-вывода.
    Используйте процессы для задач, связанных с ограничениями процессора.
    (с) Билл Любанович - Простой Python
    Ответ написан
    Комментировать
  • Как вывести данные из django в шаблон word?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Так гугл же!
    Первое, что гуглится по запросу python docx template - библиотека docxtpl
    Под капотом используется известная в этих кругах либа python-docx для возни с документами + также популярная jinja2 для, собственно, шаблонизации.

    И да - про именно .doc, старый добрый бинарный проприетарный формат, скорее всего, придётся забыть. Только .docx.

    в нём есть некоторый шаблон, подставляются значения из самой базы

    Если нет возможности или желания переводить ваш синтаксис шаблонов в jinja2 - тогда берите напрямую python-docx и сами пишите логику по замене токенов в шаблонах на нужные значения из БД.
    Ответ написан
    3 комментария
  • Как разделить таблицу на страницы?

    @santaatnas
    Java, Python, Php
    Используйте пагинацию https://docs.djangoproject.com/en/2.0/topics/pagin...
    Ответ написан
    Комментировать
  • Стоит ли выносить конфиги Django в ini?

    sim3x
    @sim3x
    Нет

    Секретные переменные нужно вынести в env

    Если требуются корректировать настройки в зависимости от окружения (дев, тест, прод), то файл settings преобразуют в модуль и внутри модуля делают несколько файлов для каждого окружения, которые модифицируют основной конфиг

    settings
    ├── dev.py
    ├── __init__.py
    ├── settings.py
    └── test.py


    внутри __init__.py можно организовать автоматическое определение окружения по переменным окружения
    Ответ написан
    Комментировать
  • Нужен совет по направлению развития начинающего программиста?

    @Kup9_NpS
    Шесть месяцев назад я нашёл в Интернете книжку "Dive into Python". Странная книжка, толстая, да ещё на не русском языке. Усердно прочитал её, методично и вдумываясь, но таки ничего и не понял. Но что-то не отпускало меня - я пошёл на python.org и стал изучать стандартную библиотеку, старательно, скурпулёзно, от корки до корки. Гугля примеры кода, я наткнулся на пост в блоге одного гуру, где было написано про PEP8. То, что рассказывал этот умудрённый опытом кодер, настолько впечатлило меня, что я словно в припадке безумия бросился зубрить эту конвенцию по написанию питоньего кода. У меня тряслись руки, по телу прокатывали волны возбуждения, я, можно сказать, бился в экстазе всё это время - и теперь могу процитировать наизусть любой пункт, даже если меня разбудить посреди глубокой ночи.
    Новые знания окрыляли меня, я бросился писать (что бы вы подумали?) очередную имиджборду. Я не писал раньше имиджборд, эта была моей первой. По пути пришлось освоить азы вёрстки на html и css, но там всё оказалось совсем не сложно.
    Я плавно двигался вперёд, наращивая функционал. И знаете что? Я упёрся в недостаток производительности. Ну, так мне показалось. Я делал замеры, устранял места с тяжёлым кодом. Тысячи раз запускал ab, но так и не сумел перейти порог в 300 запросов в секунду. Я как-то ожидал большего и был немного разочарован.
    Гугл, снова гугл. Десятки статей и тем на форуме... Довольно быстро я заметил, что люди часто пишут про какие-то "асинхронные веб-сервера". Часто встречались названия Tornado и Gevent. Я прочитал про них подробнее - и был просто ошеломлён. Как мне это раньше не приходило в голову?! Это же, это просто гениально, чёрт меня побери!
    Исходники в ведро, всё переписать! Меня переполняло новое знание, поток мыслей ровно ложился в строчки кода. Я просто не мог остановиться. Чашка кофе... Ещё чашка... Мой небольшой кусочек софта приобретал кристалльную чистоту, я смертельно устал, но продолжал в умилении полировать его зудящими руками, нанося последние штрихи.
    Пять тысяч. Я получил производительность в пять тысяч запросов в секунду. В ту ночь я так и не смог заснуть.
    Наиувлекательнейший мир хай-лоада открылся передо мной. Позже я изучил ещё много классных вещей типа сверхбыстрых асинхронных key-value-хранилищ, или, например, такого необычного подхода к обработке данных, как map-reduce.
    Это уже был другой я, новый, обновлённый. С незашоренным взглядом, с жаждой новых знаний и незнакомых концепций. Я летел вперёд, оставляя за спиной ступень за ступенью.
    За пол-года я сменил несколько мест работы, и моя зарплата взлетела до умопомрачительных сумм. Сотни замечательных мест открыли передо мной свои двери. Любые, самые изысканные девушки проявляли просто чудеса изобретательности, чтобы находиться рядом со мной.
    А ещё, я никогда не забуду тот момент, когда на одной из конференций я впервые в жизни поймал на себе завистливый взгляд. Это был взгляд какого-то сливающегося с толпой неудачника, взгляд преисполненный ненависти, презрения и желчного вожделения, направленного на мой Олимп. Наверное, он всю свою никчёмную жизнь писал на каком-нибудь си-шарпе или там на джаве, проводя долгие дни в одиночестве. И теперь начинал подсознательно догадываться, что долгие годы безуспешно пытался построить замок из навоза.
    Ответ написан
    2 комментария