Çözüldü Python attempted relative import beyond top-level package Hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Blue Life

Kilopat
Katılım
24 Aralık 2014
Mesajlar
446
Daha fazla  
Cinsiyet
Erkek
Merhaba.
Python projemde aşağıdaki hatayı alıyorum. Çözümü bulamadım.

ImportError: attempted relative import beyond top-level package

Aşağıdaki şekilde bir soruya denk geldim ama anlatılmak istenen şeyi anlamadım.
beyond top level package error in relative import

Bu konuda yardımcı olabilir misiniz?

Hata.png


Kodlarım

[CODE lang="python" title="Python"]NOTLAR

1 - design_ui klasöründe .ui uzantılı tasarım dosyaları vardır.
2 - ui klasöründe .ui uzantılı dosyaların .py uzantısına çevrilmiş halleri vardır.
3 - py klasöründe programın class dosyaları vardır. Tasarımlar ui klasöründen import edilmektedir.
4 - main.py dosyası tasarımını direkt olarak ui klasöründen import edilmektedir.

ALDIĞIM HATA

#####################################################################################################

C:\Python\python.exe C:/PythonLearning/Projeler/GelismisKutuphaneSistemi/main.py
Traceback (most recent call last):
File "C:\PythonLearning\Projeler\GelismisKutuphaneSistemi\main.py", line 4, in <module>
import py.UyeEkle
File "C:\PythonLearning\Projeler\GelismisKutuphaneSistemi\py\UyeEkle.py", line 2, in <module>
from ..sql.Sql import *
ImportError: attempted relative import beyond top-level package

Process finished with exit code 1

#####################################################################################################

----------------------------------------------
ANA DİZİN main.py
----------------------------------------------

import sys
from sql.Sql import *

import py.UyeEkle
import py.KitapEkle
import py.OduncKitaplar

from PyQt5.QtWidgets import *
from ui.Kutuphane import *

class Pencere(QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.Init_Ui()
self.KitaplariListele()

def Init_Ui(self):
self.actionUyeEkle.triggered.connect(self.UyeEkle)
self.actionKitapEkle.triggered.connect(self.KitapEkle)
self.actionOduncKitap.triggered.connect(self.OduncKitapVer)
self.show()

def UyeEkle(self):
self.uyeEkle = py.UyeEkle.Uye()
self.uyeEkle.show()

def KitapEkle(self):
self.kitapEkle = py.KitapEkle.Kitap()
self.kitapEkle.show()

def OduncKitapVer(self):
self.oduncKitap = py.OduncKitaplar.OduncKitap()
self.oduncKitap.show()


def main():
uygulama = QApplication(sys.argv)
pencere = Pencere()
sys.exit(uygulama.exec_())

if __name__ == "__main__":
main()


----------------------------------------------
py KLASÖRÜ UyeEkle.py
----------------------------------------------
import sys
from ..sql.Sql import *

from PyQt5.QtWidgets import *
from ..ui.UyeKayit import *

class Uye(QDialog,Ui_Dialog):
def __init__(self):
super(Uye,self).__init__()
self.setupUi(self)
self.Init_Ui()

def Init_Ui(self):
self.pushButtonKaydet.clicked.connect(self.UyeKayit)
self.pushButtonKapat.clicked.connect(self.Kapat)

def UyeKayit(self):
pass

def Kapat(self):
self.close()


----------------------------------------------
sql KLASÖRÜ Sql.py
----------------------------------------------

import sqlite3

dbconnect = sqlite3.connect("sql/GelismisKutuphaneSistemi.db")
db = dbconnect.cursor()

def UyeEkle(uye_adisoyadi, uye_telefonu):
db.execute("INSERT INTO uyeler (uye_adisoyadi, uye_telefonu) VALUES (?,?)", (uye_adisoyadi, uye_telefonu))
dbconnect.commit()

def KitapEkle(kitap_adi, kitap_yazari, kitap_aciklamasi, kitap_sayfasayisi, kitap_dili):
db.execute("INSERT INTO kitaplar (kitap_adi, kitap_yazari, kitap_aciklamasi, kitap_sayfasayisi, kitap_dili) VALUES (?,?,?,?,?)",(kitap_adi, kitap_yazari, kitap_aciklamasi, kitap_sayfasayisi, kitap_dili))
dbconnect.commit()

def KitaplariListele():
kitaplar = db.execute("SELECT kitap_id, kitap_adi, kitap_yazari, kitap_sayfasayisi, kitap_dili, kitap_durum FROM kitaplar")
return kitaplar[/CODE]
 
Son düzenleyen: Moderatör:
Çözüm
UyeEkle.py'deki from ..sql.Sql import * .. iki noktanın olmaması gerekmiyor mu? main.py parent dir olarak kabul edersek import operandı bu dir üzerinden çalışması lazım from sql.Sql import * olarak denedin mi?
UyeEkle.py'deki from ..sql.Sql import * .. iki noktanın olmaması gerekmiyor mu? main.py parent dir olarak kabul edersek import operandı bu dir üzerinden çalışması lazım from sql.Sql import * olarak denedin mi?
 
Çözüm
UyeEkle.py'deki from ..sql.Sql import * .. iki noktanın olmaması gerekmiyor mu? main.py parent dir olarak kabul edersek import operandı bu dir üzerinden çalışması lazım from sql.Sql import * olarak denedin mi?
Sizin cevabınız üzerine denedim. Evet program çalıştı ve hata vermedi.

- Ama kalın bir biçimde belirttiğim kısım editörde altı kırmızı çizgili oluyor. İki nokta koyunca yani şu şekilde (from ..sql.Sql import *) kırmızı çizgi gidiyor.

from sql.Sql import *

Bu konuyu anlamadım. Tek nokta dosyanın bulunduğu dizini, iki nokta olunca bir üst dizini ifade etmiyor mu?
 
Sizin cevabınız üzerine denedim. Evet program çalıştı ve hata vermedi.

- Ama kalın bir biçimde belirttiğim kısım editörde altı kırmızı çizgili oluyor. İki nokta koyunca yani şu şekilde (from ..sql.Sql import *) kırmızı çizgi gidiyor.

from sql.Sql import *

Bu konuyu anlamadım. Tek nokta dosyanın bulunduğu dizini, iki nokta olunca bir üst dizini ifade etmiyor mu?
Mantiken evet iki noktayla üst dizine çıkıyor ancak python ana dizin olarak sql dosyasının olduğu dizini değil main.py dosyasının oldugu dizini anadizin kabul ediyor, sen iki nokta kullandığında da aslında main.py nin bulunduğu dizinin bir üstüne çıkıp orada sql klasörünü arıyor.

Senin düsünme mantığın doğru ancak python öyle çalışmıyor.
 
Mantiken evet iki noktayla üst dizine çıkıyor ancak python ana dizin olarak sql dosyasının olduğu dizini değil main.py dosyasının oldugu dizini anadizin kabul ediyor, sen iki nokta kullandığında da aslında main.py nin bulunduğu dizinin bir üstüne çıkıp orada sql klasörünü arıyor.

Senin düsünme mantığın doğru ancak python öyle çalışmıyor.
Teşekkür ederim cevabınız için.
 

Yeni konular

Geri
Yukarı