Aklıma takılan bir soruyu sizlere sormayı tercih ettim. İnternette baktığımda önce Türkçe aratarak gezindim ardından İngilizce (Translate yardımıyla) aratarak gezindiğimde istediğim sonuca ulaşamadım…
Arkadaşlar sorum şu:
python ile yapılan herhangi grafiksel arayüzlü bir program da belirli bir sürenin sonunda tekrardan bunu geliştirdiğimizi düşünelim. Bu geliştirdiğimiz programı her seferinde üstüne katıp kullanıcılara aynı programı geliştirdiğimiz kadarıyla tekrar indirtmek yerine bunun “Yeni bir Güncelleme Mevcut Lütfen programını güncelle” gibi bir iletiyle kullanıcıyı uyarıp güncellemesini isteyelim…
Buraya kadar herşey gayet güzel ve hoş. Fakat şöyle bir problem var. Bu güncelleme işlemi nasıl oluyor. Yani nasıl yapılıyor mantığı nedir. Anlayacağınız kafamda bu anlamda deli sorular var…
Yoksa bu tür bahsettiğim durumu gerçekleştirmek için kütüphaneler mi mevcut ?
Forumda bu konuda gezinirken yanlış hatırlamıyorsam github ile ilgili konuşulmuştu. Bu güncelleme olaylarını github dan yapılabiliyormuş… Arkadaşlar bu nasıl oluyor peki açıklayabilir misiniz ?
Merakımı mazur görün gerçekten çok merak ediyorum
Cevap vericek arkadaşlarıma şimdiden teşekkür ediyorum
şu videodaki sizce ne kadar kullanışlı. Çünkü sizin yönlendirdiğiniz sayfadan linke tıkladığımda anlamakta gerçekten zorlandım. cx_freeze ile .exe ye dönüştürülerek yapıldığını gösteriyor…(kavramakta zorlandım açıkcası) bu videoyu incelermisiniz rica etsem ?
bu yolladığım linkteki videodakinin aynısıyla oluşturulan bir programı yazdım diyelim ve sizden yüklemenizi istedim ve yüklediniz. Ben programımda belirli updateleri kendimce yaptım ve elle sürümünü değiştirdim bu sizin yüklediğiniz programa nasıl yansır. Çünkü videodaki eleman kendi bilgisayarında işlemi gerçekleştiriyor. Burda önemli olan benim geliştirip sizde güncellenmenin olduğunun sorgulanması
Attığım linklerde güncelleme işlemini nasıl impleme edebileceğinize dair yazılar var. Yazılardan sadece birini anlamadınız diye nasıl hepsini görmezden geliyorsunuz anlamadım.
Kullanilan programlarin cogu sistemin paket yoneticisi (Debian ve turevlerinde apt, RH ve turevlerinde rpm, Arch’ta pacman…) tarafindan, cogunlukla otomatik olarak guncelleniyor.
Bunun disinda neredeyse sadece python ve node.js’te gordugum, pip ve npm ile* yonetilip bunlar tarafindan guncellenenler var. Bu guncelleme, paket yoneticileri kutuphane agirlikli olarak tasarlandiklari icin, elle oluyor.
Iki tur programda da internette bir yere bakip “yeni versiyonum var, istersen onu dene” diyenleri gordum. Kendini guncelleyen program bilmiyorum. (Discord var ama o bazen paket indirtiyo, bazen kendisi bir seyler indiriyo, bazen acilmiyo filan… iyi bir ornek degil. Python programi da degil.)
*: Bunlar da bu dillerin gayri resmi paket yoneticileri.
Kullanici haberdar oluyor. Bir sorunla karsilasirsa oncelikle yeni versiyonu kurmasi gerektigini biliyor. Bug raporu iletmeden, baskalarina danismadan once de.
Guncellemelerin kendileri dedigim gibi zaten paket yoneticileri uzerinden hallediliyor.
Ha; snap, appimage, flatpak gibi teknolojiler de var. Onlardan bildigim:
Snap: Zaten paket yoneticisi. Programlari otomatik yeniliyor. Kapanmadigi icin buyuk tehlike.
AppImage: Kendi kendini yenileyebiliyor. Kullaniciya ya soruyor ya da haber veriyor, ama hangisi, hatirlamiyorum. Ikincisiyse bu da potansiyel sorun.
Tamam teşekkür ediyorum. Yazdıklarınızdan anladığım kadarıyla güncelleme işini programını düzgünce oluştuup üstüne bişeyler ekledikçe kullanıcılarını uyar. Ve onlarda yeni sürümünü yani senin updatelediğin programı indirmelerini sağla
bir yöntem de şu olabilir ilgili güncelleme yeni bir klasör oluşturup güncel versiyonu ona yükleyip eski versiyonun klasörünü siliyor. böylece güncelleme olmuş oluyor.
Merhaba,
Arkadaşlar burada dediğim cümleyi gerçekleştirdiğimi düşünüyorum. Eksik kısmı yalnızca güncellediğimde nasıl bir önceki programa yazdıracağım. Bunu da çözersem tamamdır.
Nasıl gerçekleştirdiğime gelecek olursak yine internetten baktığımda AutoUpdate diye bir modül olduğunu gördüm. İndirdim ve nasıl çalışır nasıl yapılır diye de ona bakarken biraz yol kat ettim. Bu modülle iş yapabilmek için önce GitHub hesabımızın olması gerekiyormuş bu yüzden ilk kez GitHub hesabı oluşturdum. Oluşturduğumuz hesapta önce bir .txt dosyası yüklüyoruz onda da belirlediğimiz üst versiyon yazıyoruz ardından o dosyanın raw linkini kopyalıyoruz…
Ve işte kodlar:
(unutmadan yazayım time, os ve urllib.error modüllerini eklememin sebebi biraz gerçekçi olsun diye sonuçta burada yazdıklarım deneme yanılmayla geldiğim durum)
import time
import AutoUpdate
import os
import urllib.error
try:
AutoUpdate.set_url("https://raw.githubusercontent.com/Arif-Helmsys/Version/main/version.txt") # üstte bahsettiğim .txt dosyasının raw linki
AutoUpdate.set_download_link("https://raw.githubusercontent.com/Arif-Helmsys/Version/main/program.py") # .txt dosyasını okuttuktan sonra indirmesini istediğimiz örnek program
AutoUpdate.set_current_version("3.0") # .txt ye yazdığımız mevcut sürüm dışında herhangi bir sürüm numarası yazabiliriz
print(AutoUpdate.is_up_to_date()) # üstte yazdığımız sürüm .txt de yazılan sürümden düşükse yani güncel değilse False, güncelse True değerini ekranda görebiliriz
if not AutoUpdate.is_up_to_date(): # Eğer güncel değilse
print("indirme işlemi başlıyorr...")
time.sleep(1)
print("indiriliyor")
print(AutoUpdate.get_latest_version()) # .txt deki sürüm numarasını okuyup ekrana yazıdırıyor
if not os.path.exists("C:\\Users\\Arif\\Desktop\\Updater"): # masaüstünde Updater klasörü yoksa
print("klasör oluşturuldu")
os.makedirs("C:\\Users\\Arif\\Desktop\\Updater") # masaüstüne Updater klasörünü oluştur
AutoUpdate.download("C:\\Users\\Arif\\Desktop\\Updater\\updater.py") # Oluşturulan klasöre updater.py adında dosyayı indir
else: # Şayet böyle bir klasör varsa
AutoUpdate.download("C:\\Users\\Arif\\Desktop\\Updater\\updater.py") # updater.py adında dosyayı var olan klasöre indir
elif AutoUpdate.is_up_to_date(): # Güncelse
print("sürümünüz güncel")
except urllib.error.URLError: # internet bağlantısı yoksa
print("hata internet bağlantınızı kontrol edin")