2015-01-14 5 views
1

저는 파이썬 프로젝트에서 프론트 엔드를 템플릿 화하기 위해 nunjucks를 사용합니다. Nunjucks 템플릿 을 프로덕션 환경에서 사전 컴파일해야합니다. nunjucks 템플릿에서 확장 또는 비동기 필터를 사용하지 않습니다. grunt-task를 사용하여 템플릿 변경 사항을 수신하는 대신 nunjucks-precompile 명령 (npm을 통해 제공됨)을 사용하여 전체 템플릿 디렉토리를 templates.js로 스윕하는 방법을 선호합니다.setup.py에서 (안전한) bash 쉘 명령을 실행하는 방법은 무엇입니까?

아이디어는 nunjucks-precompile --include ["\\.tmpl$"] path/to/templates > templates.js 명령을 setup.py에서 실행하여 배포 스크립트의 일반 실행을 피기 백 할 수 있습니다.

나는 a setuptools overridea distutils scripts argument이 올바른 목적을 달성 할 수는 있을지 모르지만, 가장 간단한 방법 중 하나라고 확신하지는 못합니다.

또 다른 접근법은을 사용하여 setup.py에서 직접 명령을 실행하는 것입니다. 그러나 이것에 대해 (사전에 IMHO 대신)주의를 기울였습니다. 나는 왜 그렇게 깊이 이해하지 못한다.

아이디어가 있으십니까? 확인? 확인?

업데이트 (04/2015) :은 - 당신이 nunjucks-precompile 명령을 사용할 수없는 경우, 간단히과 같이 nunjucks를 설치하는 노드 패키지 관리자를 사용

$ npm install nunjucks 

답변

3

사면 빠른 자동 응답. 나는 이것이 에테르에있는 누군가를 돕기를 바랍니다. 내가 만족하는 해결책을 찾은 지금이 사실을 공유하고 싶습니다.

다음은 Peter Lamut's write-up을 기반으로 안전한 솔루션입니다. 이것은 이 아님을 유의하십시오. 서브 프로세스 호출에서 shell = True를 사용하십시오. 파이썬 배포 시스템에서 불필요한 작업 요구 사항을 우회 할 수 있으며 난독 화 및 JS 패키징 모두에 동일하게 사용합니다.

from setuptools import setup 
from setuptools.command.install import install 
import subprocess 
import os 

class CustomInstallCommand(install): 
    """Custom install setup to help run shell commands (outside shell) before installation""" 
    def run(self): 
     dir_path = os.path.dirname(os.path.realpath(__file__)) 
     template_path = os.path.join(dir_path, 'src/path/to/templates') 
     templatejs_path = os.path.join(dir_path, 'src/path/to/templates.js') 
     templatejs = subprocess.check_output([ 
      'nunjucks-precompile', 
      '--include', 
      '["\\.tmpl$"]', 
      template_path 
     ]) 
     f = open(templatejs_path, 'w') 
     f.write(templatejs) 
     f.close() 
     install.run(self) 

setup(cmdclass={'install': CustomInstallCommand}, 
     ... 
    ) 
0

나는 here 링크가 달성하려고하는 것을 캡슐화한다고 생각합니다.