• Как установить переменную окружения в Docker?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    1 вариант:
    docker-compose.yml:
    ...   
             env_file: .env

    или
    ...
           environment:
               - SECRET=value


    .env:
    SECRET=value

    2 вариант
    docker run --env SECRET=value ...
    или
    docker run --env-file .env ...
    Ответ написан
    Комментировать
  • Как организовать удобную разработку Django пакета (батарейки)?

    ri_gilfanov
    @ri_gilfanov Автор вопроса
    Web- and desktop-developer
    Сергей Горностаев предложил использовать tox, а в документации этого инструмента я наткнулся на более простое и удобное решение.

    В документации setuptools есть раздел Development mode.

    Если вместо команды install использовать команду develop
    python3 setup.py develop
    пакет не будет собран и полноценно установлен в глобальное или виртуальное окружение.

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

    После этого, пакет становится доступен для импорта.

    Если импортировать такой пакет в Django-проект, сделать manage.py runserver и начать редактировать исходники пакета -- встроенный в Django сервер для разработки как обычно перезапускается при каждом сохранении исходников пакета. Хотя импортированный пакет может лежать где угодно в файловой системе.

    Таким образом, работая над батарейкой для Django -- можно тут же видеть изменения в запущенном Django-проекте, без необходимости переустанавливать батарейку после каждой правки её исходников.

    Спасибо, проблема решена просто, дёшево и элегантно.

    P.S. Предложенная Сергеем библиотека tox больше подходит для автоматизации тестирования Python проекта во множестве разных рабочих окружений. Например, если Вы гарантируете пользователям поддержку разных версий требуемых библиотек, разных версий интерпретатора, разных интерпретаторов и т.д. -- tox может серьёзно облегчить Вам жизнь.

    P.P.S. Если кто-то не знает как пользоваться setuptools и создавать установочные файлы для своих Python пакетов -- есть статьи и даже видео на русском языке. Например:
    Ответ написан
    Комментировать
  • Есть ли аналог модуля shelve, который работает как список, а не как словарь?

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

    1. numpy позволяет создавать типизированные массивы и хранит их в памяти, но в весьма компактном виде (объем порой в разы меньше, чем у обычного python'овского списка) и представляет очень богатые возможности по обработке данных.

    2. pandas, используя numpy, умеет создавать структурированные массивы (датафреймы), похожие на таблицы баз данных, и предоставляет развитый функционал по выборке и обработке этих данных.

    3. pytables позволяет сохранить numpy-массивы или pandas-датафреймы на диск в виде файлов в формате HDF5, обеспечивая быстрый доступ к данным и опять же удобный функционал по поиску/выборке данных.
    Скорее всего на ваших объемах данных pandas+HDF5 будет в разы/десятки раз быстрее любой СУБД.

    4. bcolz позволяет сжать данные, а также хранить их не только в памяти, но и на диске.
    При этом операции с данными производится очень быстро, иногда даже быстрее чем с несжатым списками.

    Вообще, спископодобные данные гораздо быстрее обрабатывать с помощью векторных операций в numpy и pandas. Но если вам все-таки нужны именно циклы, то также рекомендую обратить внимание на numba, с помощью которой можно в десятки-сотни раз ускорить python'овские циклы.
    Ответ написан
    Комментировать
  • Как вывести имя и фамилию в django-allauth?

    crazyzubr
    @crazyzubr
    Python backend-developer
    Напишите свою функцию для вывода имени пользователя и пропишите путь к ней в настройках settings.py.

    ACCOUNT_USER_DISPLAY (=a callable returning user.username)
    A callable (or string of the form 'some.module.callable_name') that takes a user as its only argument and returns the display name of the user. The default implementation returns user.username.


    Например:
    ACCOUNT_USER_DISPLAY = lambda user: u'%s %s' % (user.first_name, user.last_name)
    или
    ACCOUNT_USER_DISPLAY = lambda user: user.get_full_name()
    или
    ACCOUNT_USER_DISPLAY = 'myapp.somemodule.utils.user_display'
    Ответ написан
    Комментировать
  • Переход с Django Templates на Jinja2?

    появление официальной возможности подключить jinja не значит что расширения стали бесполезны, когда потребовалось в итоге взвесив все за и против всё равно остановился на niwinz.github.io/django-jinja
    При этом я не отключал стандартные шаблоны, я использую и то и другое, где узкем местом стали шаблоны, перешел на использование jinja.

    пользуюсь примерно таким:
    TEMPLATES = [
        {
            'NAME': 'django',
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': False,
            'OPTIONS': {
                'string_if_invalid': 'VARIABLE ERROR',
                'context_processors': [
                    "django.contrib.auth.context_processors.auth",
                    "django.core.context_processors.request",
                    'django.contrib.messages.context_processors.messages',
                    'core.context_processors.cities_list',
                    'django.core.context_processors.static',
                ],
                'loaders': [
                    ('django.template.loaders.cached.Loader', [
                        'django.template.loaders.filesystem.Loader',
                        'django.template.loaders.app_directories.Loader',
                    ]),
                ],
    
            },
        },
        {
            'NAME': 'jinja2',
            'BACKEND': 'django_jinja.backend.Jinja2',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'autoescape': False,  # !!!!!!
                "app_dirname": "jinja2",
                "match_extension": ".html",
                "newstyle_gettext": True,
                "translation_engine": "django.utils.translation",
                "extensions": [
                    "jinja2.ext.do",
                    "jinja2.ext.loopcontrols",
                    "jinja2.ext.with_",
                    "jinja2.ext.i18n",
                    "jinja2.ext.autoescape",
                    "django_jinja.builtins.extensions.CsrfExtension",
                    "django_jinja.builtins.extensions.CacheExtension",
                    "django_jinja.builtins.extensions.TimezoneExtension",
                    "django_jinja.builtins.extensions.UrlsExtension",
                    "django_jinja.builtins.extensions.StaticFilesExtension",
                    "django_jinja.builtins.extensions.DjangoFiltersExtension",
                    # "coffin.spaceless" не работает в py3
                ],
            }
        },
    ]
    Ответ написан
    2 комментария
  • Нужно ли ИП фрилансеру?

    Inv_Hunter
    @Inv_Hunter
    Управляющий партнёр в BACG
    Вот здесь, очень доступно про разницу ООО и ИП

    Надеюсь, мой ответ будет Вам полезен.
    Ответ написан
    Комментировать
  • Как написать запрос на sqlalchemy с фильтром по количеству покупок?

    Это должно быть вот так. Нужно использовать GROUP BY.

    def regular_clients(self, time_start, time_end):
        return db.session.query(User).join(Sales).filter(self.id==1, Sales.timestamp >= time_start, Sales.timestamp <= time_end).group_by(User.id).having(func.count(Sales.id) >= 5).all()
    Ответ написан
    1 комментарий
  • Привильно ли сказать что psycopg2 это ORM?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Нет psycopg2 это адаптер для PostgreSQL, который просто реализует протокол для обмена с СУБД.
    ORM - это когда из таблиц БД создаются объекты. Пример ORM - sqlalchemy, django orm.
    Ответ написан
    Комментировать
  • Как отсслеживать сообщений apt через python в Debian?

    Не уверен, что точно понял вопрос, но у apt-get'а есть флаг -y. А сообщения apt-get в Python отслеживаются довольно просто: я так понимаю, используется subprocess, там можно получить как stdout, так и stderr, по ним что угодно отловить. Но это все как-то сложно... Если у вас набор ПО не меняется часто и все сводится к манипуляциям в shell, то гораздо логичнее и проще здесь использовать простенький bash-скрипт. Если же речь идет про сервера и их много, то можно не костылять, использовать, например, Ansible.
    Ответ написан
    Комментировать
  • С чего начать изучение веб разработки на Python, человеку абсолютно не знакомому с backend?

    Heckfi
    @Heckfi
    попробуйте изучить какой-нибудь питоновский фреймворк(django, flask)
    Ответ написан
    Комментировать
  • Кому пригодиться проект городского каталога организаций с привязкой к картам Яндекса на Django?

    @arezvov
    pman, вы сработали замечательно, с точки зрения разработчика, за что и высказываю уважение к посту.
    К тому же Выборг — красивейший город, буду знать откуда слить фотки.
    Как вы и сами уже осознали, в вашей затее не менее важной частью была организация оффлайновых мероприятий, что сложно сделать без практики.
    Раз теперь вы — житель Санкт-Петербурга, буду рад помочь вам советом в вашем следующем начинании, если еще решитесь )
    Ответ написан
    Комментировать