Уведомления

Группа в Telegram: @pythonsu

#1 Март 25, 2016 17:42:09

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

Вопрос конечно мегачайниковский, но сходу опять-же не нашел.

Сделал одну программку, которая парсит сайт, собирает из него инфу и кладет в СУБД.
Потом начал делать другую программку, которая пользует ту инфу.
Подумалось что табличные определения сиквельной алхимии

class SmsUser(Base):
    __tablename__ = 'd_sms_user'
    sms_user_id = Column(Integer, primary_key=True)
    sms_user_name = Column(Unicode(250))
    api_id = Column(Unicode(45))
    phone_no = Column(Unicode(12))
    email = Column(Unicode(150))
было бы прикольно хранить в общем модуле.
Сказано, сделано.
НО!
Сделал, то я сделал, но возникает несколько но:
1. Файлик пришлось класть в /usr/lib/python2.7 руками.
2. Файл получается ни в каком проекте pycharm то есть сам по себе валяется. Ни в git закоммитить ни на сервак пропихнуть.

То есть я понимаю что можно под него сделать отдельный проект PyCharm, класть его в отдельный репозиторий гит, пушить на серваки и виртуалки и.т.д. Но получается, как бы не забыть его обновленную версию запихнуть на мой “PROD”.

То есть ситуация, добавил я в СУБД табличку, добавил в общий модуль класс этой таблицы, сделал обработку таблицы в модуле проекта. Потом торжественно лью на прод и забываю залить новую версию библиотеки. Epic fail.

Наверняка велосипед уже придуман, только подскажите его название или куда копать ?

Офлайн

#2 Март 25, 2016 18:12:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

Не!
Вы же понимаете, что тот код, который выкачаете из pypi с помощью pip, он точно такой же как ваш. Вам надо оформить вашу библиотеку как пакет и сделать из этого пакета устанавливаемый модуль.
дока тут



Офлайн

#3 Март 25, 2016 18:31:01

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

FishHook
сделать из этого пакета устанавливаемый модуль.
Спасибо !
Только вот подход меня смущает. Почитал повнимательнее про pypi. То есть получается мне надо будет заливать свои библиотеки на pypi и они будут доступны всем ?
Дело даже не в том что всем доступны ( они никому кроме меня не понадобятся ).
Меня смущает сложность процесса.
Есть модуль, который хочется впихнуть в несколько проектов. “Проекты” чисто для развлекухи и обучения.
Хочется автоматизировать процесс обновления модулей библиотек не прибегая при этом к такой процедуре, как выкладывания модулей в общий репозиторий.

Офлайн

#4 Март 25, 2016 18:39:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

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

pip install git+https://github.com/mynickname@project



Офлайн

#5 Март 25, 2016 18:41:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

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



Офлайн

#6 Март 25, 2016 21:04:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

dremdem
Наверняка велосипед уже придуман
Его вам подсказали. можно использовать pip,conda,apt-get,pacman или другие системы управления пакетами
dremdem
Меня смущает сложность процесса.
Не смущайтесь, это сложная проблема. Когда пакетов тысячи, между ними есть большое число связей, и их делают десятки тысяч людей, то задача становится не детской.

dremdem
1. Файлик пришлось класть в /usr/lib/python2.7 руками.
Ни в git закоммитить ни на сервак пропихнуть.
Если вам лень детально описывать взаимосвязи пакетов, но вы хотите контролировать общую часть гитом можете завести произвольную папку, ну например my_python_common_files и бросать весь мусор туда, контролируя его гитом. А к папке пропишите PYTHONPATH. Тогда все проекты для данного пользователя смогут импортировать ваши модули (а поскольку это отдельная папка то под контролем будут только ваши файлы).

dremdem
2. Файл получается ни в каком проекте pycharm то есть сам по себе валяется.
Я наверное несколько дольше вас питоном пользуюсь. Так у меня все файлы питона не принадлежат проектам pycharm. Помоему файлы проекта для питона это вообще зло, и вообще не нужны. И в git пихнуть и на сервак можно отлично без всяких проектов.



Отредактировано doza_and (Март 25, 2016 21:06:03)

Офлайн

#7 Март 25, 2016 22:58:15

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

FishHook
Ничего вам не надо будет, храните свои библиотеки в своем гите и ставите из него по мере необходимости себе в систему или виртуальное окружение
Надо будет попробовать. Спасибо !
Тем более для этого могу использовать свой удаленный гит-репозиторий на малине

doza_and
Если вам лень детально описывать взаимосвязи пакетов, но вы хотите контролировать общую часть гитом можете завести произвольную папку, ну например my_python_common_files и бросать весь мусор туда, контролируя его гитом. А к папке пропишите PYTHONPATH. Тогда все проекты для данного пользователя смогут импортировать ваши модули (а поскольку это отдельная папка то под контролем будут только ваши файлы).

Я правильно понимаю, что взаимосвязи пакетов прописываются в файле requirements.txt для каждого пакета ?
Меня вот какая ситуация беспокоит:
Есть например один модуль/пакет который используется в 3-х проектах.
Я его выложил на PyPi как пакет.
Дальше я его прописываю в requirements.txt каждого из трех проектов.
Соответственно при разворачивании проектов на окружении автоматически этот модуль/пакет будет установлена.
Далее, я для меняю пакет ( добавляю в него новые фичи ).
Есть возможность как-то понять, что пакет надо обновить ?

З.Ы. Я понимаю, что у меня в голове каша, но тем не менее ))



Офлайн

#8 Март 25, 2016 23:36:55

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

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

Офлайн

#9 Март 26, 2016 06:45:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

dremdem
Есть возможность как-то понять, что пакет надо обновить ?
dremdem
понял что ничего не знаю ))
Вот для этого у пакетов и есть версии. По умолчанию ставится последняя версия.
Но в ваших трех проектах в виртуальном окружении останется все по старому, пока вы не сделаете pip -U для каждого из них (или для одного это зависит от настроек).
Версии пакетов естественно почти ортогональны версиям системы контроля версий.

У вас противоречивые требования.

С одной стороны когда вы используете virtualenv вы пытаетесь изолировать проекты, чтобы они не влияли друг на друга. Но когда вы выделяете общую библиотеку/модуль/пакет вы эту связь вводите. Требуете чтобы изменения в ней автоматически отображались в ваших проектах. Естественно получаете бонус от снижения трудоемкости поддержки этих трех систем, поскольку изменения нужно вводить в одном месте. Вам надо выбрать что-то одно.

Есть еще вариант. Использовать git submodules. Это некий способ автоматизировать копирование “последней версии библиотеки” в текущий проект.

p.s.
Я думаю что вам не подходит управление пакетами при помощи pip, поскольку вам надо жестко отслеживать связь между схемой базы и вашим кодом. При обновлении надо будет модифицировать базу, а pip не умеет выполнять произвольные команды. Смотрите в сторону менеджера пакетов вашей ОС.



Отредактировано doza_and (Март 26, 2016 06:54:32)

Офлайн

#10 Март 28, 2016 13:47:29

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Где хранить общие модули ?

Почитал немного решил использовать вариант с гитом ( который здесь советовали ).
Делал примерно как Здесь или Здесьописано.
Была проблема.
Стремясь освоить PyCharm наконец-то добился чтобы он мне добавлял автоматом модули в setup.py
Но ! Эта редиска добавляла в параметр requires=
А оказывается надо было в install_requires

Всем спасибо за ответы!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version