Python: Почему некоторые пакеты становятся установленными как яйца и некоторые как “папки яйца”?

Я поддерживаю несколько пакетов Python. У меня есть очень похожее setup.py файл для каждого из них. Однако при выполнении setup.py install, один из моих пакетов установлен как яйцо, в то время как другие установлены как "папки яйца", т.е. папки с расширением "яйца".

Каково различие между ними, которое вызывает это другое поведение?

25
задан Chris Martin 22 March 2016 в 11:34
поделиться

2 ответа

Внутренняя структура Python Eggs, метаданные поддержки Zip :

Если существует zip-safe, это означает, что проект будет работать правильно при установке как . egg zipfile, и наоборот, существование not-zip-safe означает, что проект не должен быть установлен как .egg файл [т.е. как .egg каталог]. Опция zip_safe в setup() setuptools определяет, какой файл будет записан. Если опция не указана, setuptools пытается самостоятельно оценить, может ли пакет работать, основываясь на анализе кода и содержимого.

25
ответ дан 28 November 2019 в 21:42
поделиться

Одиночный файл egg на самом деле является zip-архивом с определенной структурой каталогов внутри. Согласно документации zipimport, только .py, .pyc и .pyo файлы могут быть импортированы из zip-файлов. Таким образом, если пакету нужно импортировать другие виды ресурсов модуля (например, скомпилированный c-код; .so файлы, .pyd файлы), он не будет работать как zip-файл.

Я не знаю, является ли это единственной причиной того, что некоторые яйца не будут работать как zip-архивы, но я думаю, что это основная причина.

4
ответ дан 28 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: