2012-02-23 40 views
7

Có thể triển khai các ứng dụng python sao cho bạn không giải phóng mã nguồn và bạn không phải chắc chắn rằng khách hàng đã cài đặt python?triển khai các ứng dụng python

Tôi nghĩ có thể có một số quy trình cài đặt có thể chạy ứng dụng python từ tệp .pyc và thư viện được chia sẻ có chứa thông dịch viên hoặc thông tin như vậy? Về cơ bản tôi muốn có được những lợi ích phát triển của một ngôn ngữ như Python - năng suất cao, vv nhưng không thể thấy được cách bạn có thể triển khai nó một cách chuyên nghiệp cho một khách hàng mà bạn không biết làm thế nào có máy được thiết lập và bạn chắc chắn không thể cung cấp nguồn.

Nhà phần mềm chuyên nghiệp phát triển trong python làm điều đó như thế nào (hoặc có thể câu trả lời là họ không làm)?

+0

PS Tôi biết về py2exe và tất cả nội dung đó nhưng có vẻ như một loại giải pháp hack, ví dụ: một chút không thích hợp để phải biên dịch trong toàn bộ thông dịch viên mỗi khi bạn viết một ứng dụng – bph

+2

Đọc câu hỏi này để lấy cảm hứng: http://stackoverflow.com/questions/2678180/how-does-dropbox-use-python-on-windows- và-os-x –

+0

có một ngôn ngữ tương tự khác có thể được biên dịch thành nhị phân gốc không? D có lẽ? Sẽ tốt khi có một ngôn ngữ với các ràng buộc với một gói GUI phổ biến như các tiện ích hoặc qt cũng như – bph

Trả lời

13
  1. Bạn bảo vệ mã nguồn của bạn một cách hợp pháp , không công nghệ. Phân phối các tập tin py thực sự không phải là một việc lớn. Các giải pháp công nghệ duy nhất ở đây là không xuất xưởng chương trình của bạn (mà thực sự trở nên phổ biến hơn những ngày này, khi phần mềm được cung cấp qua internet chứ không phải cài đặt đầy đủ tại địa phương thường xuyên hơn.)

  2. Nếu bạn không muốn người dùng phải cài đặt Python nhưng muốn chạy các chương trình Python, bạn sẽ phải gói Python. Kháng cự của bạn để làm như vậy có vẻ khá lạ với tôi. Các chương trình Java phải bó hoặc dự đoán sự hiện diện của JVM. Các chương trình C phải bó hoặc dự đoán sự hiện diện của libc (thường là sau này), v.v. Không có gì khó khăn về việc sử dụng những gì bạn cần.

  3. Gói phần mềm máy tính để bàn Python chuyên nghiệp Python, hoặc thông qua một cái gì đó như py2exe/cx_Freeze/một số điều trong nhà thực hiện điều tương tự hoặc thông qua nhúng Python (trong trường hợp này Python là thư viện chứ không phải là tệp thi hành). Cách tiếp cận trước đây thường mạnh hơn và mạnh hơn rất nhiều.

+0

không thực sự kháng - chỉ cần cố gắng suy nghĩ thông qua các tùy chọn, đặc biệt là những gì ít rắc rối nhất cho khách hàng. bằng cách đóng gói bạn có nghĩa là cung cấp cho khách hàng với một trình cài đặt python cho nền tảng của họ và nói với họ để cài đặt nó trước khi chạy mã của chúng tôi? – bph

+0

có những trường hợp bạn phải cẩn thận về bảo vệ nguồn từ quan điểm công nghệ, ví dụ: khu vực phòng thủ. – bph

+0

@Hiett, Không, tôi không có ý định để người dùng cài đặt kho chứa Python và sau đó cài đặt chương trình của bạn. Trừ khi sản phẩm của bạn chủ yếu được sử dụng như một thư viện Python, điều đó sẽ không có ý nghĩa. Tôi không chắc chắn lý do tại sao bạn nghĩ rằng tôi có nghĩa là để làm một cái gì đó khác hơn là có người sử dụng đi qua quá trình cài đặt bình thường cho nền tảng của họ (chỉ một lần). –

