Aşağıdakine benzer bir dizin yapım var
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
Çalışırken notebook.jpynb
bir işleve erişmek için göreli ithalat kullanmaya çalışırsanız function()
içindemodule.py
birlikte:
from ..project1.lib.module import function
Şu hatayı alıyorum:
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
Bunu göreli ithalatı kullanarak çalıştırmanın bir yolu var mı?
Not, dizüstü bilgisayar sunucusu şu düzeydedir: meta_project
dizin , dolayısıyla bu dosyalardaki bilgilere erişimi olması gerektiğini unutmayın.
Ayrıca, en azından başlangıçta amaçlandığı project1
gibi bir modül olarak düşünülmediğine ve bu nedenle bir __init__.py
dosyaya sahip olmadığına, sadece bir dosya sistemi dizini olarak kastedildiğine dikkat edin. Sorunun çözümü, onu bir modül olarak ele almayı ve bir __init__.py
dosya (hatta boş bir dosya) eklemeyi gerektiriyorsa, bu sorun değildir, ancak bunu yapmak sorunu çözmek için yeterli değildir.
Bu dizini makineler arasında paylaşıyorum ve ilgili içe aktarmalar her yerde aynı kodu kullanmama izin veriyor ve hızlı prototip oluşturma için sık sık not defterleri kullanıyorum, bu nedenle mutlak yolları birlikte hacklemeyi içeren önerilerin yardımcı olma olasılığı düşüktür.
Düzenleme: Bu, genel olarak Python 3'teki göreli içe aktarmalardan bahseden ve - özellikle - bir paket dizininden bir komut dosyası çalıştıran Python 3'teki Göreli içe aktarmalardan farklıdır . Bu, hem farklı genel hem de özel yönleri olan başka bir dizindeki yerel bir modüldeki bir işlevi çağırmaya çalışan bir jupyter not defterinde çalışmakla ilgilidir.
lib
dizinde.
__init__
paket dizininizde herhangi bir dosya var mı?