Подтвердить что ты не робот

Что такое эквивалент python для файла Java.jar?

Java имеет концепцию упаковки всего кода в файл, называемый Jar файлом. У Python есть эквивалентная идея? Если так, то, что это? Как я могу упаковать файлы?

4b9b3361

Ответ 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.