2009-07-09 3 views
6

Есть ли способ собрать файлы Python, похожие на JAR в Java? Мне нужен способ упаковки набора классов и функций Python, но, в отличие от стандартного модуля, я хотел бы, чтобы он был в одном файле.Объединение файлов модулей в Python

ответ

3

Самый простой подход заключается в использовании только zip. Файл jar в Java - это zipfile, содержащий некоторые метаданные, такие как манифест; но вам не обязательно нужна метатада - Python может импортировать изнутри zipfile, пока вы размещаете этот zipfile на sys.path, как и для любого каталога. В zip-файле у вас могут быть источники (.py-файлы), но тогда Python должен будет скомпилировать их «на лету» каждый раз, когда процесс сначала импортирует их; или вы можете иметь файлы байт-кода (.pyc или .pyo), но тогда вы ограничены конкретным выпуском Python и либо отсутствием (для .pyc), либо наличием (для .pyo) флага -O (или -OO).

Как указано другие ответы, существуют форматы, такие как .egg, которые обогащают ZipFile с metatada в Python, а также, как Java .jar, но будет ли в конкретном случае использования, что дает вам дополнительное WRT значение простой ZipFile является решением для вы должны сделать

2

Вы можете создавать zip-файлы, содержащие код Python и импортировать из zip-файлов, используя zipimport. Система, такая как PyInstaller (кросс-платформенная) или py2exe (Windows), сделает все это за вас.

9

После ищет решения той же проблемы, я закончил писать простой инструмент, который сочетает в себе несколько .py файлов в один: PyBreeder

Он будет работать только с модулями чисто Python и может потребовать Триал и-error, чтобы получить порядок модулей правильно, но это очень удобно, когда вы хотите развернуть скрипт с некоторыми зависимостями как один .py. Комментарии/патчи/критика очень приветствуются!

+0

Отличный сценарий, спасибо за это! – TechZilla

+0

Я сделал [нечто подобное] (https://github.com/thomasballinger/pyconcat), потому что это казалось крутым, но PyBreeder выглядит менее смешно и взломанно. – Thomas