2015-06-11 53 views
6

Tôi biết sự khác biệt giữa liên kết tĩnh và động trong C hoặc C++. Nhưng nó có ý nghĩa gì trong Python? Vì nó chỉ là một thông dịch viên, và chỉ có một kiểu cơ chế nhập khẩu của các mô-đun, điều này có ý nghĩa như thế nào?Có nghĩa là gì khi liên kết tĩnh và liên kết động trong Python?

Nếu tôi đóng băng ứng dụng Python bằng cx_freeze bằng cách loại trừ một thư viện cụ thể, đó có phải là loại liên kết động không? Bởi vì, người dùng phải tự tải xuống và cài đặt thư viện đó để chạy ứng dụng của tôi.

Thực ra vấn đề của tôi là, tôi đang sử dụng thư viện PySide (với LGPL v2.1) để phát triển ứng dụng GUI của Python. Thư viện nói rằng tôi nên liên kết động với thư viện để tuân theo các điều khoản pháp lý của họ (giống như Qt). Trong trường hợp này, làm thế nào để tôi liên kết với PySide động?

+0

Tôi nghĩ bất kỳ cách nào bạn thường sử dụng tính năng PySide là liên kết động, ngay cả khi đó là một phần của cùng một tải xuống. Nếu bạn xây dựng một file exe duy nhất (mà cx_Freeze không làm anyway), một số người có thể gọi đó là liên kết tĩnh, nhưng tôi nghĩ rằng hầu hết vẫn không. Đi trước và sử dụng nó - nó có cho mọi người để xây dựng các ứng dụng Python, vì vậy nếu đó là những gì bạn đang làm, bạn có lẽ tốt. –

+0

Cảm ơn bạn Thomas. Bạn có nghĩa là, ngay cả khi tôi xây dựng một tệp exe đơn lẻ (sử dụng pyinstaller hoặc bất kỳ thứ gì), nó vẫn là liên kết động? Nếu sau đó tôi có thể tiếp tục với một tệp readme đơn giản để hướng dẫn nơi tải xuống các nguồn pyside. Là nó? – Kaje

+0

Tôi nghĩ hầu hết mọi người sẽ nói rằng đó vẫn là liên kết động và những gì bạn đề xuất sẽ ổn. Nếu bạn lo lắng, hãy hỏi [Danh sách gửi thư PySide] (http://lists.qt-project.org/mailman/listinfo/pyside) về nó - đó là cách giải thích của họ rất quan trọng. Nhưng tôi sẽ rất ngạc nhiên nếu họ nghĩ điều đó không đủ tốt. –

Trả lời

0

Trong trăn không có liên kết tĩnh. Tất cả các yêu cầu nhập khẩu phải được cài đặt đúng trên máy mục tiêu của chúng tôi. Việc lựa chọn phiên bản của các thư viện đó là quyết định của chúng tôi.

Bây giờ, hãy đến các trình tạo nhị phân cho python. Trong trường hợp này, chúng ta sẽ phải xác định loại liên kết dựa trên các định nghĩa GNU. Nếu người dùng có thể thay thế sự phụ thuộc như anh ta thích, thì nó là động. Nếu phụ thuộc được gắn với chính bản thân nhị phân, thì đó là liên kết tĩnh. Trong trường hợp cx_freeze hoặc pyinstaller, nếu chúng ta xây dựng nó như một tệp, thì đó là liên kết tĩnh. Nếu chúng ta xây dựng điều này ở chế độ bình thường, nơi tất cả các phụ thuộc được thu thập dưới dạng các tệp riêng biệt, thì đó là liên kết động. Ý tưởng là, liệu chúng ta có thể thay thế sự phụ thuộc vào máy đích hay không.

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