Tôi đã thực hiện một cái gì đó như thế này trước đây ... lệnh sdist
có thể được mở rộng để xử lý các đối số dòng lệnh bổ sung và để thao tác các tệp dữ liệu dựa trên các đối số này. Nếu bạn chạy python setup.py sdist --help
, nó sẽ bao gồm các đối số dòng lệnh tùy chỉnh của bạn trong trợ giúp, điều này rất hay. Sử dụng công thức sau:
from distutils import log
from distutils.core import setup
from distutils.command.sdist import sdist
class CustomSdist(sdist):
user_options = [
('packaging=', None, "Some option to indicate what should be packaged")
] + sdist.user_options
def __init__(self, *args, **kwargs):
sdist.__init__(self, *args, **kwargs)
self.packaging = "default value for this option"
def get_file_list(self):
log.info("Chosen packaging option: {self.packaging}".format(self=self))
# Change the data_files list here based on the packaging option
self.distribution.data_files = list(
('folder', ['file1', 'file2'])
)
sdist.get_file_list(self)
if __name__ == "__main__":
setup(
name = "name",
version = "version",
author = "author",
author_email = "author_email",
url = "url",
py_modules = [
# ...
],
packages = [
# ...
],
# data_files = default data files for commands other than sdist if you wish
cmdclass={
'sdist': CustomSdist
}
)
Tại sao không tạo các tệp 'setup.py' khác? Phân phối nguồn có sẵn dưới dạng 'sdist'. –
@Brian: Tôi biết về 'sdist', cảm ơn. Tôi là người duy trì dự án nguồn mở ở quy mô trung bình và tôi muốn tuân thủ các quy ước chung (như có một 'setup.py' quản lý việc đóng gói/cài đặt). Tôi thực sự muốn xem giải pháp chỉ sử dụng một tập lệnh thiết lập. – Constantinius
Tôi không thể cung cấp chi tiết vì trước đây tôi chưa từng có vấn đề như vậy. Một cách tiếp cận có thể cung cấp lệnh 'sdist' của riêng bạn mà chỉ cần gọi' sdist' cũ với siêu dữ liệu khác nhau phụ thuộc vào phân phối đích. Bản phân phối có thể được cung cấp như một tùy chọn từ dòng lệnh hoặc sử dụng 'platform.linux_distribution' để có được cùng một phân phối mục tiêu như phân phối trong máy gọi là 'setup.py' theo mặc định. – jcollado