[英]How to include pip-only package when building conda package by using conda-build?
[英]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問題跟蹤器中 ,但是到目前為止沒有得到任何反饋。
因此,經過毫無結果的搜索后,我通過將所有.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.