sdist/bdist_wheel не включает pyc в Linux, но включен в Windows

Я пытаюсь создать дистрибутив Python, в который я должен включить как исходный код, так и скомпилированный двоичный файл. (Да, я читаю аргументы против / для добавления .pyc, но мой вариант использования требует .pyc быть добавленным). При выполнении моих шагов в Windows, исходный и скомпилированный двоичные файлы добавляются в выходной файл (я использовал оба sdist а также bdist_wheel).

Скажем, у меня есть следующая структура:

root
+--folderA
   +--alpha
   +--beta
   +--__init__.py
+--folderB

folderA содержит исходные коды, в то время как folderB содержит другие файлы в своих подкаталогах.

Шаги сделаны:

  1. Модули компилируются с использованием compileall
  2. Источники в alpha удалены. Источники в beta хранятся.
  3. Бежать python setup.py sdist|bdist_wheel

я использовал find_packages() в setup.py, чтобы обнаружить модули. Модули в alpha не обнаружены в то время как те, в beta найдены.

В результатах .tgz а также .whl файлы в винде, все необходимые файлы есть. Все хорошо.

Однако, когда та же самая процедура выполняется в Linux (Ubuntu, чтобы быть конкретным), только модули в beta добавлены и некоторые модули в folderB но не другие файлы другого типа и модуляalpha, sdist покажет только источник пока bdist а также bdist_wheel даст .pycтолько с Я это понимаю sdist для распространения исходных файлов в то время как bdist для бинарных файлов.

У меня вопрос, почему поведение в Windows отличается, и возможно ли получить такой же вывод в Linux (.pyc вместе с другими файлами)?

Я использую Python 2.7.

1 ответ

Решение

Чтобы включить файлы в sdist, добавьте их в MANIFEST.in:

global-include *.py *.pyc

В том числе *.pyc у меня в колёсах работает на линуксе без какой-либо специальной настройки, просто

python setup.py build
python -m compileall build
python setup.py sdist
python setup.py bdist_wheel

PS. Если вы пытаетесь скрыть источники от людей - вы на неправильном пути. *.pyc файлы могут быть декомпилированы. В стандартной библиотеке есть дизассемблер, и есть много декомпиляторов и декомпиляторов.

Другие вопросы по тегам