Как включить шаблон cookiecutter в пакет bdist/conda?

Я поддерживаю внутренний пакет Python с рядом служебных функций. В состав этого пакета я включил генератор проектов console_script который вызывает cookiecutter, используя пользовательский шаблон, который поставляется вместе с пакетом. Это прекрасно работает при установке пакета с помощью pip (в основном, как sdist).

Я пытаюсь заставить людей использовать conda насколько это возможно, поэтому это неудобно, поскольку зависимости разрешаются / устанавливаются с использованием pip не conda, Поэтому я создаю пакет conda, используя python setup.py bdist_conda способ, который включен в установку Anaconda. Это работает хорошо, на самом деле, для другого внутреннего пакета.

Однако когда я пытаюсь создать настоящий пакет, bdist_conda creation byte-компилирует все файлы python в пакете, поэтому, конечно (но не по назначению) также файлы шаблонов. Это приводит к синтаксической ошибке из-за строк дзиндзя при запуске python setup.py bdist_conda:

  byte-compiling build/bdist.linux-x86_64/dumb/home/bilderbuchi/anaconda3/lib/python3.5/site-packages/mypkg/project_template/{{cookiecutter.project_name_simplified}}/{{cookiecutter.project_name_simplified}}.py to {{cookiecutter.project_name_simplified}}.cpython-35.pyc
  File "/path/to/mypkg/project_template/{{cookiecutter.project_name_simplified}}/{{cookiecutter.project_name_simplified}}.py", line 4
    {%- if cookiecutter.command_line_interface == 'argparse' %}
     ^
SyntaxError: invalid syntax

Я также могу воспроизвести с равниной python setup.py bdist так что я могу исключить Конду быть виновником здесь. Я добавляю файлы шаблона с MANIFEST.in содержащий recursive-include mypkg/project_template *, а также include_package_data = True в основанном на setuptools setup.py,

Есть ли (лучший) способ отправить шаблон cookiecutter с некоторым пакетом? Как я уже сказал, это хорошо работает при использовании с pip /sdist, но не работает с bdist , В качестве альтернативы, есть ли способ подавить байтовую компиляцию bdist для данного набора файлов?

Шаблон не может быть размещен онлайн, поэтому я хочу включить его в пакет. Я также подумал о том, чтобы разместить шаблон отдельно, в другом месте, но тогда пользователи будут зависеть от того, какое расположение (например, сетевой диск) будет доступно, когда они используют генератор проектов. Я смотрел на добавление его в виде zip-файла, но кроме того, что это было очень неудобно с точки зрения контроля версий, очевидно, пользователям будет предложено удалить существующий (я думаю, распакованный в какое-то место пользователя) шаблон при следующем запуске, так что я бы предпочел этого избежать.

  • Версия Cookiecutter: 1.6.0
  • Версия Python: 3.5
  • setuptools 38.5.1
  • Операционная система: Linux

Изменить: я также опубликовал это в трекере проблем с cookiecutter, но пока не получил никаких отзывов.

1 ответ

Итак, после бесплодных поисков, я обхожу эту проблему, меняя все свои .py файлы шаблонов для .pytemplate, Это позволяет избежать их обнаружения bdist/bdist_conda. Я добавил скрипт post_gen, который переименовывает все файлы обратно в .py после того, как проект был создан из шаблона. Тупой обходной путь, но это работает.:вздох:

Я знаю, что для bdist, по крайней мере, компиляции можно избежать, установив sys.dont_write_bytecode, но этот обходной путь недоступен для bdist_condaсм. https://github.com/conda/conda-build/issues/686.

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