Найти - Пользователи
Полная версия: Где хранить общие модули ?
Начало » Python для новичков » Где хранить общие модули ?
1
dremdem
Вопрос конечно мегачайниковский, но сходу опять-же не нашел.

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

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

pip install git+https://github.com/mynickname@project
FishHook
FishHook
Хочется автоматизировать процесс обновления модулей библиотек не прибегая при этом к такой процедуре, как выкладывания модулей в общий репозиторий.
Вы можете сделать вообще тупо, пусть ваш пакет - это каталог в файловой системе. Копируйте его в новый проект, и он будет доступен при импорте во всех файлах проекта.
doza_and
dremdem
Наверняка велосипед уже придуман
Его вам подсказали. можно использовать pip,conda,apt-get,pacman или другие системы управления пакетами
dremdem
Меня смущает сложность процесса.
Не смущайтесь, это сложная проблема. Когда пакетов тысячи, между ними есть большое число связей, и их делают десятки тысяч людей, то задача становится не детской.

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

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

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

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

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

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



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

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

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

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

p.s.
Я думаю что вам не подходит управление пакетами при помощи pip, поскольку вам надо жестко отслеживать связь между схемой базы и вашим кодом. При обновлении надо будет модифицировать базу, а pip не умеет выполнять произвольные команды. Смотрите в сторону менеджера пакетов вашей ОС.
dremdem
Почитал немного решил использовать вариант с гитом ( который здесь советовали ).
Делал примерно как Здесь или Здесьописано.
Была проблема.
Стремясь освоить PyCharm наконец-то добился чтобы он мне добавлял автоматом модули в setup.py
Но ! Эта редиска добавляла в параметр requires=
А оказывается надо было в install_requires

Всем спасибо за ответы!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB