Tôi đang sử dụng boost :: python để nhúng một số mã python vào một ứng dụng. Tôi đã có thể nhận được báo cáo in hoặc các biểu thức khác để được đánh giá đúng cách, nhưng khi tôi cố gắng nhập mô-đun, nó không phải là nhập khẩu và ứng dụng đang thoát. Hơn nữa hàm globals() trong mã nhúng cũng cung cấp một lỗi thời gian chạy.Làm cách nào để nhập mô-đun tăng cường :: mã python được nhúng python?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
Ở đây, tôi đã cố gắng nhập urllib2 bằng chức năng nhập tăng cường, biên dịch này và chạy đúng cách, nhưng với câu lệnh exec sau đây, nó đưa ra lỗi.
object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);
Hoặc khi tôi xóa chức năng nhập tăng và thực hiện nhập từ bên trong mã nhúng, nó cũng sẽ gây ra lỗi. Tôi đã thử bằng cách sử dụng một thử: ngoại trừ: khối nhưng điều đó không hoạt động hoặc. Có phải vì ứng dụng C++ không thể tìm thấy vị trí của mô-đun pyll urllib2 hay gì đó? Có cách nào để đặt đường dẫn của mô-đun trước khi cố gắng nhập không?
Điều này đang được xây dựng chỉ để sử dụng nội bộ, vì vậy một số mã hóa cứng của các đường dẫn là chấp nhận được.
Chỉnh sửa: Thông tin khác:
Đây là những gì sẽ xảy ra. Tôi đã làm một thử .. bắt và gọi PyErr_Print() khi bao giờ có một ngoại lệ, và có điều này như là lỗi tất cả các thời gian khi có mô-đun nhập khẩu hoặc thậm chí các cuộc gọi chức năng. Thông báo lỗi:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
Có ai có thể nghĩ ra lý do nào không?
Vui mừng bạn đã nhận mã của bạn làm việc. Bạn muốn làm gì với cái này? –
Ồ. Tôi đã hoàn toàn bị bệnh của các thư viện ổ cắm C++. Họ cần thời gian để hiểu, và vì tôi không phải là sinh viên máy tính, tôi mất nhiều thời gian để hiểu hơn. Vì vậy, tôi tạo ra một cái gì đó mà cảm thấy giống như một urllib không đồng bộ + + với pyll urllib2 ở phía sau. : D Tôi biết nó nghe có vẻ điên rồ. Nhưng bây giờ tôi có một giải pháp cực kỳ tiện lợi! – Sahas
Hehe, tốt cho bạn! –