Ok, tôi đã thực hiện việc này. Đó là một chút hacky, nhưng nó hoạt động rất tốt cho trường hợp sử dụng của tôi.
Ý chính của nó là sử dụng ModuleFinder để tìm tất cả các mô-đun đã nhập, lọc ra bất kỳ hệ thống nào, biên dịch chúng và nén chúng lên.
Đáng tiếc là mã của tôi cho điều này là rải rác với các biến chứng bổ sung mà không có bất kỳ liên quan đến câu hỏi này, vì vậy tôi không thể dán một chương trình làm việc, chỉ cần một số đoạn:
zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED)
sys.path.insert(0, '.')
finder = ModuleFinder()
finder.run_script(source_name)
for name, mod in finder.modules.iteritems():
filename = mod.__file__
if filename is None:
continue
if "python" in filename.lower():
continue
subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename))
zipfile.write(filename, dest_path)
Bạn có thể giả định rằng python đã được cài đặt trên hầu hết các hệ thống Linux. – ThiefMaster
Có, nhưng tôi vẫn muốn dễ dàng đóng gói tất cả các tệp nguồn có liên quan bao gồm mọi mô-đun đã nhập, mà không cần cài đặt nội dung trên hệ thống Linux mục tiêu. – xorsyst