Как включить шаблон 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.