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