Python 2.6 и более поздние версии имеют возможность напрямую выполнять ZIP-файл, если ZIP-файл содержит файл __main__.py
в начале ZIP-архива. Я хочу использовать эту функцию, чтобы предоставлять предварительные версии инструмента, который я разрабатываю, который не потребует от пользователей установки чего-либо, кроме копирования ZIP-файла на свой диск. Есть ли стандартный способ создать такой zip-файл? Я ищу решение, которое работает с python 2.6 и python 2.7.
В идеале я хотел бы использовать distutils, так как он уже работает, когда я хочу выполнить обычную установку. Есть ли канонический способ использования (или расширения) distutils для создания такого ZIP-файла?
distutils предоставляет команду sdist
, которая создает исходный дистрибутив, который почти правильный, но создает слишком глубокую структуру.
Например, мое исходное дерево выглядит так:
my_package/
- setup.py
- src/
- __main__.py
- module1/
- module2/
- module3/
Когда я делаю python setup.py sdist
, я получаю файл .zip со следующей структурой:
my_package-0.1.zip
- my_package-0.1/
- README.txt
- PKG_INFO
- src/
- __main__.py
- module1/
- module2/
- module3/
Это не исполняемый файл, потому что __main__.py
не находится в верхней части дистрибутива. По сути, я хочу, чтобы дистрибутив src не включал src
, а только файлы под src
. Это или именно то, что мне дает sdist
, но с дополнительным __main__.py
вверху архива.