Kivy veritabanı bağlantısı sorunu

Merhaba arkadaşlar;

Benim sorunum şu şekilde, kivy ile basit bir pencere oluşturuyorum ve bir buton var tıkladığınız zaman veritabanı bağlantısı sağlayıp label’ı bağlantı başarılı şeklinde güncelliyor.

Burda iki çeşit sorunum var;

  1. si sqlite3 kütüphanesini import edersem hiç bir kod yazmasam dahi buildozer.spec dosyasına kütüphaneyi eklememe rağmen, uygulama android üzerinde çöküyor, debian üzerinde sıkıntı vermiyor ama.

  2. Altarnatif olarak bulduğum sqlalchemy kütüphanesi ise importta sıkıntı çıkarmıyor ama aynı keza veritabanı bağlantısı kurmak istediğimde uygulama çöküyor ve yine debian üzerinde sıkıntı çıkarmıyor.

Dosyalar;
https://yadi.sk/d/B1DTkAe03NQYpg

Kodlar;

# -*- coding: utf-8 -*-
import kivy
kivy.require('1.9.1')
from kivy.app import App
from kivy.uix.button import Button
from sqlalchemy import create_engine
from kivy.uix.label import Label

class MyApp(App):

    def build(self):
        pass

    def olustur(self):
        engine = create_engine('sqlite:///database.db', echo = True)
        cur = engine.connect()
        self.root.ids['etkt'].text = 'Bağlantı Başarılı!'

if __name__ == '__main__':
    MyApp().run()

sorunla ilgili telefondan aldığım hata iletisi pysqlite2 modulünün yüklü olmadığını söylüyor sanırım yükledim yine olmadı

Merhaba, daha önce hiç kivy kullanmadım, ancak konuyla alakalı birkaç link buldum.

  1. https://gist.github.com/shadowmint/7004832
  2. https://stackoverflow.com/questions/28056620/handle-database-in-kivy-android-app

Umarım linklerin faydası olur.

1 Beğeni

Hocam öncelikle ilginiz için teşekkür ederim;

https://gist.github.com/shadowmint/7004832 bu linkteki kodları aynen copy/paste yapmama rağmen cihazımda çalışmadı

https://stackoverflow.com/questions/28056620/handle-database-in-kivy-android-app bu linkte ise eğer atladığım bir nokta yok ise dediklerini denedim işe yaramadı, çok küçük bir ayrıntıyı gözden kaçırdığımı düşünüyorum bu konuda internette bulacağım bilgilerden ziyade beyin fırtınasına ihtiyacım olduğunu düşünüyorum :slight_smile: iyi çalışmalar.

Keşke konuyla daha önce ilgilenmiş olsaydım da beyin fırtınası yapabilseydik. :slight_smile: Umarım ilerleyen zamanlarda bu sorunu halledersiniz. Size de iyi çalışmalar.

Konuyla ilgilenmeniz gerektigini düşünmüyorum hocam deneyimli bir kullanıcı olarak kodları inceleyip fikirlerinizi paylaşmanızı rica ediyorum gerçekten çok küçük bir ayrıntıyı atladığıma eminim :slight_smile:

Kodları inceleyeyim incelemesine de, nerden başlamam gerektiğini bilmiyorum. Az önce meraktan kivy modülünü pipten çekeyim dedim. Şimdi bir baktım, indirme işlemi tamamlanmamış, sebeb olarak da Cython’un kurulu olmaması yazıyor. Şimdi Cython’u indiriyorum. :slight_smile:

Demek istediğim kodları çalıştırmadan nerede nasıl bir hata olduğunu daha test edemiyorum.

1 Beğeni

takıldığınız bir yer veya sorunuz olursa bildiğim kadarıyla yardımcı olurum hocam burdan bana ulaşın.

Ubuntu üzerinde paylaştığınız kodları çalıştırdım.


Siz bu kodları telefonda çalıştırmak istiyordunuz. Ne yapmam gerekiyor peki şimdi? Qpython diye bir uygulama var google store’dan telefona indirmiştim. Onu mu kullanmamız gerekiyor?

1 Beğeni

Hocam derlemek için buildozer diye bir framework var aşşağıdaki linkte kurulum ve kullanımı mevcut. Yine de özet geçelim paylaştığım dosyaların bulunduğu yani main.py’nin bulunduğu klasörde terminal açıp önce “buildozer init” komutunu ardından “buildozer -v android debug” komutunu yürütürseniz aynı klasör altında bir bin klasörü oluşturup içine apk atıyor. Bu şekilde deneyip sonucu paylaşırsanız sevinirim hocam, iyi çalışmalar.

NOT: ilk derleme uzun sürüyor android sdk ve ndk paketlerini indiriyor…