1

Tạo ứng dụng web bằng python. Thế thì thế giới có thể sử dụng nó thông qua một trình duyệt không cài đặt.

+0

chúng tôi không phát triển các ứng dụng web - nếu chỉ đơn giản là dễ dàng – bph

+0

@Hiett: Ngày càng có nhiều thứ được sử dụng để chỉ có thể phần mềm "máy tính để bàn" hiện có sẵn dưới dạng phần mềm Web. Bạn có chắc chắn * những gì bạn đang làm không thể được thực hiện như một ứng dụng Web? –

+0

LOL ... có bao nhiêu người nghĩ rằng chỉ có khách hàng - nếu bạn phát triển một ứng dụng web (hoặc bất kỳ ứng dụng phía máy chủ nào) trong Python, và muốn bán nó, và không muốn giải phóng toàn bộ mã nguồn, bạn có khỏe không Viết một ứng dụng web (máy chủ) khác? C'mon ... –

3

Vâng, nó phụ thuộc vào những gì bạn muốn làm. Nếu bằng cách "không phát hành mã nguồn", bạn có nghĩa là "khách hàng sẽ không thể truy cập vào mã nguồn theo bất kỳ cách nào", tốt, bạn đang chiến đấu với một trận thua. Ngay cả các chương trình được viết bằng C cũng có thể được thiết kế ngược lại. Nếu bạn sợ ai đó sẽ ăn cắp từ bạn, hãy khiến họ ký hợp đồng và kiện họ nếu có rắc rối. Nhưng nếu bạn muốn nói "khách hàng không nên quan tâm đến các tệp python và không thể truy cập chúng", bạn có thể sử dụng một giải pháp như cx_Freeze để biến ứng dụng Python của bạn thành một tệp thực thi.

6

Có, bạn có thể thực hiện các gói cài đặt. Tìm kiếm py2exe, cx_freeze và những người khác.

Không, không thể giữ mã nguồn hoàn toàn an toàn. Luôn luôn có cách để dịch ngược.
Mã nguồn ban đầu có thể thu được từ các tệp .pyc nếu ai đó muốn thực hiện. Mã obfuscation sẽ làm cho nó khó khăn hơn để làm điều gì đó với mã.

3

Tôi ngạc nhiên không ai đề cập đến điều này trước đây, nhưng Cython có vẻ như là giải pháp khả thi cho vấn đề này.Nó sẽ lấy mã Python của bạn và transpile nó vào mã C tương thích CPython. Bạn cũng nhận được một tăng tốc độ nhỏ (~ 25% cuối cùng tôi đã kiểm tra) vì nó sẽ được biên dịch thành mã máy gốc thay vì chỉ mã byte Python. Bạn vẫn cần phải chắc chắn rằng người dùng đã cài đặt Python (hoặc bằng cách làm cho nó trở thành một điều kiện tiên quyết được đẩy lên người dùng để xử lý hoặc bó nó như là một phần của quá trình cài đặt). Ngoài ra, bạn cần phải có ít nhất một phần nhỏ của ứng dụng của bạn trong Python thuần túy: móc vào hàm chính.

Vì vậy, bạn sẽ cần một cái gì đó cơ bản như thế này:

import cython_compiled_module 

if __name__ == '__main__': 
    cython_compiled_module.main() 

Nhưng điều này rò rỉ một cách hiệu quả không có chi tiết thực hiện. Tôi nghĩ rằng việc sử dụng Cython phải đáp ứng các tiêu chí trong câu hỏi, nhưng nó cũng giới thiệu tính phức tạp của việc biên dịch trong C, làm mất đi một số tính chất đa nền tảng dễ dàng của Python. Cho dù đó là giá trị nó hay không là tùy thuộc vào bạn.

Như những người khác đã nói, ngay cả mã C được biên dịch kết quả cũng có thể được giải mã với một chút nỗ lực, nhưng có khả năng nó gần giống với loại obfuscation bạn ban đầu mong đợi hơn.

Các vấn đề liên quan