Bên cạnh ncoghlan Tôi là người duy trì hệ thống nhập khẩu khác của Python và là tác giả của triển khai hiện tại của nó, importlib (http://docs.python.org/dev/py3k/l Library / imllib.html). Mọi thứ Nick nói tôi đồng ý, vì vậy tôi chỉ muốn thêm một số thông tin.
Đầu tiên, đừng phụ thuộc quá nhiều vào PEP 302 trực tiếp mà thay vào đó hãy nhìn vào những gì importlib cung cấp về các lớp cơ sở trừu tượng, v.v. Để những thứ tương thích ngược phải tương thích với PEP 302, nhưng tôi phải thêm một số API riêng để hoàn thành việc hỗ trợ cho sự linh hoạt thực sự.
Một điểm quan trọng khác là bạn đang cung cấp cho các nhà phát triển hai phần linh hoạt. Một là khả năng lưu trữ mã theo cách khác với chỉ trực tiếp trên hệ thống tệp dưới dạng các tệp riêng lẻ (tôi gọi đây là back-end lưu trữ để nhập), ví dụ: điều này cho phép mã sống trong tệp zip, cơ sở dữ liệu sqlite, v.v. . Hỗ trợ khác là cho phép kiểm soát mã trước hoặc sau quá trình theo một cách nào đó, ví dụ Quixote (https://www.mems-exchange.org/software/quixote/) và việc sử dụng thay thế chuỗi ký tự chuỗi không được gán cho một biến sẽ dễ dàng hơn nhiều để hỗ trợ.
Trong khi cái sau hiếm khi cần thiết, cái trước là nơi bạn phải lo lắng về hỗ trợ. Và đây là nơi bạn thực sự xác định lại các API tương tác hệ thống tệp. Vì một số người cần tài sản được lưu trữ dưới dạng tệp với mã của họ, bạn cần cung cấp một cách tốt để đọc tệp, khám phá tệp, v.v. Chúng tôi vẫn cần triển khai phần API để khám phá tệp dữ liệu nào có sẵn, liệt kê chúng, v.v. .
Nhưng sau đó, bạn cũng có nhu cầu về API dành riêng cho mã. Như Nick đã đề cập, cuối cùng bạn cần API để khám phá những mô-đun mà gói chứa, v.v. không phải là tệp cụ thể. Có sự đối ngẫu kỳ lạ của việc có API để xử lý các mô-đun nơi bạn đã trích xuất khái niệm tệp, nhưng sau đó bạn cần phải cung cấp API để truy cập dữ liệu tài sản giống như tệp. Và ngay khi bạn cố gắng thực hiện cái này liên quan đến cái kia để tránh trùng lặp, vùng nước trở nên rất âm u (tức là mọi người cuối cùng dựa vào cấu trúc đường dẫn tệp dự kiến, v.v. mà không chú ý đến thực tế đường dẫn có thể không phải là một con đường thực sự bởi vì nó dành cho mã zip chứa mã chứ không chỉ là tệp). IOW cuối cùng bạn sẽ phải thực hiện hai API tương tự, nhưng về lâu dài bạn sẽ có lợi hơn cho nó.
Như Nick đã nói, giải pháp của chúng tôi là một điểm khởi đầu tốt, nhưng đó không phải là cách tôi sẽ làm ngay hôm nay nếu tôi thiết kế API từ đầu.