Python: Почему некоторые пакеты устанавливаются как яйца, а некоторые - как папки с яйцами?
Я поддерживаю несколько пакетов Python. У меня есть очень похожий файл setup.py
для каждого из них. Однако при выполнении setup.py install
один из моих пакетов устанавливается как яйцо, а остальные устанавливаются как "папки с яйцами", то есть папки с расширением "яйцо".
В чем разница между ними, которая вызывает это различное поведение?
Ответы
Ответ 1
Внутренняя структура яблок Python, метаданные поддержки ZIP:
Если zip-safe
существует, это означает, что проект будет работать правильно при установке в качестве zip файла .egg
, и, наоборот, существование not-zip-safe
означает, что проект не должен быть установлен как файл .egg
[т.е. как каталог .egg
]. Параметр zip_safe
для setuptools 'setup()
определяет, какой файл будет записан. Если опция не указана, setuptools пытается самостоятельно оценить, может ли пакет работать, на основе анализа кода и контента.
Ответ 2
Один файл яйца на самом деле представляет собой zip-архив с определенной структурой каталогов внутри. В документации zipimport файлы .py
, .pyc
и .pyo
можно импортировать из zip файлов. Итак, если пакет должен импортировать другие типы ресурсов модуля (например, скомпилированный код c, .so
файлы, файлы .pyd
), он не будет работать как zip файл.
Я не знаю, является ли это единственной причиной того, что некоторые яйца не будут работать как архивы zip, но я думаю, что это основная причина.