Saya memiliki struktur direktori yang mirip dengan berikut ini
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Ketika bekerja di notebook.jpynb
jika saya mencoba untuk menggunakan impor relatif untuk mengakses fungsi function()
di module.py
dengan:
from ..project1.lib.module import function
Saya mendapatkan kesalahan berikut:
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
Apakah ada cara untuk membuatnya bekerja menggunakan impor relatif?
Catatan, server buku catatan dibuat pada tingkat meta_project
direktori, jadi harus memiliki akses ke informasi di file tersebut.
Perhatikan, juga, bahwa setidaknya seperti yang dimaksudkan semula project1
tidak dianggap sebagai modul dan oleh karena itu tidak memiliki __init__.py
file, itu hanya dimaksudkan sebagai direktori sistem file. Jika solusi untuk masalah memerlukan memperlakukannya sebagai modul dan menyertakan __init__.py
file (bahkan yang kosong) itu baik-baik saja, tetapi melakukannya tidak cukup untuk menyelesaikan masalah.
Saya membagikan direktori ini antara mesin dan impor relatif memungkinkan saya menggunakan kode yang sama di mana-mana, & saya sering menggunakan notebook untuk pembuatan prototipe cepat, jadi saran yang melibatkan meretas jalur absolut tidak mungkin membantu.
Sunting: Ini tidak seperti impor Relatif di Python 3 , yang berbicara tentang impor relatif di Python 3 secara umum dan - khususnya - menjalankan skrip dari dalam direktori paket. Ini ada hubungannya dengan bekerja dalam notebook jupyter yang mencoba memanggil fungsi dalam modul lokal di direktori lain yang memiliki aspek umum dan khusus yang berbeda.
lib
direktori.
__init__
file di direktori paket Anda?