Форум сайта python.su
Случилось так, что мне необходимо написать небольшой проект на python.
Сам я в основном пишу на java. Естественно ищу схожие инструменты. Так мне понадобились аналоги maven и jar в python.
Чаще всего (как я понял) люди используют pip и zip для этого.
Т.к. pip ставит все глобально и в нем все плохо с одновременной установкой, есть еще virtualenv, и всякие там conda, anaconda, у которых тоже полно недостатков.
Есть ряд постов где pip называют уг даже заядлые python-программисты
Например, вот Почему я ненавижу virtualenv и pip
Ближе к вопросу:
Как собрать весь проект в один zip и запустить его в виде python myscritp.zip я разобрался.
Однако зависимости в нем все еще установлены через pip глобально.
Если еще в дополнение использовать virtualenv, то не понятно следующее. Как активировать virtualenv перед запуском скрипта, если зависимости будут упакованы в zip? В крайнем случае (если это задача в python не решена), откажусь от упаковки в один zip.
Также было замечено, что при использовании virtualenv под window в папки виртуального окружения все окружении (папа scripts) генерируется только под винду. Поэтому этот проект под linux не заведется (без дополнительных телодвижений и установки зависимостей) . А как же python многоплатформенность?
Есть конечно радикальный вариант - ставить каждый python проект в докер. Но неужели нельзя как-то нормально упаковывать и распространять готовые приложения. Задача-то типовая.
Мастера, помогите советом. Кто и как работает?
Еще попутный вопрос. Везде говорят что python “клей” со всеми языками хорошо связывается.
Но jpython работает только для python 2. А как же поддержка третьей версии? Десять лет уже почти прошло с момента выхода python 3.
Офлайн
> Т.к. pip ставит все глобально
С чего ты это взял? У него есть опция -t которая позволяет установить модуль куда нужно.
> Если еще в дополнение использовать virtualenv
Забудь про это УГ.
Офлайн
Спасибо за ответ.
Сделал папку lib в корне проекта. Установил зависимости в эту папку.
Что сделать в самом проекте, чтобы он дергал зависимости из этой папки?
Офлайн
import sys sys.path.insert(0, "lib")
Офлайн
gНе думаю что люди морочатся с упаковкой в zip. Классический способ распространения для небольших проектов - создание whl файла и установка при помощи pip. Для маленького проекта необходимости класть зависимости в отдельную папку тоже нет. На то они и пакеты зависимостей чтобы быть стабильными и глобальными для данного пользователя.
Но неужели нельзя как-то нормально упаковывать и распространять готовые приложения
Отредактировано doza_and (Дек. 29, 2017 20:27:41)
Офлайн
Не думаю что люди морочатся с упаковкой в zip. Классический способ распространения для небольших проектов - создание whl файла и установка при помощи pipЗагуглил “whl python”, вторая же ссылка
По поводу клея вопрос интересный. Если смотреть Дзен то задачи быть клеем не ставится.В дзене много чего нет. Например, ничего нет про многоплатформенность. Что теперь забыть про нее? Питон не многоплатформенный?
Связывать части java приложения на питоне довольно странная идея. Может для этого java лучше подходит?Для большинства задач java нам больше подходит, поэтому 99,9% проекта на ней. python используется как рисовалка - matplotlib, т.к нужен один хитрый график в полярной системе координат. В matplotlib этот график худо-бедно заработал только в 2017. Хотя багов в еще много и висят они по несколько лет …
Офлайн
Вы не пытались написать java код для управления классами из C#?Не пробовал, не было пока необходимости. Если будет - буду гуглить. Или хардкор: socket, БД, memcached, rabbitMQ, REST и т.п.
Офлайн
Собственно похоже у вас 2 вопроса.
Идеология и мир питона довольно сильно отличается от java наверное поэтому возникают вопросы.
1 Как сделать установку.
2 Как организовать вызовы питона из java.
По 1 я бы рекомендовал средствами ОС установить/обновить питон. Дальше 2 варианта. Если код у вас бесполезный (те нужен только в вашем проекте) то просто запустите средствами os pip -r req.txt файл где указаны требования к питону. А свои файлы или zip кладите куда хотите. Второй вариант - сделать свой пакет https://packaging.python.org/tutorials/distributing-packages/ и дальше только его и ставите, зависимости будут перечислены внутри. По поводу установки зависимостей “под себя” не беспокойтесь. В мире питона если вы поломали чужую программу обновлением пакетов означает что программа не выдержала естественного отбора. К вашему поделию кстати будут также относиться. На практике несмотря на отсутствие стандартов, полный хаос в разработке и огромное количество пакетов конфликты версий пакетов встречаются крайне редко. У нас в конторе за 5 лет разработки с интенсивным использованием чужих пакетов таких случаев не было.
По пункту 2. В вашей постановке это не python используется как клей а java как клей для питона. Я не особый специалист в java, больше приходилось переписывать код с java на python или c++. Да и питон у меня не основной язык. Если нужна производительность то boost python или cython в помощь для эмбеддинга питона в с. Получите высокую скорость и замечательную цепочку java->JNI->C->python->C. В комплекте второй сборщик мусора и проблемы при распространении поскольку это компилируемый код. Второй вариант октрыть сокет и швырять туда сюда например messagepack по самописному протоколу. БД я не рассматриваю поскольку они жутко тормозят, транзацкции и персистентность однако. А из очередей наверное Zmq а не кролик. Она пошустрее и попроще.
Средний вариант shared memory. По сети не сможете работать, с синхронизацией посложнее, но данные быстрее передаются да и натянуть питоновскую личину на заданные области памяти несложно.
Вы тут кстати сетуете по поводу некоторых особенностей питона и ссылаетесь на статьи 13/14 года. В мире питона это безнадежно устаревшие публикации. Я ставлю фильтр на 1 год и не уверен что данные все еще актуальны. Вы жалуетесь что автокомплит не работает. Он отлично работает, просто надо чтобы программа уже в памяти была а не лежала мертвым грузом на диске. Кто вам мешает одновременно выполнять программу и писать? Про рефакторинг не понял. Вроде как тоже все работает. jetbrais похоже сделала интерфейс для java и для python, другое дело что половину полей класса я получаю с удаленного компьютера через сутки после начала работы программы. Что бы вы тут рефакторингом назвали?
Языки очень разные. В проекте из 100 мегабайт исходного кода на java я бы трижды подумал вставлять ли 2000 строк кода на питоне.
Отредактировано doza_and (Дек. 30, 2017 10:54:20)
Офлайн
В мире питона если вы поломали чужую программу обновлением пакетов означает что программа не выдержала естественного отбора.Хороший подход, но не могу с вами согласиться. Главный принцип всегда: “Не навреди тому, что уже работает”.
На практике несмотря на отсутствие стандартов, полный хаос в разработкеИнтересно получается …
В вашей постановке это не python используется как клей а java как клей для питона.
Вы тут кстати сетуете по поводу некоторых особенностей питона и ссылаетесь на статьи 13/14 года. В мире питона это безнадежно устаревшие публикации.Прошло 10 лет с выхода python 3, до сих пор не все могут перебраться на него.
Вы жалуетесь что автокомплит не работает. Он отлично работает
#x - экземпляр другого класса (не тот же что и self), MyObject2 class MyObject: def method(self, x): x.#как получить автокомплитом методы для объекта класс которого мы не знаем? Тип может быть любой, и он определяется в рантайме.
//На java
class MyObject {
void method(MyObject2 x){
x.method2(); //Автокомплит прекрасно работает, т.к. на этапе компиляции известен тип MyObject2
//Про рефакторинг: прямо здесь можно переименовать метод - метод автоматически переименуется в классе MyObject2, и во всех других где он используется.
Отредактировано g (Дек. 30, 2017 15:52:35)
Офлайн
Офлайн