簡體   English   中英

如何在bdist / conda包中包含cookiecutter模板?

[英]How to include a cookiecutter template with a bdist/conda package?

我正在維護帶有許多實用程序功能的內部python軟件包。 作為該軟件包的一部分,我包括了一個項目生成器console_script ,它使用該軟件包附帶的自定義模板調用cookiecutter。 當使用pip安裝軟件包時(通常是sdist),這可以很好地工作。

我試圖讓人們盡可能多地使用conda ,所以這很不方便,因為依賴項是通過pip而不是conda來解決/安裝的。 因此,我正在使用Anaconda安裝隨附的python setup.py bdist_conda方法創建一個conda軟件包。 當然,這對於另一個內部軟件包也很好。

但是,當我嘗試創建當前包時, bdist_conda創建字節編譯包中的所有python文件,因此模板文件當然也是(但不bdist_conda如此)。 在運行python setup.py bdist_conda時,由於jinja字符串,這會導致語法錯誤:

  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進行復制,因此可以將conda排除在這里。 我在帶有MANIFEST.in的模板文件中添加了該文件,其中包含recursive-include mypkg/project_template * ,在基於setuptools的setup.py include_package_data = True

有沒有一種(更好的)方式來發送帶有某些軟件包的cookiecutter模板? 就像我說的那樣,當與pip / sdist一起使用時,這很好用,但與bdist一起使用時卻失敗了。 另外,有沒有辦法抑制bdist字節編譯給定的文件集?

該模板不能在線放置,這就是為什么我想將其包括在包裝中。 我還考慮過將模板分別放置在其他位置,但是當用戶使用項目生成器時,用戶取決於該位置(例如網絡驅動器)是否可用。 我曾考慮將其添加為zip文件,但是從版本控制的角度來看,這樣做非常不便, 顯然 ,還會提示用戶在下次運行時刪除現有的模板(我想解壓縮到某些用戶位置),所以我寧願避免這種情況。

  • Cookiecutter版本:1.6.0
  • Python版本:3.5
  • 設置工具38.5.1
  • 作業系統:Linux

編輯:我也將其發布在cookiecutter問題跟蹤器中 ,但是到目前為止沒有得到任何反饋。

因此,經過毫無結果的搜索后,我通過將所有.py模板文件更改為.pytemplate.pytemplate此問題。 這樣可以避免bdist / bdist_conda發現它們。 從模板創建項目之后,我添加了一個post_gen腳本,該腳本將所有文件重命名為.py 愚蠢的解決方法,但它可以工作。 :嘆:

我知道至少對於bdist,可以通過設置sys.dont_write_bytecode來避免編譯,但是此變通辦法不適用於bdist_conda ,請參見https://github.com/conda/conda-build/issues/686

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM