Tôi đang cố viết một trình cắm phần mềm nhúng Python. Trên Windows, trình cắm thêm về kỹ thuật là một DLL (điều này có thể có liên quan). Số Python Windows FAQ cho biết:Nhúng Python trên Windows: tại sao nó phải là một DLL?
1.Do không hãy tạo Python trực tiếp vào tệp .exe của bạn. Trên Windows, Python phải là một DLL để xử lý các mô-đun nhập khẩu là bản thân DLL. (Đây là chìa khóa đầu tiên không có giấy tờ thực tế.) Thay vào đó, liên kết đến pythonNN.dll; nó thường được cài đặt trong C: \ Windows \ System. NN là phiên bản Python, một số như “23” cho Python 2.3.
Câu hỏi của tôi là tại sao chính xác Python phải là một DLL? Nếu, như trong trường hợp của tôi, ứng dụng máy chủ không phải là .exe, mà còn là một DLL, tôi có thể xây dựng Python vào nó không? Hoặc, có lẽ, lưu ý này có nghĩa là các tiện ích mở rộng của bên thứ ba dựa trên pythonN.N.dll
để có mặt và các DLL khác sẽ không làm gì? Giả sử rằng tôi muốn thực sự muốn có một DLL duy nhất, tôi nên làm gì?
Tôi thấy có tệp dynload_win.c
, có vẻ như là mô-đun để nhập các tiện ích mở rộng C trên Windows và, theo như tôi thấy, tệp sẽ quét tệp tiện ích mở rộng để tìm kiếm nhập pythonX.X.dll
nào; nhưng tôi không có kinh nghiệm với Windows và tôi không hoàn toàn hiểu tất cả các mã ở đó.
Nếu tôi biên dịch các phần mở rộng thư viện chuẩn và liên kết chúng với DLL của tôi (sẽ được tạo bởi 'foo' và' bar' và tất cả các đối tượng thường đi vào 'pythonNN.dll' như tôi thấy trong' dự án pythoncore')? Trong trường hợp của tôi, OK có các phiên bản đặc biệt của thư viện chuẩn hoặc tiện ích mở rộng của bên thứ ba. –
Sau đó, bạn vẫn cần tất cả phần còn lại của thư viện chuẩn (tất cả các tệp .py, và các tệp .pyc và .pyo thường.) Chúng cũng là phiên bản Python cụ thể. Bạn có thể nén chúng lên nhưng bạn không thể tránh chúng. –
Vì vậy, về cơ bản, không có cách nào nhúng python trong ứng dụng của bạn mà không bó nó với một dll python? – viraj