LINUX.ORG.RU

Управление сторонними библиотеками проекта в Python и Node.js. Где лучше?

 , ,


0

4

Здравствуйте

У питона и ноды разное представление о том, как искать сторонние библиотеки.

Python ищет начиная от пути расположения интерпретатора. Ищет папку lib/. Если таковой нет - делает cd .. и ищет снова и т. д

Node.js ищет папку node_modules/ начиная от пути расположения запускаемого скрипта и далее так-же как в питоне

Благодаря алгоритму node.js, управление зависимостями очень простое. Надо лишь положить папочку node_modules где-то рядом с вашим скриптом

В Python распространять сторонние либы с проектом не так просто. Приходится городить venv (который, по сути просто добавляет путь вашего проекта в начало PATH), заниматься активацией/деактивацией

Собственно, вопрос. Почему в питоне сделано так «странно»? Дает ли это какие-то иные преимущества по сравнению с подходом в node.js? Или Гвидо просто не сообразил как сделать хорошо?

★★★★★

Последнее исправление: makoven (всего исправлений: 3)

Ответ на: комментарий от EXL

Бгг. Так ты варишься в этой кухне. Понимаешь, чем отличается distutils от setuptools и почему первый устарел.

Еще раз сколько лет Node? И давай перечислим как в JS делают импорты? AMD и как там еще? А эти вебпак бабель и прочие. Да берем учебники по vue.js, «а там елки моталки, налево кухня направо коридор» в одном месте js в другом vue даже TypeScript. А для React? Да я 2 недели собирал окружение чтоб сделать обычный todo app.

Если Zope сообщество устраивает easy_install почему они должны от него отказываться?

demrnd
()
Ответ на: комментарий от demrnd

Причём тут node_modules казалось бы

anonymous
()

И все-таки, как канонично задеплоить на сервер проект, который на машине разработчика работает через venv/virtuelenv? Какой примерный алгоритм?

makoven ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Каждый раз бутстрапить venv и распаковывать пакеты из кеша (или подтягивать новые из интернета).. Ну ладно. Можно и такое пережить)

А на кой ляд venv вкатывает полтора мегабайта колес в новосозданное окружение? Я бы еще понял будь они в lib. Но в запакованном виде они мне зачем?

$ ls  test/share/python-wheels/
appdirs-1.4.0-py2.py3-none-any.whl
CacheControl-0.11.7-py2.py3-none-any.whl
chardet-2.3.0-py2.py3-none-any.whl
colorama-0.3.7-py2.py3-none-any.whl
distlib-0.2.4-py2.py3-none-any.whl
distro-1.0.1-py2.py3-none-any.whl
html5lib-0.999999999-py2.py3-none-any.whl
ipaddress-0.0.0-py2.py3-none-any.whl
lockfile-0.12.2-py2.py3-none-any.whl
packaging-16.8-py2.py3-none-any.whl
pip-9.0.1-py2.py3-none-any.whl
pkg_resources-0.0.0-py2.py3-none-any.whl
progress-1.2-py2.py3-none-any.whl
pyparsing-2.1.10-py2.py3-none-any.whl
requests-2.12.4-py2.py3-none-any.whl
retrying-1.3.3-py2.py3-none-any.whl
setuptools-32.3.1-py2.py3-none-any.whl
six-1.10.0-py2.py3-none-any.whl
urllib3-1.19.1-py2.py3-none-any.whl
webencodings-0.5-py2.py3-none-any.whl
wheel-0.29.0-py2.py3-none-any.whl
makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от demrnd

Я забодался что у меня в ста каталогах node_modules

npm dedupe

makoven ★★★★★
() автор топика
Ответ на: комментарий от user_id_68054

каталог с исходным кодом программы не содержит внутри себя кучи говна..

mv node_modules ..

И никаких виртуальных окружений

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от makoven

Каталог выше каталога с исходным кодом программы содержит внутри себя кучи говна и конфликтует с другими программами.