https://buildozer.readthedocs.io/en/latest/

Ubuntu 17.04 kullanıyorum, sitede 17.04 için bir yol gösterilmemiş, 16.04 için olan komutları kullandım.
Kivy’yi yüklerken Cython’un 0.25 sürümü şu şekilde kurulmuştu:

pip3 install -I Cython==0.25.2

Android on Ubuntu 16.04 (64bit) başlığının ilk komutunda ise Cython’un 0.21 sürümüne upgrade yapılıyor galiba. 0.25 sürümü yüklü olduğu için bu komutu es geçtim. Diğer komutları yazdım. Son komutun çalışması bittikten sonra main.py’in bulunduğu dizinde uç birimi açıp buildozer init yazınca, “komut bulunamadı” yazdı.

Edit: Sonra acaba Cython’u 0.21 sürümüne upgrade etse miydim diye düşündüm, yükleme işlemini baştan yaptım ama yine “komut bulunamadı” yazısı çıktı.

Edit: https://github.com/kivy/buildozer sitesinden çektim.

sudo pip3 install https://github.com/kivy/buildozer/archive/master.zip

Son komutu da çalıştırdım şöyle bir sonuç aldım:

/bin/sh: 1: pip: not found
# Command failed: pip install -q --user "appdirs" "colorama>=0.3.3" "sh>=1.10,<1.12.5" "jinja2" "six"
# 
# Buildozer failed to execute the last command
# The error might be hidden in the log above this error
# Please read the full log, and search for it before
# raising an issue with buildozer itself.
# In case of a bug report, please add a full log with log_level = 2

Daha sonradan “appdirs”, “colorama”, “sh”, “jinja2” ve “six” modüllerini indirdim, tekrar denedim, sonuç yine aynı çıktı.

Acaba pip kurulu olmadığı için mi böyle oluyor merak ettim.

Edit: Evet, pip’i ve ilgili modülleri kurduktan sonra tekrar denedim. Şimdi dediğiniz gibi paketleri indiriyor.

1 Beğeni

Derleme esnasında bir kaç kez hatayla karşılaştım. Hatanın birinde virtualenv yok yazıyordu. Onu da indirdim. Sonra derleme işlemini tekrar yaptım, aynı yerde hata vermedi ama ilerleyen kısımda aşağıdaki hatayı aldım. Neyse biraz inceleyeyim belki bir çözüm yolu bulunur.

[INFO]:    <- directory context /home/tanberk/İndirilenler/.buildozer/android/platform/python-for-android-master
[INFO]:    Recipe build order is ['hostpython2', 'sdl2_image', 'sdl2_mixer', 'sdl2_ttf', 'python2', 'sdl2', 'six', 'pyjnius', 'kivy']
[INFO]:    # Downloading recipes 
[INFO]:    Downloading hostpython2
[INFO]:    -> running mkdir -p /home/tanberk/İndirilenler/.buildozer/android/platform/build/packages/hostpython2
[INFO]:    -> directory context /home/tanberk/İndirilenler/.buildozer/android/platform/build/packages/hostpython2
[INFO]:    -> running basename http://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2
[INFO]:    -> running rm -f .mark-Python-2.7.2.tar.bz2                                                                                          
[INFO]:    Downloading hostpython2 from http://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2
Traceback (most recent call last):
  File "/usr/lib/python3.5/urllib/request.py", line 1698, in open
    return getattr(self, name)(url)
  File "/usr/lib/python3.5/urllib/request.py", line 1908, in open_https
    return self._open_generic_http(self._https_connection, url, data)
  File "/usr/lib/python3.5/urllib/request.py", line 1857, in _open_generic_http
    http_conn.request("GET", selector, headers=headers)
  File "/usr/lib/python3.5/http/client.py", line 1107, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
    self.send(msg)
  File "/usr/lib/python3.5/http/client.py", line 877, in send
    self.connect()
  File "/usr/lib/python3.5/http/client.py", line 1261, in connect
    server_hostname=server_hostname)
  File "/usr/lib/python3.5/ssl.py", line 385, in wrap_socket
    _context=self)
  File "/usr/lib/python3.5/ssl.py", line 760, in __init__
    self.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 996, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 641, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)

1 Beğeni

Merhaba, kivy launcher içindeki klasörünüzde logs klasörü oluşur programı çalıştırdığınızda.
log dosyalarında hata kayıtları mevcut oluyor. Hata kaydı size neden çalışmadığı konusunda yardımcı olabilir diye düşünüyorum.

1 Beğeni

Hocam merhaba;

