2013-01-27 34 views
6

Đối tượng là tự mô tả: Tôi cần phải phân lớp lệnh setup.py build để thực hiện các bước xây dựng bổ sung. Tuy nhiên tôi đã không tìm thấy bất kỳ lớp lệnh build nào để kế thừa từ đó. Tôi đã cố gắng:Làm cách nào để phân lớp lệnh xây dựng?

class BuildCommandProxy(setuptools.command.build): 
    pass 

class BuildCommandProxy(distutils.command.build): 
    pass 

và thậm chí:

class BuildCommandProxy(setuptools.distutils.command.build): 
    pass 

mà không cần bất kỳ sự thành công.

CẬP NHẬT: tìm cách triển khai một cái gì đó như this với setuptools.

UPDATE2: Tôi có một số thực hiện lệnh tùy chỉnh:

class CustomCommand(setuptools.Command): 
    # ... 

Những gì tôi muốn thực hiện là để vượt qua lệnh này để cmdclass như thế này:

cmdclass={ 
    "build": CustomCommand, 
} 

và sau đó gọi ban đầu build trong CustomCommand.run sau khi thực hiện một số bước tùy chỉnh.

+0

Bạn có chuyển cụm từ 'cmdclass' sang' setup() 'không? Vui lòng đăng các phần có liên quan của 'setup.py'. – ecatmur

Trả lời

8

Công cụ thiết lập không ghi đè lên số distutilsbuild; chỉ các tiểu ban build_pybuild_ext.

Vì vậy, để tạo ra lớp con riêng của bạn, bạn cần phải nhập khẩu từ distutils.command.buildmô-đun, trong đó có một build lớp (lớp con của Command):

import distutils.command.build 

class BuildCommandProxy(distutils.command.build.build): 
    pass 
1

Để hoàn chỉnh, đây là một ví dụ đầy đủ về cách để thêm hoạt động xây dựng tùy chỉnh:

import distutils.command.build 

# Override build command 
class BuildCommand(distutils.command.build.build): 

    def run(self): 
     # Run the original build command 
     distutils.command.build.build.run(self) 
     # Custom build stuff goes here 

# Replace the build command with ours 
setup(..., 
     cmdclass={"build": BuildCommand}) 
Các vấn đề liên quan