anonymous
()
Ответ на: комментарий от anonymous

Ну ок. Пакуем проект с node_modules - получаем продакшон-рэди бандл. Пакуем без node-nodules - получаем почти готовый для дистрибутива пакет. И, опять же, никаких venv

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от makoven

Ну ок. Пакуем проект с node_modules - получаем продакшон-рэди бандл. Пакуем без node-nodules - получаем почти готовый для дистрибутива пакет

Он мне во время разработки глаза мозолит.

anonymous
()
Ответ на: комментарий от makoven

mv node_modules ..

а вот так можно ли (?) --

mv node_modules ../shared_node_modules_for_my_chat_apps

И никаких виртуальных окружений

так написал будто-бы виртуальные окружения это якобы недостаток :-) ..

виртуальное окружение это вообще-то наоборот достижение —

ты его активируешь — а дальше все последущие операции используют именно его.

операции с pip и операции с запускаемыми программами.

и это автоматом, без всяких уточнений ключами при каждом запуске программы

--------------------------------------------------

а когда вам на node.js завизут виртуальные окружения — будете во всю писать как это программивно с здорово? :-)

user_id_68054 ★★★★★
()
Ответ на: комментарий от makoven

Поторопились закапывать 2.x

кто поторопился?

его закапывать уже 5 лет назат надо было во всю

user_id_68054 ★★★★★
()
Ответ на: комментарий от makoven

У них просто уже был пакет с программой node, поэтому и переименовали, дополнительный пакет добавляет ссылку node -> nodejs

anonymous
()
Ответ на: комментарий от makoven

Больные ублюдки. Впрочем, в арче python это python3. Тоже оригиналы.

Ублюдки - это аффтары, которые называют исполняемые файлы в своих поделиях node или code. Они, сцуко, о конфликтах имён не слышали.

anonymous
()
Ответ на: комментарий от anonymous

Лучше ты ответь, анон, кто им пользуется то?

anonymous
()
Ответ на: комментарий от user_id_68054

а вот так можно ли (?) --

mv node_modules ../shared_node_modules_for_my_chat_apps

Как мы выяснили выше, venv - это такая хрупкая абстракция, которая не выдерживает перемещений по ФС и уж тем более на другую машину. При развертывании где-то еще, надо заново создавать окружение.

Вопрос, а нахрен тебе такие сложности с общей venv для разных проектов учитывая что venv столь скоротечнен и эфемерен (уже не говоря о том, что разым проектам могут понадобиться разные версии одного из сторонних модулей)? Или это абстрактный пример в духе «а еще можно вот так»?

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 2)
Ответ на: комментарий от makoven

Вопрос, а нахрен тебе такие сложности с общей venv для разных проектов учитывая что venv столь скоротечнен и эфемерен (уже не говоря о том, что разым проектам могут понадобиться разные версии одного из сторонних модулей)? Или это абстрактный пример в духе «а еще можно вот так»?

не переносится — да. есть такой недостаток. (компенсируется простотой накатки занова)

в остальном — я не понимаю зачем скачивать занова окружение для группы похожых проектов, если проще дополнить существующее их общее окружение..

(программ-то ведь в каталоге может быть не 3 , а скажем например 20 :-) .. верно? почему нет, это же нормальный случай в рабочей ситуации)

разные версии библиотек могут понадобится? ну теоретически могут. на практике врядли это увидишь когда-нибудь..

страшилки про python-несовместимости обычно любят рассказывать на примере 2.X => 3.X , и на этом фантазия расказчика обычно исчерпывается :-) .. хотя конечно это заеженная страшилкаа, так 2.X много лет как устарел и ни кто в здравом уме не вспоминает про него (ну пару необновляемых программ у тебя будут на компьютере — из исходников уж врядли тебе понадобиться этот старый хлам собирать)

user_id_68054 ★★★★★
()
Ответ на: комментарий от makoven

которая не выдерживает перемещений по ФС и уж тем более на другую машину.