Kivy launcher kullanmıyorum hocam doğrudan apk çalıştırıyorum. Log kaydını da adb logcat ve buildozer logcat ile alıyorum anladığım kadarıyla da pysqlite diye bir modülü import etmeye çalışıyor edemediği için hata veriyor ama onu neden import edemediğini anlayamadım…

Hocam bunu hangi python versiyonunda yapıyorsunuz benim kullandığım version 3.5 ve pycharm editörü ile yazdım.

python dosyalarını kivy launcher ile mobilde çalıştırabilirsiniz .
Qpython adlı programdan qpypi menüsünden modülü tekrar kurup deneyin.
evde olmadığımdan mobilde bakamıyorum

1 Beğeni

Python 3.5 sürümünü kullanıyorum.

hostpython2’yi neden yüklemediğini araştırdım dün gece. Ancak tatmin edici bir cevap alamadım. Yalnız kivy’nin ilk derlemesinde sorunla karşılaşan insanlar olduğunu gördüm. Sizin de bildiğiniz gibi derleme esnasında bazı paketler indiriliyor. Mesela hostpython2 ile ilgili sorun yaşayan kimseyle karşılaşmadım.

Siz de mi derleme esnasında sorunla karşılaştınız?

Bu arada konuyu araştırıyorum.

Birisi bana “madem python3 kullanıyorsunuz o zaman hostpython2 yerine hostpython3’ü yerleştirin” dedi. Ben de hostpython2’nin “buildozer -v android debug” komutunu yazınca otomatik olarak indirildiğini yazdım.

1 Beğeni

Okuduğum yazılara göre sanırım eksik yaptığım birşeyler varmış.

Buildozer’i github’da verilen talimatlara göre yeniden kurmayı denedim.

  1. Kaynaktan buildozer kurulumu:
git clone https://github.com/kivy/buildozer
cd buildozer
python setup.py build
sudo pip install -e .
  1. Crystax NDK’ın kurulumu:
    https://www.crystax.net/en/download
    Dosyalar ~/.buildozer/crystax-ndk dizinine çıkartıldı.

  2. main.py’nin bulunduğu dizinde aşağıdaki komut yazıldı.

buildozer init
  1. buildozer.spec dosyası oluşturulduktan sonra dosya içinde gerekli değişiklikler yapıldı.
requirements = python3crystax,kivy
android.ndk_path = ~/.buildozer
  1. Son olarak derleme işlemi başlatıldı.
buildozer -v android debug

Bu kez sanırım python3crystax’ı indirdiğim için.hostpython2 hatası almadım. Ama başka bir hata aldım.
Bu hata da six paketinden kaynaklanıyor. Halbuki six paketi daha önceden indirilmişti.

Hatanın çıktısı şöyle:

[INFO]:    Downloading six
[INFO]:    -> running mkdir -p /home/tanberk/İndiril...(and 52 more)
[INFO]:    -> directory context /home/tanberk/İndirilenler/.buildozer/android/platform/build/packages/six
[INFO]:    -> running basename https://pypi.python.or...(and 40 more)
[INFO]:    -> running rm -f .mark-six-1.9.0.tar.gz                             
[INFO]:    Downloading six from https://pypi.python.org/packages/source/s/six/six-1.9.0.tar.gz
Traceback (most recent call last):
  File "/usr/lib/python3.5/urllib/request.py", line 1698, in open
    return getattr(self, name)(url)
  File "/usr/lib/python3.5/urllib/request.py", line 1908, in open_https
    return self._open_generic_http(self._https_connection, url, data)
  File "/usr/lib/python3.5/urllib/request.py", line 1857, in _open_generic_http
    http_conn.request("GET", selector, headers=headers)
  File "/usr/lib/python3.5/http/client.py", line 1107, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python3.5/http/client.py", line 1152, in _send_request
    self.endheaders(body)
  File "/usr/lib/python3.5/http/client.py", line 1103, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
    self.send(msg)
  File "/usr/lib/python3.5/http/client.py", line 877, in send
    self.connect()
  File "/usr/lib/python3.5/http/client.py", line 1261, in connect
    server_hostname=server_hostname)
  File "/usr/lib/python3.5/ssl.py", line 385, in wrap_socket
    _context=self)
  File "/usr/lib/python3.5/ssl.py", line 760, in __init__
    self.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 996, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 641, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)

hostpython2 paketi de python’ın sitesinden çekiliyordu ve hata vermişti, six paketi de python’ın sitesinden çekiliyor ve aynı hatayı verdi. Sertifika sorunu hatası gibi görünüyor.

hocam birde bu komut ile derlemeyi dener misiniz

buildozer android debug release deploy run

Malesef bir değişiklik olmadı.

Acaba hata sdk sürümünden mi kaynaklanıyor yani buildozer in indirdiği sdk sizin telefonunuzdaki sdk ile çakışıyor mu?