Tôi có cấu trúc thư mục tương tự như sau
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Khi làm việc trong notebook.jpynb
nếu tôi cố gắng sử dụng nhập tương đối để truy cập một hàm function()
trong module.py
:
from ..project1.lib.module import function
Tôi nhận được lỗi sau đây:
SystemError Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function
SystemError: Parent module '' not loaded, cannot perform relative import
Có cách nào để điều này hoạt động bằng cách sử dụng nhập khẩu tương đối không?
Lưu ý, máy chủ sổ ghi chép được khởi tạo ở cấp độ meta_project
thư mục, vì vậy nó phải có quyền truy cập vào thông tin trong các tệp đó.
Ngoài ra, lưu ý rằng ít nhất như dự định ban đầu project1
không được coi là một mô-đun và do đó không có __init__.py
tệp, nó chỉ có nghĩa là một thư mục hệ thống tệp. Nếu giải pháp cho vấn đề yêu cầu coi nó như một mô-đun và bao gồm một __init__.py
tệp (thậm chí một tệp trống) thì cũng được, nhưng làm như vậy là không đủ để giải quyết vấn đề.
Tôi chia sẻ thư mục này giữa các máy và quá trình nhập tương đối cho phép tôi sử dụng cùng một mã ở mọi nơi và tôi thường sử dụng sổ ghi chép để tạo mẫu nhanh, vì vậy các đề xuất liên quan đến việc hack cùng nhau các đường dẫn tuyệt đối không có khả năng hữu ích.
Chỉnh sửa: Điều này không giống như Nhập tương đối trong Python 3 , nói về nhập tương đối trong Python 3 nói chung và - đặc biệt - chạy một tập lệnh từ bên trong một thư mục gói. Điều này liên quan đến việc làm việc trong sổ ghi chép jupyter cố gắng gọi một hàm trong mô-đun cục bộ trong một thư mục khác có cả khía cạnh chung và riêng khác nhau.
lib
thư mục.
__init__
tệp nào trong thư mục gói của bạn không?