а зачем кстати на другую машину перемешать?

две обычные команды запустить на другой машине:

python -m venv venv
. venv/bin/activate
pip install -r my_project/reqs.txt

..это прям какой-то труд или/и сокравенные знания? :-)

типа ты решил перенести окружение на другой комп друга, избавив этого пользователя другого компа от необходимости набирать эти команды? лол?! потомучто у него лапки и он не способн открыть терминал и это набрать?

ну тогда если так — и действительно если ты решил сделать портируемое решение — то тогда тебе и правда не venv нужно, а что-то типа cx_freeze..

тут ты можешь сказать — "ну вот, я же говорил! а для nodejs всё сразу из коробки и ни какие cx_freeze не нужны! сразу работает стандартный манагер в универсальной манере относительно и работы и портируемости!!"

ну работает, да.. только огромный оверхед непонятно ради чего!

сколько проектов тебе нужно просто запустить и сколько из них тебе надо перенести на другой компьютер (и вот именно перенести без пересборки! чтобы прям мышкой скопировать на USB-флешку и там мышком запустить!?)

ради какого-то мифического юзеркейса (который не нужен ни кому ни когда) — пользователю нужно мириться с этим node_modules ?

(платят все, а получает приемущества мало кто.. но платят все!)

ну тоже вариант, почему нет.. в nodejs решили что будет вот так, значит так

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

так 2.X много лет как устарел и ни кто в здравом уме не вспоминает про него

Твои бы слова да ansible и половине убунты в уши)

а зачем кстати на другую машину перемешать?

Ну вот такой я (наверное) извращенец, раз хочу rsync-ом переместить текущий каталог на VDS-ку и бустренько протестировать. Можно конечно каждый раз устраивать тотальный деплой - но займет это раз в 5 больше времени

makoven ★★★★★
() автор топика
Ответ на: комментарий от user_id_68054

сколько проектов тебе нужно просто запустить и сколько из них тебе надо перенести на другой компьютер (и вот именно перенести без пересборки!

Хех, и правда, зачем мне это?) Неудивительно что на веб хостингах нет питона. По фтп особо не подеплоишь. А просто залить питоновый проект на сервер, как оказывается, не вариант

В результате имеем, что PHPшный composer 2011 года выпуска уделывает современные pip и pipenv

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 4)
Ответ на: комментарий от makoven

Хех, и правда, зачем мне это?) Неудивительно что на веб хостингах нет питона. По фтп особо не подеплоишь. А просто залить питоновый проект на сервер, как оказывается, не вариант

Да ладно! Ну хорош уже п-ь!

Сделать git pull, обновить venv(если нужно), ГОТОВО!Если ленивый, можешь это все в скрипт закатать и все.

Как деплоить я тебе дал 2 ссылки. И там вопрос есть который ты отлично проигнорировал

ggrn ★★★★★
()
Ответ на: комментарий от ggrn

Не проигнорировал, а не нашел там ничего нового. Везде предлагается разворачивать новый virtualenv на сервере и инсталлить туда зависимости

makoven ★★★★★
() автор топика
Ответ на: комментарий от ggrn

Ну то есть нельзя просто по фтп залить проект на говнохостинг. Сразу отпало 90% потенциальных пользователей)

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven
 Сразу отпало 90% потенциальных пользоватей

Вижу как домохозяйка сайты делает в перерывах между плитой и утюгом

ggrn ★★★★★
()
Ответ на: комментарий от makoven

Анонимус неодобряет

Ну вот такой я (наверное) извращенец, раз хочу rsync-ом переместить текущий каталог на VDS-ку и бустренько протестировать. Можно конечно каждый раз устраивать тотальный деплой - но займет это раз в 5 больше времени

