Есть ли способ собрать файлы Python, похожие на JAR в Java? Мне нужен способ упаковки набора классов и функций Python, но, в отличие от стандартного модуля, я хотел бы, чтобы он был в одном файле.Объединение файлов модулей в Python
ответ
Посмотрите на Python Яйца: http://peak.telecommunity.com/DevCenter/PythonEggs
Или, вы можете использовать обычные застежки-молнии: http://docs.python.org/library/zipimport.html
Самый простой подход заключается в использовании только 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 является решением для вы должны сделать
Вы можете создавать zip-файлы, содержащие код Python и импортировать из zip-файлов, используя zipimport. Система, такая как PyInstaller (кросс-платформенная) или py2exe (Windows), сделает все это за вас.
Прочитать PEP для получения информации.
Также Import modules from Zip.
После ищет решения той же проблемы, я закончил писать простой инструмент, который сочетает в себе несколько .py файлов в один: PyBreeder
Он будет работать только с модулями чисто Python и может потребовать Триал и-error, чтобы получить порядок модулей правильно, но это очень удобно, когда вы хотите развернуть скрипт с некоторыми зависимостями как один .py. Комментарии/патчи/критика очень приветствуются!
Спасибо! Я видел термин «яйцо», но я понятия не имел, что это такое. – c4757p