Java имеет концепцию упаковки всего кода в файл, называемый Jar файлом. У Python есть эквивалентная идея? Если так, то, что это? Как я могу упаковать файлы?
Что такое эквивалент python для файла Java.jar?
Ответ 1
Python не имеет точного эквивалента файла .jar
.
Есть много различий, и, не зная точно, что вы хотите сделать, трудно объяснить, как это сделать. Но Руководство пользователя Python Packaging довольно неплохо объясняет все, что имеет значение.
Вот некоторые из основных отличий.
Файл .jar - это скомпилированный набор классов, который можно отбросить в ваше приложение или установить в любом месте вашего CLASSPATH
.
В Python:
- Модуль
.py
(или.pyc
) может быть удален в ваше приложение или установлен в любом месте вашегоsys.path
, и его можно импортировать и использовать. - Каталог, полный модулей, может обрабатываться одинаково; он становится пакетом (или, если он не содержит
__init__.py
, он объединяется с другими каталогами с одним и тем же именем в другом месте наsys.path
в один пакет). - A
.zip
архив, содержащий любое количество модулей и пакетов, может быть сохранен в любом месте, и его путь добавлен в вашsys.path
(например, во время выполнения или черезPYTHONPATH
), и все его содержимое станет импортируемым.
Чаще всего вы хотите, чтобы все было установлено в каталог системы, пользователя или virtualenv site-packages
. Рекомендуемый способ сделать это - создать дистрибутив pip
-compatible package; люди затем устанавливают его (и, возможно, автоматически загружают его из PyPI или частного репо) через pip
.
pip
делает намного больше, чем это. Он также позволяет вам управлять зависимостями между пакетами. Поэтому в идеале, вместо того, чтобы перечислять кучу предварительных требований, которые кто-то должен загружать и устанавливать вручную, вы просто делаете их зависимыми, а кто-то просто должен pip install your-library
. И он отслеживает состояние ваших пакетов сайтов, поэтому вы можете удалить или обновить пакет без необходимости отслеживать определенные файлы.
Между тем, в Java большинство файлов .jar
являются кросс-платформенными; строить один раз, работать где угодно. Несколько пакетов имеют собственный код JNI и не могут использоваться таким образом, но это не норма.
В Python во многих пакетах есть C-расширения, которые необходимо скомпилировать для каждой платформы, и даже пакеты pure-Python часто требуют некоторой настройки времени установки. Между тем, "компиляция" чистого Python не делает ничего, что не может быть сделано так же хорошо во время выполнения. Поэтому в Python вы обычно распространяете исходные пакеты, а не скомпилированные пакеты.
Однако .wheel
является бинарным форматом пакета. Вы можете pip wheel
строить бинарные пакеты для разных целей из исходного пакета; то, если кто-то попытается pip install
вашего пакета, если есть колесо для его системы, которое будет загружено и установлено.
Ответ 2
Простая установка из setup_tools
определяет формат .egg
для развертывания библиотек или приложений Python. Хотя он похож на JAR, он нигде не распространяется как универсальный, как JARs в мире Java. Многие люди просто развертывают файлы .py
.
Более новый формат, предназначенный для замены яиц, wheel.