【发布时间】:2013-12-10 06:24:49
【问题描述】:
我尝试在 setuptools 的 build 期间实现 Compass 编译,但以下代码在显式 build 命令期间运行编译,而在 install 期间不运行。
#!/usr/bin/env python
import os
import setuptools
from distutils.command.build import build
SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
class BuildCSS(setuptools.Command):
description = 'build CSS from SCSS'
user_options = []
def initialize_options(self):
pass
def run(self):
os.chdir(os.path.join(SETUP_DIR, 'django_project_dir', 'compass_project_dir'))
import platform
if 'Windows' == platform.system():
command = 'compass.bat compile'
else:
command = 'compass compile'
import subprocess
try:
subprocess.check_call(command.split())
except (subprocess.CalledProcessError, OSError):
print 'ERROR: problems with compiling Sass. Is Compass installed?'
raise SystemExit
os.chdir(SETUP_DIR)
def finalize_options(self):
pass
class Build(build):
sub_commands = build.sub_commands + [('build_css', None)]
setuptools.setup(
# Custom attrs here.
cmdclass={
'build': Build,
'build_css': BuildCSS,
},
)
Build.run 的任何自定义指令(例如一些打印)也不适用于install,但dist 实例在commands 属性中仅包含我的build 命令实现实例。极好的!但我认为问题在于setuptools 和distutils 之间的复杂关系。有人知道如何在 Python 2.7 上的 install 期间运行自定义构建吗?
更新:发现install肯定不会调用build命令,而是调用bdist_egg运行build_ext。似乎我应该实现“指南针”构建扩展。
【问题讨论】:
标签: python setuptools distutils