• Как поставить срок работы программе Python?

    Sanes
    @Sanes
    Часть функционала надо вынести на сервер. Это единственное, что можно сделать для python.
    Либо скомпилировать. И надеяться, что у большинства пользователей хватит ума и паранои не запускать всякий хлам с обменников.
    Ответ написан
    Комментировать
  • Как из функции Python вытащить переменную?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Очередь используйте.
    Ответ написан
    Комментировать
  • Зачем нужен @classmethod?

    longclaps
    @longclaps
    Но почему я не могу написать метод from_string так:
    cls вместо явного Date позволит наследнику Date (напр. AztecaDate - дата по календарю ацтеков) порождать именно AztecaDate.
    Кстати, есть одна тонкость, связанная с реализацией ООП на разных языках. C++ позволяет реализовать несколько разных, но одноимённых конструкторов класса с разной сигнатурой (набором аргументов), например, можно сделать так:
    Date(1, 1, 2019) # конструктор с сигнатурой (int, int, int)
    Date("1.1.2019") # другой конструктор с сигнатурой (str)
    В питоне можно добиться подобного, но ручками, анализируя состав аргументов Date.__init__, что неудобно, громоздко и нунафиг. Уж лучше забабахать Date.from_string. Но это неизбежно в динамическом языке - ведь C++ должен знать всё про аргументы конкретных вызовов конструкторов на этапе компиляции, а мы можем в рантайм творить что угодно )))

    для чего нужен staticmethod, если это уже не метод, а просто функция, и я могу вынести ее из класса.
    Да, можете. Я думаю, тут действует логика лучшей читаемости и логика экономии пространства имён:
    • Date._статикметод1 хоть и неочевидно что делает, но точно имеет отношение к Date
    • При импорте from date import * вы не получите охапку непонятных имён.

    Кстати, это не бесплатно - обращение к квалифицированному имени каждый раз создаёт дополнительный опкод LOAD_ATTR. Поэтому любители выжать максимум производительности (ну бывает полезно в глубоком цикле) используют такой трюк:
    # медленно
    l = []
    for i in range(100500):
        l.append(i)
    # чуть быстрее )))
    push = l.append
    for i in range(100500):
        push(i)
    Ответ написан
    2 комментария
  • Как оформить 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 комментария
  • Как лучше всего логгировать web приложение на Python?

    deepblack
    @deepblack Куратор тега Python
    Sentry.io
    • integrating with the Python ecosystem
    • manual error and event capturing
    • configuration options
    • adding context (tags, user and extra information)
    • tracing issues with breadcrumbs
    • capturing user feedback on crashes
    Ответ написан
    Комментировать
  • Как сделать свой виджет на Python?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    веб - джанга/фласк
    десктоп - pyqt
    Ответ написан
    3 комментария
  • Как правильно рассчитывать себестоимость работ для проекта?

    tema_sun
    @tema_sun
    Предполагаемое количество часов умножить на стоимость часа и затем умножить на Пи.
    Ответ написан
    Комментировать
  • Front-end разработка, правильная сборка?

    search
    @search
    мама говорит что я особенный
    Если компания дорожит качеством продукта и безопасностью данных своих клиентов, то сборка и выкат новой версии проводится автоматически Continuous Intrgration сервером. У программистов вобще нет доступа к проду. Доступ к проду есть только у CI-сервера. У программиста есть доступ только к GIT репозиторию проекта. Вся работа проводится в своём окружении и в отдельной ветке. Затем ветка тестируется на тестовом окружении (близком к продакшену), если надо правится, и затем вливается в главную ветку проекта. После этого CI подхватывает изменения, билдит фронт и бэк и выкатывает это дело на прод. Это очень общий вариант. Там есть куча нью-ансов.

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

    UPD
    Забыл сказать, что этот путь не даётся легко. Нужно потренироваться где-то полгодика. Но зато на всю жизнь получаешь спокойные ночи и здоровый цвет лица, так что оно того стоит.
    Ответ написан
    2 комментария
  • Как настроить 2 БД в Django?

    sim3x
    @sim3x
    The migrate management command operates on one database at a time. By default, it operates on the default

    If, as in the second example above, you’ve left the default database empty, you must provide a database name each time you run migrate

    можно написать алиас для всех бд или написать свой коммандс-обертку
    Ответ написан
    1 комментарий