Забодал. Инструкция по деплою питонопроектов специально для извращенцев-долбаёбов не слушающих добрых советов:

  • Копируешь готовый venv rsync-ом на vds-ку.
  • Если ещё этого не сделал, прописываешь в конфиги apache/uwsgi/systemd или что там у тебя запускает твоё поделие PYTHONPATH до скопированого venv. Это делается один раз.
  • ???
  • ПРОФИТ

Деплой апдейтов:

  • Копируешь готовый venv rsync-ом на vds-ку.
  • Перезапускаешь, чего тебе там надо перезапустить.
  • ???
  • ПРОФИТ

Всё.

anonymous
()
Ответ на: комментарий от makoven

По фтп особо не подеплоишь.

Особенно пламенный привет засранцам, деплоящим по нешифрованому фтп.

anonymous
()
Ответ на: комментарий от makoven

Зачем мне вдска за 100$ если на впс есть все что мне нужно. Хотя я редко с таким сталкиваюсь.

ggrn ★★★★★
()
Ответ на: комментарий от anonymous

Эллиот спрятал rpi со сниффером в туалете твоей фирмы чтобы украсть твои питон-скрипты?

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Неудивительно что на веб хостингах нет питона. По фтп особо не подеплоишь.

Эллиот спрятал rpi со сниффером в туалете твоей фирмы чтобы украсть твои питон-скрипты?

Ты четыре страницы шлангуешь и виляешь жопой. Прекрати.

anonymous
()
Ответ на: комментарий от makoven

Неудивительно что на веб хостингах нет питона

на большенстве хостингов — активирован модуль mod_fcgid ..

это значит python-овские сайты запускаются с половины пинка, просто через прописывание строчки внутри файла ".htaccess":

AddHandler fcgid-script .fcgi
Options +ExecCGI

а на стороне пайсона подключаешь WSGI к нулевому файловуму дескриптору — через модуль flipflop

https://pypi.python.org/pypi/flipflop

окружение PYTHON_PATH прописывается в .fcgi-файле

делаешь это хоть по FTP, хоть как..

работает это щитай на любом PHP-хостинге (кроме тех хостингов которые PHP подключают по mod_php.. но через mod_php уже почти не подключают, так как это не позволяет event-режиму заработать)

админских прав для настройки не требуется (нужно лишь .htaccess и FTP )

user_id_68054 ★★★★★
()

Requirements files are used to force pip to properly resolve dependencies. As it is now, pip doesn't have true dependency resolution, but instead simply uses the first specification it finds for a project (https://pip.readthedocs.io/en/latest/user_guide/#requirements-files)

Оо. Какая прелесть. Каждый requirements.txt - логическая задачка на внимательность и разрешение зависимостей

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от makoven

Вот скажи честно сколько ты проектов на рутнопе задеплоил что поимел столько НЕПРЕОДОЛИМЫХ сложностей?

inb4 ты просто пердишь в лужи, неосилил почитать про инструменты языка и уже на п-л в 3 короба на лоре

ggrn ★★★★★
()
Ответ на: комментарий от ggrn

Я только начал читать документацию, и у меня уже стресс

makoven ★★★★★
() автор топика
Ответ на: комментарий от demrnd

даладна...

https://github.com/nodeca/embedza - там демка на хероке после каждого коммита обновляется. Делается в пару движений мышки.

А если надо на ходу прозрачно кластер проапгрейдить, ты и на питоне будешь огребать, если софт не точил под подобное специально. «Простые деплои» обычно в лучшем случае осиливают перекидывание симлинков между версиями.

Vit ★★★★★
()
Ответ на: комментарий от user_id_68054

По-моему данный вид свободы лежит где-то в теоретической плоскости.

На практике пользовался только перелинковкой репов, когда надо было параллельно в пакеты изменения вносить и тестировать.

Vit ★★★★★
()
Ответ на: комментарий от makoven

Просто вижу в питоновом подходе к сторонним либам (ИМХО) архитектурный косяк (по сравнению с нодой)

Программист nodejs, где в половине проектов npm топ-100 пароли типа querty рассуждает об архитектурных косяках.

crutch_master ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.